MySQL 'tạo lược đồ' và 'tạo cơ sở dữ liệu' - Có sự khác biệt nào không


104

Đi sâu vào information_schemacơ sở dữ liệu và đạt cực đại siêu dữ liệu cho một trong những dự án thú cưng của mình, tôi đang gặp khó khăn khi hiểu sự khác biệt (nếu có) giữa create schemalệnh và create databaselệnh cho MySQL.

Có sự khác biệt nào không? Nếu không, đây có phải là một mẫu hành vi khá điển hình cho cơ sở dữ liệu quan hệ (tôi đã nghe nói rằng đối với các cơ sở dữ liệu khác, chẳng hạn như Oracle, một lược đồ tồn tại trong cơ sở dữ liệu, thay vì ở cùng cấp với cơ sở dữ liệu).

Cảm ơn!

Câu trả lời:


140

Các tài liệu của MySQL nói :

TẠO CƠ SỞ DỮ LIỆU tạo một cơ sở dữ liệu với tên đã cho. Để sử dụng câu lệnh này, bạn cần có đặc quyền CREATE cho cơ sở dữ liệu. CREATE SCHEMA là một từ đồng nghĩa với CREATE DATABASE kể từ MySQL 5.0.2.

Vì vậy, có vẻ bình thường nếu hai lệnh đó làm giống nhau.


1
Thông minh! Tôi đã giả định rằng lược đồ là một phần của phiên bản Cơ sở dữ liệu. Cảm ơn rất nhiều!!
asgs

27

Tài liệu Mysql cho biết: CREATE SCHEMA là từ đồng nghĩa với CREATE DATABASE kể từ MySQL 5.0.2.


tất cả điều này quay trở lại tiêu chuẩn ANSI cho SQL vào giữa những năm 80.

Chuẩn đó có lệnh "CREATE SCHEMA" và nó dùng để giới thiệu nhiều không gian tên cho tên bảng và dạng xem. Tất cả các bảng và dạng xem đã được tạo trong một "lược đồ". Tôi không biết liệu phiên bản đó có xác định một số truy cập lược đồ chéo vào bảng và chế độ xem hay không, nhưng tôi cho rằng nó đã làm. AFAIR, không có sản phẩm nào (ít nhất là vào thời điểm đó) thực sự thực hiện nó, toàn bộ khái niệm đó chỉ mang tính lý thuyết hơn là thực hành.

OTOH, ISTR phiên bản này của tiêu chuẩn không có khái niệm về "người dùng" hoặc lệnh "TẠO NGƯỜI DÙNG", vì vậy có những sản phẩm sử dụng khái niệm "người dùng" (người sau đó có không gian tên riêng cho các bảng và các khung nhìn) để triển khai tương đương với "lược đồ" của chúng.

Đây là một lĩnh vực mà các hệ thống khác nhau.

Về mặt quản trị, điều này không nên quá quan trọng, vì dù sao thì ở đây bạn cũng có những khác biệt.

Theo như bạn nhìn vào mã ứng dụng, bạn "chỉ" phải quan tâm đến trường hợp một ứng dụng truy cập các bảng từ nhiều không gian tên. AFAIK, tất cả các hệ thống đều hỗ trợ cú pháp ".", Và đối với điều này, không quan trọng liệu vùng tên là của người dùng, "lược đồ" hay "cơ sở dữ liệu".


@DerMike Tôi dường như nhớ lại, internetslang.com/ISTR-meaning-definition.asp
reevesy

2
Nó sẽ là đúng để cung cấp cho một tham chiếu đến nguồn gốc, từ đó câu trả lời này đã được thực hiện: lists.mysql.com/mysql/211647
informatik01

@ Informatik01 Trừ khi Adinochestva là một áp phích gốc.
FanaticD

SQL Server thực hiện SCHEMA như một nhóm các bảng / loại / .. trong một cơ sở dữ liệu
Gudgip

7

Nói một cách chính xác, sự khác biệt giữa Cơ sở dữ liệuLược đồ là không tồn tại trong MySql.

Tuy nhiên, đây không phải là trường hợp trong các công cụ cơ sở dữ liệu khác như SQL Server. Trong máy chủ SQL :,

