Bagikan melalui


Membuat hubungan kunci asing

Berlaku untuk: SQL Server 2016 (13.x) dan Azure SQL Database Azure 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 izin ALTER SCHEMA pada skema tempat tabel sedang dibuat.

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

Batasan

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

  • Saat nilai selain NULL dimasukkan ke dalam kolom batasan FOREIGN KEY , 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.

  • FOREIGN KEY batasan hanya dapat mereferensikan tabel dalam database yang sama di server yang sama. Integritas referensial lintas database harus diimplementasikan melalui pemicu. Untuk informasi selengkapnya, lihat CREATE TRIGGER (Transact-SQL).

  • FOREIGN KEY batasan dapat mereferensikan kolom lain dalam tabel yang sama, dan disebut sebagai referensi mandiri.

  • Batasan FOREIGN KEY 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 FOREIGN KEY 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 FOREIGN KEY tabel dapat berisi referensi tabel lain. Mesin Database juga tidak membatasi jumlah batasan FOREIGN KEY yang dimiliki oleh tabel lain yang mereferensikan tabel tertentu. Namun, jumlah batasan FOREIGN KEY aktual 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 versi 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 DELETE operasi DML dan UPDATE . MERGE operasi 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, atau tabel yang dioptimalkan memori.

  • FOREIGN KEY batasan 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 FOREIGN KEY batasan 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 Membuat dan memperbarui tabel database.

  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 dropdown Kunci Utama, pilih tabel yang akan berada di sisi kunci utama hubungan.

  7. Di kisi di bawah kotak dialog, 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;