Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Giới thiệu về Từ đồng nghĩa trong SQL Server

Từ đồng nghĩa trong SQL Server là các đối tượng cơ sở dữ liệu cung cấp tên thay thế cho các đối tượng cơ sở dữ liệu hiện có tại địa phương hoặc trên máy chủ từ xa. Ngoài ra, chúng cung cấp một lớp trừu tượng để bảo vệ ứng dụng khỏi bất kỳ thay đổi nào trong đối tượng cơ sở.

Trong các tập lệnh T-SQL, chúng tôi sử dụng tên 3 phần để tham chiếu đến các đối tượng cơ sở dữ liệu. Định dạng là:

[Cơ sở dữ liệu]. [Lược đồ]. [Đối tượng]

Ví dụ:giả sử chúng ta có cơ sở hạ tầng cơ sở dữ liệu sau:

  • Tên cơ sở dữ liệu:[Azuredemodatabase]
  • Lược đồ:[SalesLT]
  • Đối tượng (tên bảng):Sản phẩm

Câu lệnh SELECT với tên gồm 3 phần như sau:

SELECT  [ProductID]
      ,[Name]
      ,[ProductNumber]
      ,[Color]
      ,[StandardCost]
      ,[ListPrice]
      ,[Size]
      ,[Weight]
      ,[ProductCategoryID]
      ,[ProductModelID]
      ,[SellStartDate]
      ,[SellEndDate]
      ,[DiscontinuedDate]
      ,[ThumbNailPhoto]
      ,[ThumbnailPhotoFileName]
      ,[rowguid]
      ,[ModifiedDate]
  FROM [Azuredemodatabase].[SalesLT].[Product]

Tương tự, một máy chủ từ xa sử dụng quy ước đặt tên gồm 4 phần. Phần bổ sung là [tên máy chủ từ xa]. Do đó, định dạng sẽ là

[Tên máy chủ]. [Cơ sở dữ liệu]. [Lược đồ]. [Đối tượng].

Hãy tưởng tượng rằng bạn cần đổi tên [SalesLT]. [Sản phẩm] bảng thành [ProductData] .

Bảng này được tham chiếu trong nhiều thủ tục, hàm và dạng xem được lưu trữ. Do đó, bạn cần sửa đổi tất cả các tham chiếu như vậy trong các truy vấn hoặc ứng dụng khách để sử dụng tên mới nhất của bảng.

Bạn có thể tạo một Từ đồng nghĩa tham chiếu đến đối tượng cơ sở dữ liệu và sử dụng nó trong các truy vấn SQL của mình. Nếu có bất kỳ thay đổi nào xảy ra, bạn chỉ cần tạo lại định nghĩa Từ đồng nghĩa. Bạn sẽ không cần thay đổi bất kỳ tham chiếu đối tượng nào trong các truy vấn vì chúng tôi đang sử dụng Từ đồng nghĩa.

Trong một trường hợp khác, chúng tôi tạo một từ đồng nghĩa trỏ đến bảng [Azuredemodatabase]. [SalesLT]. [Sản phẩm]. Sau đó, chúng ta thả bảng và tạo một dạng xem có tên tương tự. Trong trường hợp này, một Từ đồng nghĩa sẽ tự động tham chiếu chế độ xem vì liên kết đối tượng xảy ra với tên đối tượng.

Nếu bạn di chuyển một đối tượng sang cơ sở dữ liệu khác, Từ đồng nghĩa sẽ giúp bạn giảm thiểu nỗ lực khi thực hiện thay đổi. Khi bạn tạo lại Từ đồng nghĩa, tất cả các truy vấn SQL sẽ tự động nhận được vị trí đối tượng mới nhất.

Bạn cũng có thể sử dụng Từ đồng nghĩa để ẩn tên của các đối tượng cơ sở dữ liệu. Người dùng có thể truy vấn Từ đồng nghĩa để truy xuất kết quả thay vì truy vấn bảng cơ sở.

