Kunci Asing SQL Server: Cara Membuatnya Beserta Contoh

โšก Ringkasan Cerdas

Foreign key di SQL Server menegakkan integritas referensial dengan menghubungkan tabel anak ke tabel induk. Setiap nilai foreign key harus sudah ada di primary key yang dirujuk pada tabel induk.

  • ๐Ÿ”— Apa itu foreign key? Kunci asing menghubungkan tabel anak dengan tabel induk dan menegakkan integritas referensial di antara keduanya.
  • ๐Ÿ‘ช Orang tua dan anak: Tabel yang dirujuk adalah tabel induk; tabel yang menyimpan kunci asing adalah tabel anak, yang menunjuk ke kunci utama tabel induk.
  • ๏ธ Dua metode pembuatan: Relasi di SQL Server Management Studio dan klausa T-SQL CREATE TABLE โ€ฆ FOREIGN KEY โ€ฆ REFERENCES sama-sama mendefinisikan kunci asing.
  • โž• Tambahkan ke tabel yang sudah ada: Perintah ALTER TABLE โ€ฆ ADD CONSTRAINT โ€ฆ FOREIGN KEY menambahkan relasi ke tabel yang sudah ada.
  • ๐Ÿ”„ Tindakan referensial: Klausul ON DELETE dan ON UPDATE mengontrol baris anak dengan NO ACTION, CASCADE, SET NULL, atau SET DEFAULT.
  • โœ… Integrity periksa: Penyisipan baris anak yang kuncinya tidak memiliki baris induk yang cocok akan ditolak, keeping Data tersebut konsisten.

Kunci Asing SQL Server: Cara Membuatnya di SQL Server Beserta Contoh

Apa itu KUNCI ASING?

Kunci asing menyediakan cara untuk menegakkan integritas referensial di dalam SQL ServerSingkatnya, foreign key memastikan bahwa nilai-nilai dalam satu tabel harus ada di tabel lain.

Aturan untuk KUNCI ASING

  • Nilai NULL diperbolehkan dalam foreign key SQL.
  • Tabel yang dirujuk disebut tabel induk.
  • Tabel yang berisi foreign key disebut tabel anak.
  • Kunci asing di tabel anak merujuk pada kunci utama di tabel induk.
  • Hubungan orang tua-anak ini menegakkan aturan yang dikenal sebagai "integritas referensial."

Diagram di bawah ini merangkum semua poin di atas untuk kunci asing.

Diagram kunci asing yang menghubungkan tabel anak ke kunci utama tabel induk.

Cara Membuat KUNCI ASING di SQL

Anda dapat membuat foreign key di SQL Server dengan dua cara:

Studio Manajemen SQL Server

Tabel Induk: Misalkan kita memiliki tabel induk yang sudah ada bernama 'Course.' Course_ID dan Course_name adalah dua kolom, dengan Course_Id sebagai kunci utama.

Tabel induk Course dengan kunci utama Course_Id dan kolom Course_name

Tabel Anak: Kita perlu membuat tabel kedua sebagai tabel anak. 'Course_ID' dan 'Course_Strength' adalah dua kolomnya. Namun, 'Course_ID' harus menjadi kunci asing.

Langkah 1) Klik kanan pada Tabel > Baru > Tabelโ€ฆ

Klik kanan pada Tabel, lalu Baru, lalu Tabel di SQL Server Management Studio.

Langkah 2) Masukkan dua nama kolom sebagai 'Course_ID' dan 'Course_Strength'. Klik kanan pada kolom 'Course_Id', lalu klik Relationship.

Kolom tabel anak baru Course_ID dan Course_Strength dengan menu Relasi.

Langkah 3) Di 'Hubungan Kunci Asing,' klik 'Tambah.'

Dialog Hubungan Kunci Asing dengan tombol Tambah

Langkah 4) Di 'Spesifikasi Tabel dan Kolom,' klik ikon 'โ€ฆ'.

Bidang Spesifikasi Tabel dan Kolom dengan tombol elipsis

Langkah 5) Pilih 'Tabel Kunci Utama' sebagai 'COURSE' dan tabel baru yang sedang dibuat sebagai 'Tabel Kunci Asing' dari menu tarik-turun.

Memilih COURSE sebagai tabel kunci utama di dialog relasi

Langkah 6) Untuk 'Tabel Kunci Utama,' pilih kolom 'Course_Id' sebagai kolom kunci utama tabel.

Untuk 'Tabel Kunci Asing,' pilih kolom 'Course_Id' sebagai kolom tabel kunci asing. Klik OK.

Lokasiping Course_Id digunakan sebagai kolom kunci utama dan kunci asing.

Langkah 7) Klik Tambah.

Klik Tambah untuk mengkonfirmasi hubungan kunci asing.

