Bài viết này sẽ giải thích lược đồ cơ sở dữ liệu là gì, ưu điểm của chúng cũng như cách tạo và sử dụng lược đồ trong SQL Server.
Trong hệ quản trị cơ sở dữ liệu quan hệ như SQL Server, cơ sở dữ liệu chứa nhiều đối tượng khác nhau. Đây có thể là các bảng, các thủ tục được lưu trữ, các khung nhìn và các hàm. Trong cơ sở dữ liệu, lược đồ đề cập đến tập hợp logic của các đối tượng cơ sở dữ liệu. Bạn có thể sử dụng lược đồ để tách các đối tượng tùy thuộc vào ứng dụng, quyền truy cập và bảo mật.
Lược đồ SQL Server
SQL Server cung cấp các lược đồ logic tích hợp sau:
- dbo
- sys
- khách
- INFORMATION_SCHEMA
Mỗi lược đồ SQL Server phải có người dùng cơ sở dữ liệu làm chủ sở hữu lược đồ. Chủ sở hữu giản đồ có toàn quyền kiểm soát giản đồ. Bạn cũng có thể thay đổi chủ sở hữu giản đồ hoặc di chuyển các đối tượng từ giản đồ này sang giản đồ khác.
Các lược đồ SQL Server cung cấp các lợi ích sau:
- Cung cấp khả năng kiểm soát và linh hoạt hơn để quản lý các đối tượng cơ sở dữ liệu trong các nhóm logic
- Cho phép bạn di chuyển các đối tượng giữa các lược đồ khác nhau một cách nhanh chóng
- Cho phép bạn quản lý bảo mật đối tượng ở cấp giản đồ
- Cho phép người dùng quản lý các nhóm đối tượng logic trong cơ sở dữ liệu
- Cho phép người dùng chuyển quyền sở hữu giữa các lược đồ khác nhau
Giả sử đối với cơ sở dữ liệu của tổ chức bạn, bạn muốn nhóm các đối tượng dựa trên các phòng ban. Ví dụ:các bảng và thủ tục được lưu trữ cho bộ phận nhân sự phải được nhóm một cách hợp lý trong lược đồ [HR]. Tương tự, các bảng của bộ phận tài chính phải nằm trong lược đồ [Fin]. Mỗi lược đồ (nhóm logic) chứa các đối tượng SQL Server như bảng, thủ tục được lưu trữ, dạng xem, hàm, chỉ mục, kiểu và từ đồng nghĩa.
Lưu ý:Lược đồ là một thực thể có phạm vi cơ sở dữ liệu. Bạn có thể có cùng một lược đồ trong các cơ sở dữ liệu khác nhau của phiên bản SQL Server.
Theo mặc định, SQL Server sử dụng lược đồ [dbo] cho tất cả các đối tượng trong cơ sở dữ liệu. Chúng tôi có thể truy vấn SCHEMA_NAME () để lấy giản đồ mặc định cho người dùng được kết nối.
SELECT SCHEMA_NAME() AS defaultschema;
Liệt kê tất cả các lược đồ cơ sở dữ liệu trong cơ sở dữ liệu hiện tại
Bạn có thể lấy danh sách các lược đồ bằng truy vấn SSMS hoặc T-SQL. Để thực hiện việc này trong SSMS, bạn sẽ kết nối với phiên bản SQL, mở rộng cơ sở dữ liệu SQL và xem các lược đồ trong thư mục bảo mật.
Ngoài ra, bạn có thể sử dụng sys.schemas để nhận danh sách các lược đồ cơ sở dữ liệu và chủ sở hữu tương ứng của chúng.
SELECT s.name AS schema_name, u.name AS schema_owner FROM sys.schemas s INNER JOIN sys.sysusers u ON u.uid = s.principal_id ORDER BY s.name;
Tạo lược đồ SQL Server bằng CREATE SCHEMA
Để tạo một lược đồ SQL Server mới, chúng tôi sử dụng câu lệnh CREATE SCHEMA t-SQL. Cú pháp của nó được hiển thị bên dưới.
CREATE SCHEMA <schema_name> AUTHORIZATION <owner_name>
- Schema_name:Đây là giản đồ mà chúng tôi muốn tạo
- Ủy quyền:Đây là tên chủ sở hữu giản đồ
Tập lệnh để tạo lược đồ [HR], [Admin] và [Fin] với chủ sở hữu giản đồ [dbo] được hiển thị bên dưới.
CREATE SCHEMA HR AUTHORIZATION dbo; GO CREATE SCHEMA Admin AUTHORIZATION dbo; Go CREATE SCHEMA Fin AUTHORIZATION dbo; GO
Bạn có thể làm mới cơ sở dữ liệu và xem lược đồ mới được tạo như hình dưới đây.
Tạo bảng mới trong lược đồ
Để tạo các đối tượng như bảng, chúng ta cần chỉ định tên lược đồ mà đối tượng sẽ được tạo. Ví dụ:tập lệnh sau tạo [TableA] trong các lược đồ khác nhau [HR], [Admin] và [Fin].
CREATE TABLE HR.TableA ( ID int identity(1,1) PRIMARY KEY, [Name] varchar(100) ) CREATE TABLE [Admin].TableA ( ID int identity(1,1) PRIMARY KEY, [Name] varchar(100) ) CREATE TABLE [Fin].TableA ( ID int identity(1,1) PRIMARY KEY, [Name] varchar(100) )
Bạn có thể nối các bảng hệ thống sys.tables và sys.schema để liệt kê tên bảng với các lược đồ của chúng. Ví dụ:truy vấn dưới đây trả về [TableA] cùng với giản đồ của nó.
SELECT s.name AS SchemaName, t.name AS TableName FROM sys.tables t INNER JOIN sys.schemas s ON t.schema_id = s.schema_id WHERE t.name ='TableA'
Nếu bạn không chỉ định một lược đồ trong khi tạo đối tượng, SQL Server sẽ sử dụng lược đồ mặc định. Ví dụ:tập lệnh dưới đây tạo TableA trong lược đồ dbo.
CREATE TABLE TableA ( ID int identity(1,1) PRIMARY KEY, [Name] varchar(100) )
Lưu ý:Bạn có thể tạo một bảng có tên tương tự trong lược đồ khác của cơ sở dữ liệu.
Bạn được yêu cầu chỉ định lược đồ bảng để tìm nạp dữ liệu từ lược đồ chính xác. Ví dụ, như được hiển thị ở trên, chúng ta có [TableA] trong tất cả các lược đồ. Do đó, nếu bạn chọn các bản ghi trực tiếp mà không chỉ định lược đồ, nó sẽ tìm kiếm một đối tượng trong lược đồ DBO mặc định. Do đó, hãy luôn chỉ định tên lược đồ chẳng hạn như SELECT * FROM HR.TableA để truy xuất dữ liệu hoặc thực hiện bất kỳ hoạt động nào.
Tạo một thủ tục được lưu trữ trong một lược đồ
Tương tự, bạn có thể tạo các đối tượng như các thủ tục được lưu trữ trong các lược đồ được chỉ định. Ví dụ:tập lệnh dưới đây tạo SP trong lược đồ nhân sự.
CREATE PROCEDURE HR.GetEmpData AS BEGIN SELECT * FROM [HR].[TableA] END
Chuyển đối tượng sang một giản đồ khác
Tại một số điểm, bạn có thể nhận được yêu cầu di chuyển đối tượng đến một lược đồ cụ thể. Ví dụ:giả sử bạn đã tạo một giản đồ mới [Org] và bạn muốn [HR] của mình. [TableA] chuyển từ giản đồ [HR] sang giản đồ [Org].
Trong trường hợp này, bạn có thể sử dụng lệnh Alter SCHEMA với cú pháp sau.
ALTER SCHEMA target_schema_name TRANSFER [ entity_type :: ] securable_name;
Tập lệnh dưới đây chuyển đối tượng [HR]. [TableA] sang giản đồ [Org].
CREATE SCHEMA [ORG] GO ALTER SCHEMA ORG TRANSFER HR.TableA
Bây giờ, hãy chuyển quy trình đã lưu trữ [HR]. [GetEmpData] sang giản đồ [Org].
ALTER SCHEMA ORG TRANSFER HR.GetEmpData
Khi bạn thực thi tập lệnh, tập lệnh sẽ hiển thị thủ tục được lưu trữ trong lược đồ [Tổ chức].
Tuy nhiên, bên trong thủ tục được lưu trữ, mã vẫn tham chiếu đến lược đồ [HR]. [TableA].
Do đó, bạn không nên di chuyển các thủ tục, hàm hoặc dạng xem được lưu trữ bằng cách sử dụng hàm ALTER SCHEMA vì hàm này có thể có các tham chiếu cho các đối tượng trong định nghĩa. Thay vào đó, bạn có thể thả, tạo hoặc thay đổi quy trình như được hiển thị bên dưới.
Bỏ lược đồ
Bạn có thể thả một lược đồ vào cơ sở dữ liệu SQL Server, nhưng lược đồ không được chứa bất kỳ đối tượng nào. Ví dụ:nếu tôi cố gắng thả giản đồ [Org], nó sẽ báo lỗi rằng bạn không thể bỏ giản đồ vì đối tượng GetEmpData đang tham chiếu đến nó.
Do đó, bạn có thể chuyển đối tượng sang một lược đồ khác hoặc thả các đối tượng trước. Ví dụ:hãy để chúng tôi loại bỏ các thủ tục được lưu trữ GetEmpData và sau đó cố gắng loại bỏ lược đồ. Chúng tôi lại gặp lỗi vì chúng tôi có [TableA] trong lược đồ [Org].
Sau khi chúng tôi loại bỏ hoặc di chuyển tất cả các đối tượng trong lược đồ cơ sở dữ liệu, bạn có thể loại bỏ lược đồ.
Lưu ý:Bạn không thể thả các lược đồ hệ thống như dbo, information_schema, sys.
Ưu điểm của việc sử dụng lược đồ cơ sở dữ liệu
- Các lược đồ cơ sở dữ liệu cung cấp cho chúng tôi sự linh hoạt để tạo các nhóm đối tượng logic trong cơ sở dữ liệu. Nếu nhiều nhóm đang làm việc với cùng một cơ sở dữ liệu, chúng tôi có thể thiết kế các lược đồ khác nhau để tách riêng các đối tượng của họ.
- Lược đồ cơ sở dữ liệu giúp các chuyên gia cơ sở dữ liệu quản lý quyền truy cập, vì bạn có thể kiểm soát quyền truy cập của người dùng đối với (các) lược đồ tương ứng của họ thay vì cung cấp toàn bộ quyền truy cập vào cơ sở dữ liệu.
- Bạn có thể quản lý cơ sở dữ liệu hiệu quả hơn vì nó cho phép các đối tượng giống nhau trong nhiều lược đồ xuất hiện dưới dạng một nhóm logic khác nhau.
- Bạn có thể nhanh chóng di chuyển các đối tượng trong các lược đồ khác nhau.
- Quyền sở hữu giản đồ có thể được chỉ định với bất kỳ vai trò hoặc chính cơ sở dữ liệu nào và cũng có thể chuyển quyền sở hữu.
- Nó cung cấp một lớp bảo mật bổ sung vì bạn cần biết lược đồ đối tượng chính xác để truy vấn hoặc thao tác dữ liệu. Bạn cũng có thể kiểm soát quyền truy cập trên giản đồ và các đối tượng thuộc sở hữu của giản đồ.