Mỗi bảng thuộc về một nhóm các đối tượng trong cơ sở dữ liệu được gọi là lược đồ cơ sở dữ liệu . Đó là một vùng chứa hoặc không gian tên ( Truy vấn Microsoft SQL Server 2012 )

Theo mặc định, tất cả các bảng trong SQL Server đều thuộc về một lược đồ mặc định được gọi là dbo . Khi bạn truy vấn một bảng chưa được phân bổ cho bất kỳ lược đồ cụ thể nào, bạn có thể làm như sau:

SELECT *
FROM your_table

tương đương với:

SELECT *
FROM dbo.your_table

Bây giờ, máy chủ SQL cho phép tạo các lược đồ khác nhau, cho phép bạn nhóm các bảng có cùng mục đích. Điều đó giúp tổ chức cơ sở dữ liệu.

Ví dụ, bạn có thể tạo một lược đồ gọi là bán hàng , với các bảng như hoá đơn , creditorders (và bất kỳ khác có liên quan với doanh số), và một schema gọi là tra cứu , với các bảng như nước , tiền tệ , subscriptiontypes (và bất kỳ bảng khác sử dụng như nhìn lên bảng).

Các bảng được phân bổ cho một miền cụ thể được hiển thị trong SQL Server Studio Manager với tên lược đồ được thêm vào trước tên bảng (giống hệt như các bảng thuộc về lược đồ dbo mặc định ).

Có các lược đồ đặc biệt trong SQL Server. Để trích dẫn cùng một cuốn sách:

Có một số lược đồ cơ sở dữ liệu được tích hợp sẵn và chúng không thể bị loại bỏ hoặc thay đổi:

1) dbo , lược đồ mặc định.

2) khách chứa các đối tượng có sẵn cho người dùng khách ("người dùng khách" là một vai trò đặc biệt trong biệt ngữ SQL Server, với một số quyền mặc định và bị hạn chế cao). Hiếm khi được sử dụng.

3) INFORMATION_SCHEMA , được sử dụng bởi Chế độ xem giản đồ thông tin

4) hệ thống , dành riêng cho SQL Server sử dụng nội bộ

Các lược đồ không chỉ để phân nhóm. Thực sự có thể cấp các quyền khác nhau cho mỗi lược đồ cho những người dùng khác nhau, như MSDN đã mô tả .

Làm theo cách này, tra cứu lược đồ được đề cập ở trên có thể được cung cấp cho bất kỳ người dùng tiêu chuẩn nào trong cơ sở dữ liệu (ví dụ: SELECTchỉ quyền), trong khi một bảng có tên là nhà cung cấpbankaccountdetails có thể được phân bổ trong một lược đồ khác được gọi là tài chính và chỉ cấp quyền truy cập cho người dùng trong nhóm accounts(chỉ là một ví dụ, bạn sẽ có được ý tưởng).

Cuối cùng, và trích dẫn lại cùng một cuốn sách:

Nó không giống với Lược đồ cơ sở dữ liệuLược đồ bảng . Cái trước là không gian tên của một bảng, trong khi cái sau đề cập đến định nghĩa bảng



5

Cơ sở dữ liệu là một tập hợp các lược đồ và lược đồ là một tập hợp các bảng. Nhưng trong MySQL họ sử dụng nó theo cùng một cách.


1

Vì vậy, không có sự khác biệt giữa "cơ sở dữ liệu" MySQL và "lược đồ" MySQL: đây là hai tên cho cùng một thứ - một không gian tên cho các bảng và các đối tượng DB khác.

Đối với những người có nền tảng Oracle: MySQL "cơ sở dữ liệu" hay còn gọi là "lược đồ" MySQL tương ứng với lược đồ Oracle. Sự khác biệt giữa các lệnh CREATE SCHEMA của MySQL và Oracle là trong Oracle, lệnh CREATE SCHEMA không thực sự tạo một lược đồ mà là điền nó bằng các bảng và dạng xem. Và lệnh CREATE DATABASE của Oracle thực hiện một điều rất khác so với đối tác MySQL của nó.

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.