Langkah 8) Beri nama tabel sebagai 'Course_Strength' dan klik OK.

Beri nama tabel anak Course_Strength dan klik OK.

Hasil: Kita telah menetapkan hubungan induk-anak antara 'Course' dan 'Course_Strength.'

Hubungan induk-anak terjalin antara Course dan Course_Strength

T-SQL: Membuat Tabel Induk-Anak Menggunakan T-SQL

Tabel Induk: Pertimbangkan kembali bahwa kita memiliki tabel induk yang sudah ada dengan nama 'Course.' Course_ID dan Course_name adalah dua kolom, dengan Course_Id sebagai kunci utama.

Tabel induk yang sudah ada, Course, dengan Course_Id sebagai kunci utama.

Tabel Anak: Kita perlu membuat tabel kedua sebagai tabel anak dengan nama 'Course_Strength_TSQL'. 'Course_ID' dan 'Course_Strength' adalah dua kolomnya. Namun, 'Course_ID' akan menjadi kunci asing.

Berikut adalah sintaksnya untuk membuat tabel dengan KUNCI ASING.

sintaks:

CREATE TABLE childTable
(
  column_1 datatype [ NULL |NOT NULL ],
  column_2 datatype [ NULL |NOT NULL ],
  ...

  CONSTRAINT fkey_name
    FOREIGN KEY (child_column1, child_column2, ... child_column_n)
    REFERENCES parentTable (parent_column1, parent_column2, ... parent_column_n)
    [ ON DELETE { NO ACTION |CASCADE |SET NULL |SET DEFAULT } ]
    [ ON UPDATE { NO ACTION |CASCADE |SET NULL |SET DEFAULT } ] 
);

Berikut penjelasan parameter di atas:

  • childTable adalah nama tabel yang akan dibuat.
  • column_1, column_2 adalah kolom yang akan ditambahkan ke tabel.
  • fkey_name adalah nama batasan kunci asing yang akan dibuat.
  • child_column1, child_column2 โ€ฆ child_column_n adalah kolom-kolom tabel anak yang merujuk pada kunci utama di parentTable.
  • parentTable adalah nama tabel induk yang kuncinya dirujuk dalam tabel anak.
  • parent_column1, parent_column2 โ€ฆ parent_column_n adalah kolom-kolom yang membentuk kunci utama dari tabel induk.
  • ON DELETE adalah parameter opsional yang menentukan apa yang terjadi pada data anak setelah data induk dihapus. Nilai-nilainya meliputi NO ACTION, SET NULL, CASCADE, atau SET DEFAULT.
  • ON UPDATE adalah parameter opsional yang menentukan apa yang terjadi pada data anak setelah data induk diperbarui. Nilai-nilainya meliputi NO ACTION, SET NULL, CASCADE, atau SET DEFAULT.
  • NO ACTION berarti tidak ada yang terjadi pada data anak setelah data induk diperbarui atau dihapus.
  • CASCADE berarti data anak dihapus atau diperbarui setelah data induk dihapus atau diperbarui.
  • SET NULL berarti data anak diatur menjadi null setelah data induk diperbarui atau dihapus.
  • SET DEFAULT berarti data anak diatur ke nilai default-nya setelah pembaruan atau penghapusan pada data induk.

Mari kita lihat contoh foreign key yang membuat tabel dengan satu kolom sebagai FOREIGN KEY, menggunakan tipe data untuk setiap kolom.

Contoh Foreign Key dalam SQL

Query:

CREATE TABLE Course_Strength_TSQL
(
Course_ID Int,
Course_Strength Varchar(20) 
CONSTRAINT FK FOREIGN KEY (Course_ID)
REFERENCES COURSE (Course_ID)	
)

Langkah 1) Jalankan kueri dengan mengklik Eksekusi.

Menjalankan kueri CREATE TABLE yang mendefinisikan kunci asing Course_ID.

Hasil: Kita telah menetapkan hubungan induk-anak antara 'Course' dan 'Course_Strength_TSQL.'

Hubungan induk-anak dibuat antara Course dan Course_Strength_TSQL

Menggunakan ALTER TABLE

Sekarang kita akan mempelajari cara menambahkan foreign key di SQL Server ke tabel yang sudah ada menggunakan pernyataan ALTER TABLE. Kita akan menggunakan sintaks yang diberikan di bawah ini:

ALTER TABLE childTable
ADD CONSTRAINT fkey_name
    FOREIGN KEY (child_column1, child_column2, ... child_column_n)
    REFERENCES parentTable (parent_column1, parent_column2, ... parent_column_n);

