Sinonim (Mesin Database)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Sinonim adalah objek database yang melayani tujuan berikut:

  • Menyediakan nama alternatif untuk objek database lain, yang disebut sebagai objek dasar, yang dapat ada di server lokal atau jarak jauh.

  • Menyediakan lapisan abstraksi yang melindungi aplikasi klien dari perubahan yang dilakukan pada nama atau lokasi objek dasar.

Misalnya, pertimbangkan tabel Karyawan Adventure Works, yang terletak di server bernama Server1. Untuk mereferensikan tabel ini dari server lain, Server2, aplikasi klien harus menggunakan nama empat bagian Server1.AdventureWorks.Person.Employee. Selain itu, jika lokasi tabel berubah, misalnya, ke server lain, aplikasi klien harus dimodifikasi untuk mencerminkan perubahan tersebut.

Untuk mengatasi kedua masalah ini, Anda dapat membuat sinonim, EmpTable dalam skema khusus atau yang sudah ada, RemoteObjects, di Server2 untuk tabel Karyawan di Server1. Sekarang, aplikasi klien hanya perlu menggunakan nama dua bagian, RemoteObjects.EmpTable, untuk mereferensikan tabel Karyawan Server1. Selain itu, jika lokasi tabel Karyawan berubah, Anda harus mengubah sinonim, EmpTable, untuk menunjuk ke lokasi baru tabel Karyawan . Karena tidak ada pernyataan ALTER SYNONYM, Anda harus terlebih dahulu menghilangkan sinonim, RemoteObjects.EmpTable, lalu membuat ulang sinonim dengan nama yang sama, tetapi sekarang mengarahkan sinonim ke lokasi baru tabel Karyawan .

Sinonim milik skema, dan seperti objek lain dalam skema, nama sinonim harus unik. Anda bisa membuat sinonim untuk objek database berikut:

Prosedur tersimpan Assembly (CLR)

Fungsi skalar assembly (CLR)

Prosedur filter replikasi

Fungsi skalar SQL

Fungsi bernilai tabel sebaris SQL

Tampilan

Fungsi bernilai tabel Assembly (CLR)

Fungsi agregat Assembly (CLR)

Fungsi bernilai tabel SQL

Prosedur tersimpan SQL

Tabel* (Ditentukan pengguna)

*Termasuk tabel sementara lokal dan global

Catatan

Nama empat bagian untuk objek dasar fungsi tidak didukung.

Sinonim tidak dapat menjadi objek dasar untuk sinonim lain, dan sinonim tidak dapat mereferensikan fungsi agregat yang ditentukan pengguna.

Pengikatan antara sinonim dan objek dasarnya hanya berdasarkan nama. Semua keberadaan, jenis, dan izin yang memeriksa pada objek dasar ditangguhkan hingga durasi. Oleh karena itu, objek dasar dapat dimodifikasi, dihilangkan, atau dihilangkan dan digantikan oleh objek lain yang memiliki nama yang sama dengan objek dasar asli. Misalnya, pertimbangkan sinonim, dbo. MyContacts, yang mereferensikan tabel Person.Contact di Adventure Works. Jika tabel Kontak dihilangkan dan digantikan oleh tampilan bernama Person.Contact, MyContacts sekarang mereferensikan tampilan Person.Contact.

Referensi ke sinonim tidak terikat skema. Oleh karena itu, sinonim dapat dihilangkan kapan saja. Namun, dengan menjatuhkan sinonim, Anda berisiko meninggalkan referensi menggantung ke sinonim yang dijatuhkan. Referensi ini hanya akan ditemukan pada waktu proses.

Sinonim dan Skema

Jika Anda memiliki skema default yang tidak Anda miliki dan ingin membuat sinonim, Anda harus memenuhi syarat nama sinonim dengan nama skema yang Anda miliki. Misalnya, jika Anda memiliki skema S1, tetapi S2 adalah skema default Anda dan Anda menggunakan pernyataan CREATE SYNONYM, Anda harus mengawali nama sinonim dengan skema S1, alih-alih menamai sinonim dengan menggunakan nama satu bagian. Untuk informasi selengkapnya tentang cara membuat sinonim, lihat MEMBUAT SINONIM (Transact-SQL).

Memberikan Izin pada Sinonim

