Sự khác biệt giữa một danh mục và một lược đồ trong cơ sở dữ liệu quan hệ là gì?


95

Tôi từng nghĩ rằng lược đồ là đối tượng "trình bao bọc trên" trước chính cơ sở dữ liệu. Ý tôi là DB.schema.<what_ever_object_name_under_schema>.

Vâng, "trình bao bọc" danh mục bây giờ khá khó hiểu. Tại sao chúng ta cần một danh mục? Mục đích chính xác là catalog nên được sử dụng là gì?

Câu trả lời:


73

Theo quan điểm quan hệ:

Danh mục là nơi - trong số những thứ khác - tất cả các lược đồ khác nhau (bên ngoài, khái niệm, bên trong) và tất cả các ánh xạ tương ứng (bên ngoài / khái niệm, khái niệm / bên trong) được lưu giữ.

Nói cách khác, danh mục chứa thông tin chi tiết (đôi khi được gọi là thông tin mô tả hoặc siêu dữ liệu ) liên quan đến các đối tượng khác nhau mà hệ thống quan tâm.

Ví dụ: trình tối ưu hóa sử dụng thông tin danh mục về chỉ mục và cấu trúc lưu trữ vật lý khác, cũng như nhiều thông tin khác, để giúp nó quyết định cách thực hiện các yêu cầu của người dùng. Tương tự như vậy, hệ thống con bảo mật sử dụng thông tin danh mục về người dùng và các ràng buộc bảo mật để cấp hoặc từ chối các yêu cầu đó ngay từ đầu.

Giới thiệu về Hệ thống cơ sở dữ liệu, ấn bản lần thứ 7, CJ Date, tr 69-70.


Theo quan điểm tiêu chuẩn SQL:

Danh mục được đặt tên là tập hợp các lược đồ trong môi trường SQL. Môi trường SQL chứa không hoặc nhiều danh mục. Một danh mục chứa một hoặc nhiều lược đồ, nhưng luôn chứa một lược đồ có tên INFORMATION_SCHEMA chứa các dạng xem và miền của Lược đồ Thông tin.

Ngôn ngữ cơ sở dữ liệu SQL , (Văn bản sửa đổi đề xuất của DIS 9075), tr 45


Theo quan điểm SQL:

Một cuốn catalogue thường đồng nghĩa với cơ sở dữ liệu . Trong hầu hết các dbms SQL, nếu bạn truy vấn các dạng xem information_schema, bạn sẽ thấy rằng các giá trị trong cột "table_catalog" ánh xạ đến tên của cơ sở dữ liệu.

Nếu bạn thấy nền tảng của mình sử dụng danh mục theo cách rộng hơn bất kỳ định nghĩa nào trong ba định nghĩa này, thì nó có thể đề cập đến một cái gì đó rộng hơn cơ sở dữ liệu - cụm cơ sở dữ liệu, máy chủ hoặc cụm máy chủ. Nhưng tôi nghi ngờ điều đó, vì bạn đã dễ dàng tìm thấy điều đó trong tài liệu nền tảng của mình.


175

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.

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.).

Sơ đồ hiển thị các hộp lồng nhau biểu thị cách kết nối trên một cổng đưa bạn đến cụm (máy chủ cơ sở dữ liệu) chứa một hoặc nhiều Danh mục (cơ sở dữ liệu), mỗi hộp chứa một hoặc nhiều Lược đồ (một không gian tên) mỗi trong số đó chứa các bảng mà mỗi trong số đó có hàng.

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 5432chỉ 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 đồ
          • [… một vài cái bàn]
        • 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 đồ
          • [… một vài cái bàn]
        • 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
      • [… Lược đồ và bảng khác]

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.ledgerso 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 > Tablehệ 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ẽ.


8
Nếu có ...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?
The Red Pea,

6
Nút "Lược đồ" đó là của bạn, nhưng nút "Danh mục" thì không. Các "Catalogs" nút có chính xác hai mục: (1) PostgreSQL (pg_catalog), các danh mục hệ thống, hàng chục bảng "pg_" lưu trữ các định nghĩa siêu dữ liệu của cơ sở dữ liệu của bạn, chẳng hạn như pg_index, pg_trigger, và pg_constraint. (2) ANSI (information_schema), dạng xem chỉ đọc của danh mục hệ thống tương tự được xác định bởi tiêu chuẩn SQL như information_schema. Tên tốt hơn cho nút "Danh mục" trong pgAdmin có thể là "Hệ thống" hoặc "Bảng hệ thống".
Basil Bourque

Cảm ơn. "Không phải tất cả hệ thống cơ sở dữ liệu đều cung cấp đầy đủ hệ thống phân cấp Cluster> Catalog> Schema> Table này." Tôi tự hỏi nó như thế nào đối với mysql và SQL Server?
Tim

+1. Có phải tất cả các bảng trong một lược đồ đều có cùng một lược đồ quan hệ (tức là cùng một tập thuộc tính và / hoặc cùng một tập các ràng buộc)? Bạn cũng có thể xem câu hỏi của tôi stackoverflow.com/questions/48232448/… ? Cảm ơn.
Tim

1
@Tim Một lược đồ chỉ là một không gian tên phân tách các nhóm bảng, giống như các thư mục là một không gian tên tổ chức các tệp trong một hệ thống tệp (ngoại trừ không có lồng ghép các lược đồ). Các bảng lưu trữ dữ liệu ứng dụng của bạn dưới dạng thuộc tính / cột theo hàng.
Basil Bourque
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.