Bạn có thể xác định một Từ đồng nghĩa trong SQL Server cho các đối tượng sau:

  • Bảng do người dùng xác định
  • Quy trình đã lưu trữ
  • Xem
  • Các hàm có giá trị trong bảng vô hướng và nội tuyến
  • Bảng tạm thời cục bộ và toàn cầu
  • Thủ tục, hàm được lưu trữ CLR (giá trị bảng, tổng hợp, vô hướng)

Lưu ý:Tên từ đồng nghĩa phải là duy nhất trong cơ sở dữ liệu.

Nơi sử dụng từ đồng nghĩa trong SQL Server

Chúng ta có thể sử dụng Từ đồng nghĩa trong câu lệnh T-SQL, chẳng hạn như Chọn, Cập nhật, Thực thi, Chèn, Xóa và truy vấn phụ.

Tuy nhiên, chúng tôi không thể sử dụng Từ đồng nghĩa trong các câu lệnh của ngôn ngữ định nghĩa dữ liệu (DDL) như Tạo và Thay thế. Ngoài ra, Từ đồng nghĩa không phù hợp với Kiểm tra ràng buộc, cột được tính, biểu thức mặc định, Biểu thức quy tắc, dạng xem liên kết giản đồ và các hàm.

Tạo từ đồng nghĩa trong SQL Server trong Máy chủ cục bộ

Để tạo Từ đồng nghĩa trong SQL Server, chúng tôi sử dụng câu lệnh CREATE SYNONYM. Cú pháp như sau:

CREATE SYNONYM <synonym_name, sysname, sample_synonym>
  FOR <schema_name, sysname, Production>.<object_name, sysname, Product>
GO

Ví dụ:hãy tạo từ đồng nghĩa [MyProductCatalog] cho [Azuredemodatabase]. [SalesLT]. [Sản phẩm] .

CREATE SYNONYM MyProductCatalog FOR [Azuredemodatabase].[SalesLT].[Product]

Khi nó được tạo, bạn có thể thay thế tên bảng bằng Từ đồng nghĩa như hình dưới đây. Nó tham chiếu nội bộ bảng cơ sở mà chúng tôi đã tham chiếu trong câu lệnh CREATE SYNONYM.

SELECT  [ProductID]
      ,[Name]
      ,[ProductNumber]
      ,[Color]
      ,[StandardCost]
      ,[ListPrice]
      ,[Size]
      ,[Weight]
      ,[ProductCategoryID]
      ,[ProductModelID]
      ,[SellStartDate]
      ,[SellEndDate]
      ,[DiscontinuedDate]
      ,[ThumbNailPhoto]
      ,[ThumbnailPhotoFileName]
      ,[rowguid]
      ,[ModifiedDate]
  FROM MyProductCatalog

Tạo từ đồng nghĩa trong cơ sở dữ liệu trên máy chủ từ xa

Giả sử đối tượng tồn tại trong một máy chủ từ xa [ABC]. Bạn có thể tạo Từ đồng nghĩa để tránh chỉ định tên gồm 4 phần trong các truy vấn. Trong truy vấn dưới đây, đối tượng cơ sở nằm trong [MyRemoteServer]:

EXEC sp_addlinkedserver MyRemoteServer;
GO  
USE tempdb;  
GO  
CREATE SYNONYM MyProductCatalog FOR MyRemoteServer.[Azuredemodatabase].[SalesLT].[Product]
GO

Tạo từ đồng nghĩa với SQL Server Management Studio

Để tạo Từ đồng nghĩa, chúng ta có thể sử dụng GUI của SQL Server Management Studio.

  • Kết nối với phiên bản SQL của bạn, mở rộng cơ sở dữ liệu và điều hướng đến thư mục Từ đồng nghĩa.
  • Nhấp chuột phải vào nó và chọn Từ đồng nghĩa mới.
  • Nhập các chi tiết bắt buộc cho Tên từ đồng nghĩa, Lược đồ từ đồng nghĩa, Tên cơ sở dữ liệu, Lược đồ đối tượng, Loại đối tượng và tên.

