Membuat Hubungan Kunci Asing

Berlaku untuk: SQL Server 2016 (13.x) dan Azure SQL DatabaseAzure SQL Managed Instance yang lebih baru

Artikel ini menjelaskan cara membuat hubungan kunci asing di SQL Server dengan menggunakan SQL Server Management Studio atau Transact-SQL. Anda membuat hubungan antara dua tabel saat Anda ingin mengaitkan baris dari satu tabel dengan baris tabel lainnya.

Izin

Membuat tabel baru dengan kunci asing memerlukan izin CREATE TABLE dalam database, dan mengubah izin pada skema tempat tabel sedang dibuat.

Membuat kunci asing dalam tabel yang sudah ada memerlukan izin UBAH pada tabel.

Batasan dan pembatasan

  • Batasan kunci asing tidak harus ditautkan hanya ke batasan kunci utama di tabel lain. Kunci asing juga dapat didefinisikan untuk mereferensikan kolom batasan UNIK dalam tabel lain.

  • Ketika nilai selain NULL dimasukkan ke dalam kolom batasan KUNCI ASING, nilai harus ada di kolom yang direferensikan. Jika tidak, pesan kesalahan pelanggaran kunci asing dikembalikan. Untuk memastikan bahwa semua nilai batasan kunci asing komposit diverifikasi, tentukan NOT NULL pada semua kolom yang berpartisipasi.

  • Batasan KUNCI ASING hanya dapat mereferensikan tabel dalam database yang sama di server yang sama. Integritas referensial lintas database harus diimplementasikan melalui pemicu. Untuk informasi selengkapnya, lihat MEMBUAT PEMICU.

  • Batasan KUNCI ASING dapat mereferensikan kolom lain dalam tabel yang sama, dan disebut sebagai referensi mandiri.

  • Batasan KUNCI ASING yang ditentukan di tingkat kolom hanya dapat mencantumkan satu kolom referensi. Kolom ini harus memiliki tipe data yang sama dengan kolom tempat batasan ditentukan.

  • Batasan KUNCI ASING yang ditentukan pada tingkat tabel harus memiliki jumlah kolom referensi yang sama dengan jumlah kolom dalam daftar kolom batasan. Tipe data dari setiap kolom referensi juga harus sama dengan kolom terkait dalam daftar kolom.

  • Mesin Database tidak memiliki batas yang telah ditentukan sebelumnya pada jumlah batasan KUNCI ASING tabel dapat berisi referensi tabel lain. Mesin Database juga tidak membatasi jumlah batasan KUNCI ASING yang dimiliki oleh tabel lain yang mereferensikan tabel tertentu. Namun, jumlah aktual batasan KUNCI ASING yang digunakan dibatasi oleh konfigurasi perangkat keras, dan dengan desain database dan aplikasi. Tabel dapat mereferensikan maksimum 253 tabel dan kolom lainnya sebagai kunci asing (referensi keluar). SQL Server 2016 (13.x) dan yang lebih baru meningkatkan batas jumlah tabel dan kolom lain yang dapat mereferensikan kolom dalam satu tabel (referensi masuk), dari 253 menjadi 10.000. (Memerlukan setidaknya 130 tingkat kompatibilitas.) Peningkatan memiliki batasan berikut:

    • Lebih dari 253 referensi kunci asing didukung untuk operasi DML DELETE dan UPDATE. Operasi MERGE tidak didukung.
    • Tabel dengan referensi kunci asing ke dirinya sendiri masih terbatas pada 253 referensi kunci asing.
    • Lebih besar dari 253 referensi kunci asing saat ini tidak tersedia untuk indeks penyimpan kolom, tabel yang dioptimalkan memori, atau Stretch Database.

    Penting

    Stretch Database tidak digunakan lagi di SQL Server 2022 (16.x) dan Azure SQL Database. Fitur ini akan dihapus dalam versi Mesin Database di masa mendatang. Hindari menggunakan fitur ini dalam pekerjaan pengembangan baru, dan rencanakan untuk memodifikasi aplikasi yang saat ini menggunakan fitur ini.

  • Batasan KUNCI ASING tidak diberlakukan pada tabel sementara.

  • Jika kunci asing didefinisikan pada kolom jenis yang ditentukan pengguna CLR, implementasi jenis harus mendukung pengurutan biner. Untuk informasi selengkapnya, lihat Jenis yang Ditentukan Pengguna CLR.

  • Kolom jenis varchar(maks) dapat berpartisipasi dalam batasan KUNCI ASING hanya jika kunci utama yang dirujuknya juga didefinisikan sebagai jenis varchar(maks).