Hanya pemilik sinonim, anggota db_owner, atau anggota db_ddladmin yang dapat memberikan izin pada sinonim.

Anda dapat GRANT, DENY, dan REVOKE semua atau salah satu izin berikut pada sinonim:

CONTROL

EXECUTE

SELECT

UPDATE

DELETE

INSERT

AMBIL KEPEMILIKAN

MELIHAT DEFINISI

Menggunakan Sinonim

Anda dapat menggunakan sinonim sebagai pengganti objek dasar yang direferensikan dalam beberapa pernyataan SQL dan konteks ekspresi. Kolom berikut berisi daftar pernyataan dan konteks ekspresi ini:

SELECT

UPDATE

EXECUTE

INSERT

DELETE

Sub-pilih

Saat Anda bekerja dengan sinonim dalam konteks yang sebelumnya dinyatakan, objek dasar terpengaruh. Misalnya, jika sinonim mereferensikan objek dasar yang merupakan tabel dan Anda menyisipkan baris ke dalam sinonim, Anda benar-benar menyisipkan baris ke dalam tabel yang dirujuk.

Catatan

Anda tidak dapat mereferensikan sinonim yang terletak di server tertaut.

Anda dapat menggunakan sinonim sebagai parameter untuk fungsi OBJECT_ID; namun, fungsi mengembalikan ID objek sinonim, bukan objek dasar.

Anda tidak dapat mereferensikan sinonim dalam pernyataan DDL. Misalnya, pernyataan berikut, yang mereferensikan sinonim bernama dbo.MyProduct, menghasilkan kesalahan:

ALTER TABLE dbo.MyProduct  
   ADD NewFlag int null;  
EXEC ('ALTER TABLE dbo.MyProduct  
   ADD NewFlag int null');  

Pernyataan izin berikut hanya dikaitkan dengan sinonim dan bukan objek dasar:

GRANT

REVOKE

DENY

Sinonim tidak terikat skema dan, oleh karena itu, tidak dapat direferensikan oleh konteks ekspresi terikat skema berikut:

Batasan CHECK

Ekspresi default

Tampilan terikat skema

Kolom komputasi

Ekspresi aturan

Fungsi terikat skema

Untuk informasi selengkapnya tentang fungsi terikat skema, lihat Membuat Fungsi yang Ditentukan Pengguna (Mesin Database).

Mendapatkan Informasi Tentang Sinonim

Tampilan sys.synonyms katalog berisi entri untuk setiap sinonim dalam database tertentu. Tampilan katalog ini mengekspos metadata sinonim seperti nama sinonim dan nama objek dasar. Untuk informasi selengkapnya, lihat sys.synonyms (Transact-SQL).

Dengan menggunakan properti yang diperluas, Anda dapat menambahkan teks deskriptif atau instruksional, masker input, dan aturan pemformatan sebagai properti sinonim. Karena properti disimpan dalam database, semua aplikasi yang membaca properti dapat mengevaluasi objek dengan cara yang sama. Untuk informasi selengkapnya, lihat sp_addextendedproperty (Transact-SQL).

Untuk menemukan jenis dasar objek dasar sinonim, gunakan fungsi OBJECTPROPERTYEX. Untuk informasi selengkapnya, lihat OBJECTPROPERTYEX (Transact-SQL).

Contoh

Contoh berikut mengembalikan jenis dasar objek dasar sinonim yang merupakan objek lokal.

USE tempdb;  
GO
CREATE SCHEMA SynSchema
GO  
CREATE SYNONYM SynSchema.MyEmployee   
FOR AdventureWorks2022.HumanResources.Employee;  
GO  
SELECT OBJECTPROPERTYEX(OBJECT_ID('SynSchema.MyEmployee'), 'BaseType') AS BaseType;  

Contoh berikut mengembalikan jenis dasar objek dasar sinonim yang merupakan objek jarak jauh yang terletak di server bernama Server1.

EXECUTE sp_addlinkedserver Server1;  
GO  
CREATE SYNONYM SynSchema.MyRemoteEmployee  
FOR Server1.AdventureWorks2022.HumanResources.Employee;  
GO  
SELECT OBJECTPROPERTYEX(OBJECT_ID('MyRemoteEmployee'), 'BaseType') AS BaseType;  
GO  

Membuat Sinonim
BUAT SINONIM (Transact-SQL)
DROP SINONIM (Transact-SQL)