Trong ví dụ của chúng tôi, chúng tôi tạo một Từ đồng nghĩa trong lược đồ [HumanResources], giống như của lược đồ bảng:

Nhấp vào Script để có được một tập lệnh T-SQL tương đương như bên dưới:

USE [AdventureWorks2017]
GO
CREATE SYNONYM [HumanResources].[MyEmpData] FOR 
[AdventureWorks2017].[HumanResources].[Employee]
GO

Từ đồng nghĩa với các hàm do người dùng định nghĩa

Đầu tiên, tạo UDF dbo.TestSynonym bằng cách sử dụng tập lệnh dưới đây:

CREATE FUNCTION dbo.TestSynonyn (@ID int)  
RETURNS int  
AS  
BEGIN  
IF @ID < 0  
BEGIN  
    SET @ID=100
END  
RETURN(@ID);  
END;  
GO

Sau đó, tạo một từ đồng nghĩa cho nó với tên dbo.UDFTest . Bạn có thể gọi UDF bằng cách sử dụng Từ đồng nghĩa và truy xuất kết quả truy vấn:

CREATE SYNONYM dbo.UDFTest FOR dbo.TestSynonyn;  
GO  
Declare @ID INT=-10
Select @ID as OrigninalValue, dbo.UDFTest(@ID) as modifiedValue

Cập nhật tuyên bố và từ đồng nghĩa

Giả sử bạn muốn cập nhật một giá trị trong bảng SQL. Nếu bạn đã xác định một Từ đồng nghĩa trên nó, bạn cũng có thể sử dụng nó. Ví dụ:câu lệnh cập nhật bên dưới sử dụng Từ đồng nghĩa [Perofmancetest] thay cho tên bảng SQL:

Update performancetest set [Name]='Updated New value' where ID=1

Bỏ từ đồng nghĩa

Bạn có thể sử dụng câu lệnh DROP SYNONYM để đưa một từ đồng nghĩa cụ thể vào cơ sở dữ liệu. Truy vấn bên dưới giảm [ EmpData ] trong AdventureWorks2017 cơ sở dữ liệu:

Use AdventureWorks2017
Drop Synonym EmpData

Lấy danh sách từ đồng nghĩa cơ sở dữ liệu trong SQL Server

Giả sử bạn muốn biết các từ đồng nghĩa hiện có trong cơ sở dữ liệu cùng với đối tượng cơ sở của chúng. Bạn có thể truy vấn sys.synonyms chế độ xem danh mục hệ thống trong cơ sở dữ liệu tương ứng:

SELECT 
    name, 
    base_object_name, 
    type
FROM 
    sys.synonyms

Trong kết quả truy vấn, bạn nhận được thông tin sau:

  • Tên đồng nghĩa
  • Đối tượng cơ sở (tên đối tượng 3 phần hoặc 4 phần)
  • Loại đối tượng (SN =Từ đồng nghĩa)

Điều gì sẽ xảy ra nếu chúng tôi sửa đổi Đối tượng Cơ sở của Từ đồng nghĩa?

Hãy xem xét tác động của việc sửa đổi đối tượng cơ sở của một từ đồng nghĩa. Chúng tôi có một truy vấn để thực hiện một số tác vụ:

  • Tạo một từ đồng nghĩa (Tên từ đồng nghĩa là [dbo]. [EmpData] cho Đối tượng cơ sở [AdventureWorks2017]. [DBO]. [Emp] )
  • Thả đối tượng cơ sở (bảng) [AdventureWorks2017]. [DBO]. [Emp]
  • Tạo chế độ xem với tên [DBO]. [Emp] trong cơ sở dữ liệu [AdventureWorks2017].
USE [AdventureWorks2017]
GO
CREATE SYNONYM [dbo].[EmpData] FOR [AdventureWorks2017].[DBO].[Emp]
GO
Drop table [AdventureWorks2017].[DBO].[Emp]
Go
Create view [DBO].[Emp]
as 
Select * from dbo.Employee
go

