Mike Sherrill 'Cat Recall' mükemmel bir cevap verdi . Sadece bir örnek ekleyeceğim: Postgres .
Küme = Postgres Kurulumu
Postgres'i bir makineye kurduğunuzda, bu kuruluma küme adı verilir . Buradaki "küme" , birden fazla bilgisayarın birlikte çalıştığı donanım anlamında kastedilmemektedir . Postgres'te küme , aynı Postgres sunucu motorunu kullanarak tümüyle çalışır durumda olan birden fazla ilgisiz veritabanına sahip olabileceğiniz gerçeğini ifade eder.
Kelime kümesi de Postgres ile aynı şekilde SQL Standardı tarafından tanımlanır . SQL Standardını yakından takip etmek, Postgres projesinin birincil hedefidir.
SQL-92 şartname diyor ki:
Küme, uygulama tanımlı bir katalog koleksiyonudur.
ve
Tam olarak bir küme bir SQL oturumuyla ilişkilidir
Bu, bir kümenin bir veritabanı sunucusu olduğunu söylemenin geniş bir yolu (her katalog bir veritabanıdır).
Küme> Katalog> Şema> Tablo> Sütunlar ve Satırlar
Dolayısıyla hem Postgres hem de SQL Standardında şu kapsama hiyerarşisine sahibiz:
- Bir bilgisayarın bir veya birden çok kümesi olabilir.
- Bir veritabanı sunucusu bir kümedir .
- Bir kümenin katalogları vardır . (Katalog = Veritabanı)
- Katalogların şemaları vardır . (Şema = tabloların ad alanı ve güvenlik sınırı)
- Şemaların tabloları vardır .
- Tabloların satırları vardır .
- Satırların sütunlarla tanımlanan değerleri vardır . Bu değerler, uygulamalarınızın ve kullanıcıların ilgilendiği kişi adı, fatura son ödeme tarihi, ürün fiyatı, oyuncunun yüksek puanı gibi iş verileridir. Sütun , değerlerin veri türünü (metin, tarih, sayı vb.) Tanımlar .
Çoklu Küme
Bu şema tek bir kümeyi temsil etmektedir. Postgres durumunda, ana bilgisayar (veya sanal işletim sistemi) başına birden fazla kümeye sahip olabilirsiniz. Postgres'in yeni sürümlerini test etmek ve dağıtmak için genellikle birden çok küme yapılır (ör. 9.0 , 9.1 , 9.2 , 9.3 , 9.4 , 9.5 ).
Birden fazla kümeniz varsa, yukarıdaki diyagramın kopyalandığını hayal edin.
Farklı bağlantı noktası numaraları, birden fazla kümenin aynı anda yan yana ve çalışır durumda yaşamasına izin verir. Her kümeye kendi bağlantı noktası numarası atanacaktır. Her zamanki 5432
yalnızca varsayılandır ve sizin tarafınızdan ayarlanabilir. Her küme, gelen veritabanı bağlantıları için kendi atanmış bağlantı noktasını dinliyor.
Örnek Senaryo
Örneğin, bir şirketin iki farklı yazılım geliştirme ekibi olabilir. Biri depoları yönetmek için yazılım yazarken, diğer ekip satış ve pazarlamayı yönetmek için yazılım geliştiriyor. Her geliştirme ekibinin, diğerlerinin farkında olmadan kendi veritabanı vardır.
Ancak BT operasyonları ekibi, her iki veritabanını da tek bir bilgisayar kutusunda (Linux, Mac, her neyse) çalıştırmaya karar verdi. Yani o kutuya Postgres kurdular. Yani bir veritabanı sunucusu (veritabanı kümesi). Bu kümede, her geliştirme ekibi için bir katalog olmak üzere iki katalog oluştururlar: biri 'depo' ve diğeri 'satış' adlı.
Her geliştirme ekibi, farklı amaçlara ve erişim rollerine sahip çok sayıda tablo kullanır. Böylece her geliştirici ekip, tablolarını şemalar halinde düzenler. Tesadüfen, her iki geliştirme ekibi de muhasebe verilerinin bir miktar takibini yapar, böylece her takımın 'muhasebe' adlı bir şeması olur. Aynı şema adını kullanmak bir sorun değildir, çünkü katalogların her birinin kendi ad alanı vardır, dolayısıyla çakışma olmaz.
Ayrıca, her takım sonunda muhasebe amaçları için 'defter' adlı bir tablo oluşturur. Yine, isim çakışması yok.
Bu örneği bir hiyerarşi olarak düşünebilirsiniz ...
- Bilgisayar (donanım kutusu veya sanallaştırılmış sunucu)
Postgres 9.2
küme (kurulum)
warehouse
katalog (veritabanı)
inventory
şema
accounting
şema
ledger
masa
- [… Diğer bazı tablolar]
sales
katalog (veritabanı)
selling
şema
accounting
şema (yukarıdakiyle tesadüfen aynı ad)
ledger
tablo (tesadüfen yukarıdaki ile aynı isim)
- [… Diğer bazı tablolar]
Postgres 9.3
küme
- [… Diğer şemalar ve tablolar]
Her geliştirme ekibinin yazılımı kümeye bağlantı kurar. Bunu yaparken, hangi kataloğun (veritabanı) kendilerine ait olduğunu belirtmeleri gerekir. Postgres, bir kataloğa bağlanmanızı gerektirir, ancak bu katalogla sınırlı değilsiniz. Bu ilk katalog yalnızca bir varsayılandır ve SQL ifadeleriniz bir kataloğun adını atladığında kullanılır.
Dolayısıyla, geliştirici ekibin diğer ekibin tablolarına erişmesi gerekirse , veritabanı yöneticisi onlara bunu yapma yetkisi verdiyse bunu yapabilir. Erişim, desende açık adlandırma ile yapılır: catalog.schema.table . Dolayısıyla, 'depo' ekibinin diğer takımın ('satış' ekibi) defterini görmesi gerekiyorsa, SQL ifadelerini ile yazarlar sales.accounting.ledger
. Kendi defterlerine erişmek için sadece yazarlar accounting.ledger
. Onlar kaynak kodunun aynı parça hem defterleri erişmek, bunlar, kendi (opsiyonel) katalog adını ekleyerek karışıklığı önlemek seçebilir warehouse.accounting.ledger
karşı sales.accounting.ledger
.
Bu arada…
Daha genel anlamda, yani belirli bir veritabanının tablo yapısının tüm tasarımında kullanılan şema kelimesini duyabilirsiniz . Buna karşılık, SQL Standardında kelime özellikle Cluster > Catalog > Schema > Table
hiyerarşideki belirli katman anlamına gelir .
Postgres , CREATE DATABASE komutu gibi çeşitli yerlerde hem kelime veritabanını hem de kataloğu kullanır .
Tüm veritabanı sistemleri bu tam hiyerarşiyi sağlamaz Cluster > Catalog > Schema > Table
. Bazılarının yalnızca tek bir kataloğu (veritabanı) vardır. Bazılarının şeması yoktur, sadece bir tablo grubu vardır. Postgres, olağanüstü güçlü bir üründür.
...Catalog > Schema...
, birisi bana pgAdmin'deki (PostgreSQL UI) "Katalog" ve "Şema" düğümlerinin, Catalog'un alt düğümü olarak Schema düğümü yerine neden kardeş düğümler olduğunu söyleyebilir mi?