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 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.
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 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โฆ
Langkah 2) Masukkan dua nama kolom sebagai 'Course_ID' dan 'Course_Strength'. Klik kanan pada kolom 'Course_Id', lalu klik Relationship.
Langkah 3) Di 'Hubungan Kunci Asing,' klik 'Tambah.'
Langkah 4) Di 'Spesifikasi Tabel dan Kolom,' klik ikon 'โฆ'.
Langkah 5) Pilih 'Tabel Kunci Utama' sebagai 'COURSE' dan tabel baru yang sedang dibuat sebagai 'Tabel Kunci Asing' dari menu tarik-turun.
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.
Langkah 7) Klik Tambah.
Langkah 8) Beri nama tabel sebagai 'Course_Strength' dan klik OK.
Hasil: Kita telah menetapkan hubungan induk-anak 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 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.
Hasil: Kita telah menetapkan hubungan induk-anak 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;
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');
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.

















