Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Buat Hubungan di SQL Server 2017

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)

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana ROW_NUMBER() Bekerja di SQL Server

  2. Cara Mengurangi Ukuran File Data di SQL Server (T-SQL)

  3. SQL Server 2005 ROW_NUMBER() tanpa ORDER BY

  4. Perbandingan Tipe Data Tanggal &Waktu di SQL Server

  5. Apa praktik terbaik untuk memasukkan catatan jika belum ada?