Mike Sherrill 'Cat Recall' đã đưa ra một câu trả lời xuất sắc . Tôi sẽ thêm một ví dụ đơn giản: Postgres .
Cluster = Cài đặt Postgres
Khi bạn cài đặt Postgres trên một máy, cài đặt đó được gọi là một cụm . 'Cluster' ở đây không có nghĩa là phần cứng của nhiều máy tính làm việc cùng nhau. Trong Postgres, cụm đề cập đến thực tế là bạn có thể có nhiều cơ sở dữ liệu không liên quan được thiết lập và chạy bằng cùng một công cụ máy chủ Postgres.
Cụm từ cũng được xác định bởi Tiêu chuẩn SQL theo cách tương tự như trong Postgres. Bám sát Tiêu chuẩn SQL là mục tiêu chính của dự án Postgres.
Đặc tả SQL-92 cho biết:
Một cụm là một tập hợp các danh mục được xác định bằng cách triển khai.
và
Chính xác một cụm được liên kết với một phiên SQL
Đó là một cách nói ngớ ngẩn khi nói một cụm là một máy chủ cơ sở dữ liệu (mỗi danh mục là một cơ sở dữ liệu).
Cụm> Danh mục> Lược đồ> Bảng> Cột & Hàng
Vì vậy, trong cả Postgres và SQL Standard, chúng ta có cấu trúc phân cấp ngăn chặn này:
- Một máy tính có thể có một hoặc nhiều cụm.
- Máy chủ cơ sở dữ liệu là một cụm .
- Một cụm có danh mục . (Danh mục = Cơ sở dữ liệu)
- Danh mục có lược đồ . (Lược đồ = không gian tên của bảng và ranh giới bảo mật)
- Lược đồ có bảng .
- Bảng có hàng .
- Các hàng có giá trị , được xác định bởi các cột .
Những giá trị đó là dữ liệu kinh doanh mà ứng dụng của bạn và người dùng quan tâm, chẳng hạn như tên người, ngày hết hạn hóa đơn, giá sản phẩm, điểm cao của người chơi. Cột xác định kiểu dữ liệu của các giá trị (văn bản, ngày tháng, số, v.v.).
Nhiều cụm
Biểu đồ này đại diện cho một cụm duy nhất. Trong trường hợp của Postgres, bạn có thể có nhiều hơn một cụm trên mỗi máy tính chủ (hoặc hệ điều hành ảo). Nhiều cụm thường được thực hiện để thử nghiệm và triển khai các phiên bản mới của Postgres (ví dụ: 9.0 , 9.1 , 9.2 , 9.3 , 9.4 , 9.5 ).
Nếu bạn có nhiều cụm, hãy tưởng tượng sơ đồ trên được sao chép.
Các số cổng khác nhau cho phép nhiều cụm hoạt động song song và hoạt động cùng lúc. Mỗi cụm sẽ được chỉ định số cổng riêng của nó. Thông thường 5432
chỉ là mặc định và có thể được thiết lập bởi bạn. Mỗi cụm đang lắng nghe trên cổng được chỉ định của riêng nó cho các kết nối cơ sở dữ liệu đến.
Tình huống mẫu
Ví dụ, một công ty có thể có hai nhóm phát triển phần mềm khác nhau. Một người viết phần mềm để quản lý kho trong khi nhóm còn lại xây dựng phần mềm để quản lý bán hàng và tiếp thị. Mỗi nhóm phát triển có cơ sở dữ liệu riêng của họ, rất vui khi không biết về nhóm của họ.
Nhưng nhóm vận hành CNTT đã quyết định chạy cả hai cơ sở dữ liệu trên một hộp máy tính (Linux, Mac, bất cứ thứ gì). Vì vậy, trên hộp đó họ đã cài đặt Postgres. Vì vậy, một máy chủ cơ sở dữ liệu (cụm cơ sở dữ liệu). Trong cụm đó, họ tạo hai danh mục, một danh mục cho mỗi nhóm phát triển: một danh mục có tên là 'nhà kho' và một danh mục có tên 'bán hàng'.
Mỗi nhóm phát triển sử dụng hàng chục bảng với các mục đích và vai trò truy cập khác nhau. Vì vậy, mỗi nhóm phát triển tổ chức các bảng của họ thành các lược đồ. Thật trùng hợp, cả hai nhóm phát triển đều thực hiện một số theo dõi dữ liệu kế toán, vì vậy mỗi nhóm tình cờ có một lược đồ có tên 'kế toán'. Sử dụng cùng một tên lược đồ không phải là vấn đề vì mỗi danh mục đều có không gian tên riêng nên không có xung đột.
Hơn nữa, mỗi nhóm cuối cùng tạo một bảng cho mục đích kế toán có tên là 'sổ cái'. Một lần nữa, không có va chạm đặt tên.
Bạn có thể coi ví dụ này như một hệ thống phân cấp…
- Máy tính (hộp phần cứng hoặc máy chủ ảo hóa)
Postgres 9.2
cluster (cài đặt)
warehouse
danh mục (cơ sở dữ liệu)
inventory
lược đồ
accounting
lược đồ
ledger
bàn
- [… Một số bảng khác]
sales
danh mục (cơ sở dữ liệu)
selling
lược đồ
accounting
giản đồ (trùng tên như trên)
ledger
bảng (trùng tên như trên)
- [… Một số bảng khác]
Postgres 9.3
cụm
Phần mềm của mỗi nhóm phát triển tạo kết nối với cụm. Khi làm như vậy, họ phải chỉ định danh mục (cơ sở dữ liệu) nào là của họ. Postgres yêu cầu bạn kết nối với một danh mục, nhưng bạn không bị giới hạn trong danh mục đó. Danh mục ban đầu đó chỉ là một mặc định, được sử dụng khi các câu lệnh SQL của bạn bỏ qua tên của một danh mục.
Vì vậy, nếu nhóm phát triển cần truy cập vào các bảng của nhóm khác, họ có thể làm như vậy nếu quản trị viên cơ sở dữ liệu đã cho họ đặc quyền làm như vậy. Quyền truy cập được thực hiện với cách đặt tên rõ ràng trong mẫu: catalog.schema.table . Vì vậy, nếu nhóm 'kho hàng' cần xem sổ cái của nhóm khác (nhóm 'bán hàng'), họ sẽ viết các câu lệnh SQL với sales.accounting.ledger
. Để truy cập sổ cái của riêng họ, họ chỉ cần viết accounting.ledger
. Nếu họ truy cập cả hai sổ cái trong cùng một đoạn mã nguồn, họ có thể chọn cách tránh nhầm lẫn bằng cách đưa vào tên danh mục (tùy chọn) của riêng họ, warehouse.accounting.ledger
so với sales.accounting.ledger
.
Nhân tiện…
Bạn có thể nghe thấy từ lược đồ được sử dụng theo nghĩa chung hơn, có nghĩa là toàn bộ thiết kế cấu trúc bảng của cơ sở dữ liệu cụ thể. Ngược lại, trong SQL Standard, từ này có nghĩa cụ thể là lớp cụ thể trong Cluster > Catalog > Schema > Table
hệ thống phân cấp.
Postgres sử dụng cả cơ sở dữ liệu từ cũng như danh mục ở nhiều nơi khác nhau như lệnh TẠO CƠ SỞ DỮ LIỆU .
Không phải tất cả hệ thống cơ sở dữ liệu đều cung cấp hệ thống phân cấp đầy đủ này Cluster > Catalog > Schema > Table
. Một số chỉ có một danh mục duy nhất (cơ sở dữ liệu). Một số không có lược đồ, chỉ có một tập hợp các bảng. Postgres là một sản phẩm đặc biệt mạnh mẽ.
...Catalog > Schema...
, ai đó có thể cho tôi biết tại sao các nút "Danh mục" và "Lược đồ" trong pgAdmin (Giao diện người dùng PostgreSQL) là các nút anh chị em, thay vì nút Lược đồ là nút con của Danh mục không?