Berikut penjelasan parameter yang digunakan di atas:

  • childTable adalah nama tabel yang akan dibuat.
  • column_1, column_2 adalah kolom yang akan ditambahkan ke tabel.
  • fkey_name adalah nama batasan kunci asing yang akan dibuat.
  • child_column1, child_column2 โ€ฆ child_column_n adalah kolom-kolom tabel anak yang merujuk pada kunci utama di parentTable.
  • parentTable adalah nama tabel induk yang kuncinya dirujuk dalam tabel anak.
  • parent_column1, parent_column2 โ€ฆ parent_column_n adalah kolom-kolom yang membentuk kunci utama dari tabel induk.

Contoh perintah ALTER TABLE add foreign key:

ALTER TABLE department
ADD CONSTRAINT fkey_student_admission
    FOREIGN KEY (admission)
    REFERENCES students (admission);

Kami telah membuat kunci asing bernama fkey_student_admission pada tabel departemen. Kunci asing ini merujuk pada kolom penerimaan tabel siswa.

Contoh Query FOREIGN KEY

Pertama, mari kita lihat data tabel induk kita, COURSE.

Query:

SELECT * from COURSE;

Hasil SELECT yang menampilkan data tabel induk COURSE

Sekarang mari kita masukkan beberapa baris ke dalam tabel anak 'Course_Strength_TSQL'. Kita akan mencoba memasukkan dua jenis baris:

  • Tipe pertama, di mana Course_Id pada tabel anak ada di Course_Id pada tabel induk, yaitu Course_Id = 1 dan 2.
  • Tipe kedua, di mana Course_Id pada tabel anak tidak ada pada Course_Id di tabel induk, yaitu Course_Id = 5.

Query:

Insert into COURSE_STRENGTH values (1,'SQL');
Insert into COURSE_STRENGTH values (2,'Python');
Insert into COURSE_STRENGTH values (5,'PERL');

Menyisipkan baris anak, termasuk Course_ID 5 yang tidak memiliki induk yang cocok.

Hasil: Mari kita jalankan kueri bersama-sama untuk melihat tabel induk dan tabel anak kita.

Baris dengan Course_ID 1 dan 2 ada di tabel Course_Strength. Namun, Course_ID 5 merupakan pengecualian, karena tidak memiliki baris yang cocok di tabel induknya.

Tabel induk dan anak dibandingkan; Course_ID 5 melanggar integritas referensial.

Pertanyaan Umum Demo Slot

Kunci utama secara unik mengidentifikasi setiap baris di dalam tabelnya sendiri dan tidak boleh bernilai NULL. Kunci asing merujuk pada kunci utama tersebut dari tabel lain untuk menegakkan integritas referensial. Ini kunci utama versus kunci asing Perbandingan menjelaskan setiap perbedaan.

Ya. Kunci asing dapat merujuk ke kunci utama atau kolom apa pun yang memiliki batasan UNIQUE di tabel induk. Kolom yang dirujuk harus berisi nilai unik sehingga setiap baris anak cocok persis dengan satu baris induk.

ON DELETE CASCADE secara otomatis menghapus baris anak yang cocok setiap kali baris induknya dihapus, menjagaping Tabelnya konsisten. Alternatifnya adalah SET NULL, yang menghapus foreign key anak, dan NO ACTION, yang memblokir penghapusan.

Ya. Kunci asing yang merujuk pada dirinya sendiri mengarah ke kunci utama di tabel yang sama, yang memodelkan hierarki seperti baris karyawan yang merujuk pada manajernya. Untuk referensi diri, SQL Server merekomendasikan ON DELETE NO ACTION untuk menghindari siklus berjenjang.

Ya, kecuali jika kolom tersebut dideklarasikan sebagai NOT NULL. Kunci asing NULL berarti baris anak belum terhubung ke baris induk mana pun, dan SQL Server akan melewati pemeriksaan referensi untuk nilai NULL tersebut.

Jalankan perintah ALTER TABLE child_table DROP CONSTRAINT fkey_name. Anda harus memasukkan nama batasan (constraint name), yang dapat Anda temukan di sys.foreign_keys. Hapusping Foreign key menghapus relasi tetapi membiarkan kedua tabel dan datanya tidak berubah.

Ya. Kopilot GitHub Anda dapat menulis batasan FOREIGN KEY di dalam pernyataan CREATE TABLE atau ALTER TABLE dari perintah bahasa alami dan menyarankan tabel induk serta kolom yang dirujuk. Selalu tinjau kunci, tindakan referensial, dan tipe data sebelum menjalankan skrip.

Alat AI dan pembelajaran mesin memeriksa data sampel dan pola kueri untuk menyarankan kolom mana yang harus menjadi kunci asing, mendeteksi relasi yang hilang atau terputus, dan merekomendasikan tindakan ON DELETE yang sesuai. Pengembang meninjau setiap saran sebelum menerapkannya.

Ringkaslah postingan ini dengan: