Pelajari cara membuat hubungan antara dua tabel di SQL Server.
Dalam desain basis data relasional, sebuah hubungan adalah tempat dua atau lebih tabel dihubungkan bersama karena mengandung data terkait. Hal ini memungkinkan pengguna untuk menjalankan kueri untuk data terkait di beberapa tabel.
Bagian tutorial ini menjelaskan cara membuat hubungan berikut:
Ada dua hubungan dalam diagram itu. Ada hubungan antara Albums
dan Artists
tabel, dan ada hubungan lain antara Albums
dan Genres
tabel.
Dengan melihat diagram itu, kita dapat melihat bahwa satu artis bisa memiliki banyak album. Dalam hal ini, kita hanya perlu memiliki satu baris yang berisi nama artis, terlepas dari berapa banyak album yang mereka miliki. Ini karena kita dapat membuat rekaman di Artists
tabel dengan ArtistId
yang unik . Semua album untuk artis tersebut akan berada di Albums
tabel, dan mereka akan berisi ID artis yang sama di ArtistId
-nya sendiri kolom. Dengan melakukan ini, kami dapat menjalankan kueri di kedua tabel dan mengembalikan nama artis, ditambah semua album yang telah mereka rilis. Inilah manfaat dari sebuah hubungan.
Sebelumnya kita telah membuat database yang berisi ketiga tabel di atas. Ketika kami melakukan itu, kami juga membuat salah satu hubungan yang digambarkan dalam diagram di atas. Kami menciptakan hubungan antara Albums
tabel dan Artists
tabel (di mana ArtistId
kolom Albums
tabel mereferensikan ArtistsId
kolom Artists
tabel).
Berikut kode yang kami jalankan untuk membuat tabel:
Kode yang disorot adalah bagian yang membuat hubungan antara Albums
tabel dan Artists
meja. Ini dilakukan dengan menyetel ArtistId
kolom Albums
untuk mereferensikan ArtistId
kolom Artists
tabel.
Cara yang lebih teknis untuk mengatakan ini adalah Albums.ArtistId
menjadi kunci asing Artists.ArtistId
(yang itu sendiri adalah kunci utama dari tabel itu). Ini adalah batasan kunci asing.
Apa yang dimaksud dengan Batasan Kunci Asing?
batasan kunci asing mendefinisikan hubungan antara tabel ini dan tabel lain. Saat Anda membuat batasan kunci asing, Anda membuatnya terhadap kolom tertentu di anak tabel, untuk mereferensikan kolom tertentu di induk tabel.
Ini membuat kolom di tabel anak menjadi kunci asing . Batasan memastikan bahwa nilai apa pun yang masuk ke kolom (kunci asing) ini sesuai dengan nilai di kolom kunci utama tabel induk. Jika seseorang mencoba memasukkan nilai yang tidak sesuai dengan nilai di kolom kunci utama tabel induk, SQL Server akan memunculkan kesalahan.
Ini membantu menegakkan integritas referensial. Ini mencegah kita dari memiliki catatan yatim (catatan anak yang tidak memiliki orang tua). Atau dalam contoh kami, album yang tidak terkait dengan artis mana pun.
Jika Anda menggunakan alat manajemen database GUI seperti SSMS atau Azure Data Studio, hubungan akan muncul di bawah Keys
simpul untuk tabel dengan kunci asing:
Mari kita dekonstruksi kodenya:
CONSTRAINT FK_Albums_Artists FOREIGN KEY (ArtistId) REFERENCES dbo.Artists (ArtistId) ON DELETE NO ACTION ON UPDATE NO ACTION
Dua baris pertama menciptakan hubungan. Mereka membuat batasan kunci asing antara
Albums.ArtistId
kolom dan
Artists.ArtistId
kolom. Dalam hal ini kami memanggil batasan kunci asing FK_Albums_Artists
.
Dua baris terakhir menentukan apa yang harus dilakukan SQL Server jika seseorang mencoba menghapus atau memperbarui catatan induk yang direferensikan oleh catatan di tabel anak. Dalam hal ini, NO ACTION
berarti penghapusan/pembaruan tidak akan dilanjutkan. Pengguna hanya akan mendapatkan kesalahan.
Anda dapat mengubahnya menjadi ON DELETE CASCADE
jika Anda ingin dapat menghapus induk dan anak sekaligus (yaitu, penghapusan akan mengalir dari induk ke anak). Logika yang sama berlaku untuk pembaruan, dengan menggunakan ON UPDATE CASADE
.
NO ACTION
adalah nilai default, jadi kita bisa melakukannya tanpa dua baris kode terakhir. Namun, saya menyertakannya, karena ini merupakan faktor penting untuk dipikirkan saat membuat batasan kunci asing.
Menambahkan Hubungan ke Tabel yang Ada
Contoh sebelumnya membuat hubungan pada saat yang sama membuat tabel. Namun, mungkin ada kalanya Anda perlu menambahkan hubungan ke tabel yang sudah ada.
Mari tambahkan hubungan baru antara Genres
dan Albums
tabel.
Jalankan kode berikut:
USE Music; ALTER TABLE Albums ADD CONSTRAINT FK_Albums_Genres FOREIGN KEY (GenreId) REFERENCES dbo.Genres (GenreId) ON DELETE NO ACTION ON UPDATE NO ACTION ;
Ini membuat kunci asing baru di Albums
meja. Ini menghasilkan Albums.GenreId
menjadi kunci asing yang mereferensikan Genres.GenreId
.
Jadi menjalankan pernyataan itu menghasilkan kunci asing baru yang ditampilkan di bawah Kunci simpul:
Kunci Asing Satu Kolom
Kunci asing kolom tunggal (seperti yang di atas) juga dapat ditentukan pada tingkat kolom. Jadi cara lain untuk membuat Albums
tabel dan kunci asingnya seperti ini:
CREATE TABLE Albums ( AlbumId int IDENTITY(1,1) NOT NULL PRIMARY KEY, AlbumName nvarchar(255) NOT NULL, ReleaseDate date NOT NULL, ArtistId int NOT NULL REFERENCES Artists(ArtistId), GenreId int NOT NULL );
Metode ini tidak dapat digunakan pada batasan kunci multikolom, jadi untuk batasan tersebut, gunakan sintaks pada contoh asli di atas.
Kunci Asing Multikolom
Kunci asing multikolom adalah di mana lebih dari satu kolom digunakan untuk kunci asing. Ini biasanya digunakan ketika tabel induk menggunakan beberapa kolom untuk kunci utamanya. Ini mungkin terjadi jika tabel induk menggabungkan nilai dari dua kolom untuk membuat nilai unik.
Kunci asing multikolom dapat dibuat menggunakan sintaks dalam contoh asli di atas. Cukup tambahkan setiap nama kolom yang dipisahkan dengan koma.
Jadi jika kita membayangkan bahwa Albums
tabel juga memiliki ArtistName
kolom (dan bahwa Artists
tabel menggunakan ArtistId
dan ArtistName
sebagai kunci utamanya), kunci asing multikolom akan terlihat seperti ini:
CONSTRAINT FK_Albums_Artists FOREIGN KEY (ArtistId, ArtistName) REFERENCES dbo.Artists (ArtistId, ArtistName)