Membuat hubungan kunci asing di Table Designer

Menggunakan SQL Server Management Studio

  1. Di Object Explorer, klik kanan tabel yang akan berada di sisi kunci asing dari hubungan dan pilih Desain.

    Tabel terbuka di Desainer Tabel.

  2. Dari menu Desainer Tabel, pilih Hubungan. (Lihat Menu Desainer Tabel di header, atau, klik kanan di ruang kosong definisi tabel, lalu pilih Hubungan....)

  3. Dalam kotak dialog Hubungan Kunci Asing, pilih Tambahkan.

    Hubungan muncul di daftar Hubungan yang Dipilih dengan nama yang disediakan sistem dalam format FK_<tablename>_<tablename>, di mana nama tabel pertama adalah nama tabel kunci asing, dan nama tabel kedua adalah nama tabel kunci utama. Ini hanyalah konvensi penamaan default dan umum untuk bidang (Nama) dari objek kunci asing.

  4. Pilih hubungan di daftar Hubungan yang Dipilih.

  5. Pilih Spesifikasi Tabel dan Kolom di kisi di sebelah kanan dan pilih elipsis (...) di sebelah kanan properti.

  6. Dalam kotak dialog Tabel dan Kolom , di daftar drop-down Kunci Utama, pilih tabel yang akan berada di sisi kunci utama hubungan.

  7. Di kisi di bawah, pilih kolom yang berkontribusi pada kunci utama tabel. Di sel kisi yang berdekatan di sebelah kanan setiap kolom, pilih kolom kunci asing yang sesuai dari tabel kunci asing.

    Desainer Tabel menyarankan nama untuk hubungan tersebut. Untuk mengubah nama ini, edit konten kotak teks Nama Hubungan.

  8. Pilih OK untuk membuat hubungan.

  9. Tutup jendela perancang tabel dan Simpan perubahan Anda agar perubahan hubungan kunci asing diterapkan.

Membuat kunci asing dalam tabel baru

Menggunakan Transact-SQL

Contoh berikut membuat tabel dan menentukan batasan kunci asing pada kolom TempID yang mereferensikan kolom SalesReasonID dalam Sales.SalesReason tabel dalam AdventureWorks database. Klausa ON DELETE CASCADE dan ON UPDATE CASCADE digunakan untuk memastikan bahwa perubahan yang dilakukan pada Sales.SalesReason tabel secara otomatis disebarkan ke Sales.TempSalesReason tabel.

CREATE TABLE Sales.TempSalesReason 
   (
      TempID int NOT NULL, Name nvarchar(50)
      , CONSTRAINT PK_TempSales PRIMARY KEY NONCLUSTERED (TempID)
      , CONSTRAINT FK_TempSales_SalesReason FOREIGN KEY (TempID)
        REFERENCES Sales.SalesReason (SalesReasonID)
        ON DELETE CASCADE
        ON UPDATE CASCADE
   )
;

Membuat kunci asing dalam tabel yang sudah ada

Menggunakan Transact-SQL

Contoh berikut membuat kunci asing pada kolom TempID dan mereferensikan kolom SalesReasonID dalam Sales.SalesReason tabel dalam AdventureWorks database.

ALTER TABLE Sales.TempSalesReason
   ADD CONSTRAINT FK_TempSales_SalesReason FOREIGN KEY (TempID)
      REFERENCES Sales.SalesReason (SalesReasonID)
      ON DELETE CASCADE
      ON UPDATE CASCADE
;

Langkah berikutnya