Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Buat Hubungan di SQL

Di SQL, Anda membuat hubungan dengan membuat batasan kunci asing.

Lebih khusus lagi, Anda memiliki tabel induk dan tabel anak. Induk berisi kunci utama, dan tabel anak berisi kunci asing yang mereferensikan kunci utama tabel induk.

Saat Anda menggunakan SQL untuk membuat hubungan, Anda bisa membuat hubungan pada saat Anda membuat tabel, atau Anda bisa membuatnya nanti (dengan mengubah tabel). Artikel ini membahas kedua skenario tersebut.

Membuat Hubungan Saat Membuat Tabel

Berikut ini contoh membuat hubungan dalam CREATE TABLE pernyataan pada saat Anda membuat tabel.

CREATE TABLE Parent (
  ParentId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
  ParentName nvarchar(255) NOT NULL
)
CREATE TABLE Child (
  ChildId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
  ChildName nvarchar(255) NOT NULL,
  ParentId int NOT NULL
  CONSTRAINT FK_Child_Parent FOREIGN KEY (ParentId)     
    REFERENCES Parent (ParentId)
);

Di sini saya membuat dua tabel; yang disebut Parent dan yang lainnya disebut Child .

Saya membuat hubungan dalam definisi tabel untuk anak. Hubungan dibuat dengan CONSTRAINT argumen. Perhatikan bahwa ini masih di dalam CREATE TABLE pernyataan.

Hubungan membutuhkan nama. Dalam hal ini saya menyebutnya FK_Child_Parent . FOREIGN KEY bagian diikuti dengan nama kolom (di tabel anak) yang akan menjadi kunci asing.

REFERENCES bagian menentukan kolom yang akan dirujuk oleh kunci asing. Dalam hal ini referensi ParentId kolom Parent meja. Ini dilakukan dengan menggunakan REFERENCES Parent (ParentId) .

Hanya itu yang diperlukan untuk menciptakan hubungan.

Perhatikan bahwa contoh di halaman ini dilakukan menggunakan SQL Server. Bergantung pada DBMS Anda, Anda mungkin perlu mengubah beberapa detail definisi kolom.

Misalnya IDENTITY adalah versi SQL Server dari apa yang terkadang disebut AUTO_INCREMENT di DBMS lain (seperti MySQL). Jika Anda menggunakan SQLite, berikut ini cara membuat kolom penambahan otomatis di SQLite.

Menambahkan Hubungan ke Tabel yang Ada

Anda juga dapat menambahkan hubungan ke tabel yang ada, cukup dengan menggunakan ALTER TABLE pernyataan.

Mari kita berpura-pura bahwa kita tidak membuat hubungan saat membuat dua tabel dari contoh sebelumnya. Jadi mari kita berpura-pura bahwa kita yang melakukan ini:

CREATE TABLE Parent (
  ParentId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
  ParentName nvarchar(255) NOT NULL
)
CREATE TABLE Child (
  ChildId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
  ChildName nvarchar(255) NOT NULL,
  ParentId int NOT NULL
);

Jadi dalam skenario ini, yang kami lakukan hanyalah membuat dua tabel. Tidak ada hubungan yang tercipta di antara mereka.

Sekarang, setelah membuat tabel, kita tiba-tiba teringat “oh, saya lupa membuat hubungan!”.

Tidak masalah, sekarang kita bisa melakukan ini:

ALTER TABLE Child
  ADD CONSTRAINT FK_Child_Parent FOREIGN KEY (ParentId)     
    REFERENCES Parent (ParentId);

Selesai. Kami baru saja menambahkan hubungan menggunakan detail yang sama seperti contoh sebelumnya.

Perhatikan bahwa SQLite tidak mendukung penambahan kunci asing dengan ALTER TABLE penyataan. Lihat cara menambahkan kunci asing ke tabel yang ada di SQLite untuk mengetahui lebih lanjut tentang itu.

Saat Perbarui/Hapus

Secara default, hubungan SQL Server dibuat menggunakan ON DELETE NO ACTION dan ON UPDATE NO ACTION . Oleh karena itu, contoh sebelumnya dibuat menggunakan pengaturan ini.

Namun, DBMS yang berbeda dapat menggunakan pengaturan default lainnya.

Either way, Anda dapat secara eksplisit menentukan ini dalam kode Anda. Jadi kita bisa memodifikasi contoh sebelumnya menjadi seperti ini:

ALTER TABLE Child
  ADD CONSTRAINT FK_Child_Parent FOREIGN KEY (ParentId)     
    REFERENCES Parent (ParentId)
    ON DELETE NO ACTION    
    ON UPDATE NO ACTION;

Apa artinya ini sebenarnya adalah, jika seseorang mencoba menghapus atau memperbarui catatan di kunci utama, kesalahan akan terjadi dan perubahan akan dibatalkan. Ini adalah cara SQL Server untuk mencegah perubahan apa pun yang dapat merusak integritas referensial sistem Anda.

Pada dasarnya, alasan Anda membuat hubungan adalah untuk menegakkan integritas referensial.

Namun, Anda memiliki beberapa opsi tentang bagaimana Anda ingin SQL Server menangani situasi ini.

Secara khusus, Anda dapat menggunakan salah satu dari nilai berikut:

  • NO ACTION :Kesalahan muncul dan tindakan hapus/perbarui pada baris di tabel induk dibatalkan.
  • CASCADE :Baris yang sesuai akan dihapus dari/diperbarui di tabel referensi jika baris tersebut dihapus dari/diperbarui di tabel induk.
  • SET NULL :Semua nilai yang membentuk kunci asing disetel ke NULL jika baris yang sesuai di tabel induk dihapus atau diperbarui. Ini mengharuskan kolom kunci asing tidak dapat dibatalkan.
  • SET DEFAULT :Semua nilai yang membentuk kunci asing disetel ke nilai defaultnya jika baris yang sesuai di tabel induk dihapus atau diperbarui. Agar batasan ini dapat dijalankan, semua kolom kunci asing harus memiliki definisi default. Jika kolom dapat dibatalkan, dan tidak ada nilai default eksplisit yang ditetapkan, NULL menjadi nilai default implisit kolom.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Melindungi Aplikasi JDBC Terhadap Injeksi SQL

  2. Cara Menginstal Kubernetes Menggunakan Kubeadm

  3. Cara Memangkas String di SQL

  4. Harga Tidak Membersihkan

  5. Pelajari Analisis Data Dasar dengan Fungsi SQL Window