Mike Sherrill 'Cat Recall' memberikan jawaban yang sangat bagus . Saya akan menambahkan satu contoh: Postgres .
Cluster = Instalasi Postgres
Saat Anda menginstal Postgres di komputer, penginstalan itu disebut cluster . 'Cluster' di sini tidak dimaksudkan dalam pengertian perangkat keras dari beberapa komputer yang bekerja bersama. Di Postgres, cluster mengacu pada fakta bahwa Anda dapat memiliki beberapa database yang tidak terkait semuanya dan berjalan menggunakan mesin server Postgres yang sama.
Cluster kata juga didefinisikan oleh SQL Standard dengan cara yang sama seperti di Postgres. Mengikuti Standar SQL adalah tujuan utama dari proyek Postgres.
Spesifikasi SQL-92 mengatakan:
Sebuah cluster adalah kumpulan katalog yang ditentukan oleh implementasi.
dan
Tepat satu cluster yang terkait dengan sesi SQL
Itu cara tumpul untuk mengatakan cluster adalah server database (setiap katalog adalah database).
Cluster> Katalog> Skema> Tabel> Kolom & Baris
Jadi di Postgres dan Standar SQL kami memiliki hierarki penahanan ini:
- Komputer mungkin memiliki satu cluster atau beberapa.
- Server database adalah cluster .
- Sebuah cluster memiliki katalog . (Katalog = Database)
- Katalog memiliki skema . (Skema = namespace tabel, dan batas keamanan)
- Skema memiliki tabel .
- Tabel memiliki baris .
- Baris memiliki nilai , ditentukan oleh kolom .
Nilai-nilai tersebut adalah data bisnis yang penting bagi aplikasi dan pengguna Anda seperti nama orang, tanggal jatuh tempo faktur, harga produk, skor tinggi pemain. Kolom menentukan tipe data dari nilai (teks, tanggal, angka, dan sebagainya).
Beberapa Cluster
Diagram ini mewakili satu cluster. Dalam kasus Postgres, Anda dapat memiliki lebih dari satu cluster per komputer host (atau OS virtual). Beberapa cluster biasanya dilakukan, untuk menguji dan menerapkan versi baru Postgres (mis .: 9.0 , 9.1 , 9.2 , 9.3 , 9.4 , 9.5 ).
Jika Anda memang memiliki beberapa cluster, bayangkan diagram di atas digandakan.
Nomor port yang berbeda memungkinkan beberapa cluster untuk hidup berdampingan semuanya dan berjalan pada waktu yang sama. Setiap cluster akan diberi nomor portnya sendiri. Biasanya 5432
hanya default, dan dapat diatur oleh Anda. Setiap cluster mendengarkan pada port yang ditetapkan sendiri untuk koneksi database yang masuk.
Contoh Skenario
Misalnya, sebuah perusahaan dapat memiliki dua tim pengembangan perangkat lunak yang berbeda. Satu orang menulis perangkat lunak untuk mengelola gudang sementara tim lainnya membuat perangkat lunak untuk mengelola penjualan dan pemasaran. Setiap tim pengembang memiliki database mereka sendiri, tanpa menyadari yang lain.
Tetapi tim operasi TI mengambil keputusan untuk menjalankan kedua database di satu kotak komputer (Linux, Mac, apa pun). Jadi di kotak itu mereka memasang Postgres. Jadi satu database server (database cluster). Dalam cluster tersebut, mereka membuat dua katalog, satu katalog untuk setiap tim pengembang: satu bernama 'gudang' dan satu bernama 'penjualan'.
Setiap tim pengembang menggunakan banyak tabel dengan tujuan dan peran akses berbeda. Jadi setiap tim pengembang mengatur tabel mereka ke dalam skema. Secara kebetulan, kedua tim pengembang melakukan pelacakan data akuntansi, sehingga setiap tim memiliki skema bernama 'akuntansi'. Menggunakan nama skema yang sama tidak menjadi masalah karena katalog masing-masing memiliki namespace sendiri sehingga tidak ada benturan.
Selanjutnya, masing-masing tim akhirnya membuat tabel untuk keperluan akuntansi bernama 'ledger'. Sekali lagi, tidak ada tabrakan penamaan.
Anda dapat menganggap contoh ini sebagai hierarki…
- Komputer (kotak perangkat keras atau server virtual)
Postgres 9.2
cluster (instalasi)
warehouse
katalog (database)
inventory
skema
accounting
skema
ledger
meja
- [… Beberapa tabel lainnya]
sales
katalog (database)
selling
skema
accounting
skema (kebetulan nama yang sama seperti di atas)
ledger
tabel (nama yang sama kebetulan seperti di atas)
- [… Beberapa tabel lainnya]
Postgres 9.3
gugus
Setiap perangkat lunak tim pengembang membuat koneksi ke kluster. Saat melakukannya, mereka harus menentukan katalog (database) mana yang menjadi milik mereka. Postgres mengharuskan Anda terhubung ke satu katalog, tetapi Anda tidak terbatas pada katalog itu. Katalog awal tersebut hanyalah default, digunakan saat pernyataan SQL Anda menghilangkan nama katalog.
Jadi jika tim pengembang perlu mengakses tabel tim lain, mereka dapat melakukannya jika administrator database telah memberi mereka hak istimewa untuk melakukannya. Akses dibuat dengan penamaan eksplisit dalam pola: catalog.schema.table . Jadi jika tim 'gudang' perlu melihat buku besar tim lain (tim 'penjualan'), mereka menulis pernyataan SQL dengan sales.accounting.ledger
. Untuk mengakses buku besar mereka sendiri, mereka hanya menulis accounting.ledger
. Jika mereka mengakses kedua buku besar dalam bagian kode sumber yang sama, mereka dapat memilih untuk menghindari kebingungan dengan memasukkan nama katalog (opsional) mereka sendiri, warehouse.accounting.ledger
versus sales.accounting.ledger
.
Ngomong-ngomong…
Anda mungkin mendengar kata skema yang digunakan dalam pengertian yang lebih umum, yang berarti keseluruhan desain struktur tabel database tertentu. Sebaliknya, dalam Standar SQL, kata tersebut secara khusus berarti lapisan tertentu dalam Cluster > Catalog > Schema > Table
hierarki.
Postgres menggunakan database kata dan juga katalog di berbagai tempat seperti perintah CREATE DATABASE .
Tidak semua sistem database menyediakan hierarki penuh ini Cluster > Catalog > Schema > Table
. Beberapa hanya memiliki satu katalog (database). Beberapa tidak memiliki skema, hanya satu set tabel. Postgres adalah produk yang sangat kuat.
...Catalog > Schema...
, dapatkah seseorang memberi tahu saya mengapa node "Katalog" dan "Skema" di pgAdmin (PostgreSQL UI) adalah node saudara, bukan node Skema sebagai node turunan Katalog?PostgreSQL (pg_catalog)
, sistem katalog, puluhan meja "pg_" yang menyimpan definisi metadata dari database Anda, sepertipg_index
,pg_trigger
, danpg_constraint
. (2)ANSI (information_schema)
, tampilan hanya-baca dari katalog sistem yang sama yang ditentukan oleh standar SQL sebagaiinformation_schema
. Nama yang lebih baik untuk node "Katalog" di pgAdmin mungkin adalah "Sistem" atau "Tabel Sistem".