Như đã đề cập trước đó, Từ đồng nghĩa liên kết một đối tượng bằng cách sử dụng tên của nó. Vì vậy, nó nên chỉ ra khung nhìn thay vì bảng. Trong trường hợp này, bảng [dbo]. [Emp] không tồn tại.

Như được hiển thị bên dưới, đó là chế độ xem trong [AdventureWorks2017] cơ sở dữ liệu.

Ngoài ra, bạn có thể sử dụng OBJECTPROPERTYEX () để kiểm tra loại cơ sở đối tượng của từ đồng nghĩa:

SELECT OBJECTPROPERTYEX(OBJECT_ID('Emp'), 'BaseType') AS BaseType;  
GO

Ở đây, kiểu cơ sở tham chiếu đến dạng xem cơ sở dữ liệu. Trong trường hợp của bảng SQL, bạn nhận được U trong đầu ra.

Từ đồng nghĩa có tác động tiêu cực đến hiệu suất truy vấn không?

Nhiều chuyên gia cơ sở dữ liệu không thích sử dụng các từ đồng nghĩa trong SQL Server. Quan điểm của họ là SQL Server phải thực hiện một bước bổ sung trong việc giải quyết bảng cơ sở từ Từ đồng nghĩa. Do đó, nó có thể tạo ra tác động tiêu cực.

Hãy kiểm tra hiệu suất truy vấn. Chúng tôi truy xuất các bản ghi từ tên bảng và Từ đồng nghĩa:

Create table TestTable
(
    ID int,
    [Name] varchar(20)
)
Insert into TestTable values (1, 'Temporary Data')
GO 10000

Create synonym performancetest for TestTable
SET STATISTICS IO ON;
Select * from TestTable 
Go
Select * from performancetest

Trước tiên, hãy kiểm tra kế hoạch thực hiện thực tế. Cả hai lô truy vấn đều có cùng một kế hoạch thực thi và chi phí vận hành:

Tương tự, cả hai truy vấn đều có 41 lần đọc logic và một lần quét để truy xuất đầu ra mong muốn.

SQL Server giải quyết các tên đối tượng cơ sở đồng nghĩa trong giai đoạn liên kết thực thi truy vấn. Điều này xảy ra trước giai đoạn tối ưu hóa truy vấn. Do đó, bạn thấy một kế hoạch thực hiện tương tự và không có tác động đến hiệu suất. Do đó, bạn có thể sử dụng các từ đồng nghĩa để tránh các tên dài 3 phần hoặc 4 phần cho các đối tượng được truy cập thường xuyên. Nó không ảnh hưởng đến hiệu suất truy vấn.

Nó không có nghĩa là bạn tạo một Từ đồng nghĩa cho mỗi đối tượng như bảng, thủ tục được lưu trữ, hàm, dạng xem. Bạn có thể sử dụng chúng cho các đối tượng được truy cập thường xuyên nhất để tham khảo nhanh chúng trong các truy vấn.

Kết luận

Các từ đồng nghĩa trong SQL Server có thể có lợi. Họ đơn giản hóa tên đối tượng cơ sở dữ liệu bằng cách tránh các tên dài 3 phần hoặc 4 phần. Bạn có thể sử dụng chúng để tham chiếu đến cả các đối tượng cục bộ và từ xa. Nó không tạo ra bất kỳ vấn đề hiệu suất nào. Do đó, bạn có thể khám phá cách sử dụng chúng để linh hoạt trong việc viết các truy vấn. Tuy nhiên, tốt nhất là chỉ định nghĩa các từ đồng nghĩa cho các đối tượng thường được sử dụng trong các tập lệnh SQL.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để chèn nhiều bản ghi và nhận giá trị nhận dạng?

  2. Cách thêm nhóm tệp vào cơ sở dữ liệu máy chủ SQL (T-SQL)

  3. Số liệu hiệu suất máy chủ SQL để dẫn đầu trò chơi

  4. Tìm kiếm phụ huynh cấp cao nhất trong SQL

  5. tên đối tượng không hợp lệ của máy chủ sql - nhưng các bảng được liệt kê trong danh sách bảng SSMS