Kontrol integritas database

Bab liyane sing penting kanggo ngerti babagan database yaiku CONSTRAINS. Kanthi bantuan watesan, sampeyan bisa ngontrol owah-owahan data ing tabel lan njaga integritas lan konsistensi.

Apa konsistensi data nalika kita ngomong babagan database?

Ayo njupuk toko online karo karyawan, produk lan tabel tugas . Kita wis ngerti manawa ana tugas ing tabel tugas sing ora ditugasake kanggo sapa wae: karyawan_id baris kasebut NULL.

Nanging apa mengkono yen ana entri ing meja tugas karo employee_id witjaksono kanggo, ngomong, 115? Sawise kabeh, kita ora duwe karyawan kaya ngono. Kita ora duwe karyawan kanthi id = 115 ing tabel karyawan. Ing wektu sing padha, link menyang karyawan kanthi id iki ana ing tabel tugas. Iki minangka conto inkonsistensi data .

Dadi kepiye carane kita nyelarasake data kasebut? Saenipun, server SQL, kanthi owah-owahan data, ngontrol kabeh nuansa kasebut. Lan ana kesempatan kuwi, diarani FOREIGN_KEY.

Yen sawetara kolom ing tabel sampeyan ora mung ngemot nomer, nanging baris id saka tabel liyane, mula iki bisa ditemtokake kanthi jelas.

Nambahake KUNCI ASING

Tombol kasebut bisa ditambahake ing tabel ing tahap nggawe, lan sawise nggunakake ALTER TABLE. Format ora dhasar beda. Kita bakal nampilake opsi loro kasebut.

Bentuk umum saka kunci / aturan kasebut yaiku:

FOREIGN KEY (column)
  	REFERENCES table(column)

Ayo nambah tombol / aturan iki kanggo meja tugas kanggo mesthekake yen kabeh employee_ids saka meja nuduhake entri ana ing meja pegawe. Skrip iki bakal katon kaya iki:

ALTER TABLE task
      ADD FOREIGN KEY (employee_id)
  	REFERENCES employee(id)

Lan yen kita mutusake kanggo nambah aturan iki nalika nggawe tabel tugas, kode kasebut bakal katon kaya iki:

CREATE TABLE task (
      id INT,
      name VARCHAR(100),
      employee_id INT,
      deadline DATE,
 
      PRIMARY KEY (id),
  	  FOREIGN KEY (employee_id)  
	      REFERENCES employee(id)
);

Miturut cara, ana kahanan nalika senar sing kita deleng nduweni kunci gabungan sing unik: contone, "Jeneng lan taun lair" utawa "productCatogoryId lan productId". Banjur FOREIGN KEY bisa ditulis kaya iki:

FOREIGN KEY (our_column1, our_column2)
  	REFERENCES table(their_column1, their_column2)

FOREIGN KEY lan ngganti data

Saiki bayangake kahanan sing kita mutusake kanggo nganyari sawetara data ing tabel karyawan lan id karyawan wis diganti. Apa sing bakal kedadeyan karo data ing tabel tugas? Bener, dheweke bakal dadi ora relevan, lan integritas database kita bakal dilanggar.

Kanggo nyegah iki kedados, sampeyan bisa marang SQL Server kanggo ngganti employee_id kabeh larik ing kabeh tabel sing nuduhake id iki diganti tartamtu nalika id ing tabel pegawe diganti.

Skrip kasebut diarani OnUpdate lan OnDelete . Apa sing kudu ditindakake yen id rekaman diganti, lan apa sing kudu ditindakake yen rekaman kasebut dibusak?

Kanthi ngilangi, ora kabeh gampang banget. Yen sampeyan duwe obyek gumantung sing diwakili dening strings ing database sing nuduhake siji liyane, banjur macem-macem saka sudhut skenario prilaku bisa nalika mbusak siji obyek.

Ayo kita mbusak pangguna situs, tegese kita kudu mbusak kabeh korespondensi pribadine. Nanging ora mungkin kita kudu mbusak kabeh komentar umume.

Utawa karyawan metu. Bakal aneh yen dheweke mandheg lan ing wektu sing padha kabeh tugas sing ditugasake kanggo dheweke ilang saka database. Nanging yen padha tetep diangkat ora dening wong, iku uga bakal dadi ala. Iku luwih bener kanggo nggawe supaya pegawe bisa metu sawise reassigned kabeh tugas kanggo wong liya.

Mangkene carane kita bisa njlèntrèhaké skenario iki nggunakake FOREIGN KEY. Bentuk umum saka kunci / aturan kasebut yaiku:

FOREIGN KEY (column)
  	REFERENCES table(column)
 	[ON DELETE reference_option]
 	[ON UPDATE reference_option]

Apa sing kudu ditindakake yen mbusak (ON DELETE) utawa ngganti (ON UPDATE) cathetan? Secara total, bisa uga ana 5 opsi kanggo server SQL kanggo tumindak ing saben kahanan iki:

# reference_option Panjelasan
1 WATES Pateni tumindak yen referensi senar ditemokake
2 CASCADE Ganti id ing baris gumantung
3 SET NULL Setel id ing baris gumantung menyang NULL
4 TANPA TINDAKAN Ora ono kerjaan
5 SET DEFAULT x Setel id ing sink gumantung menyang x

Mangkene carane kita bisa ngowahi tabel tugas:

ALTER TABLE task
  	ADD FOREIGN KEY (employee_id)
  	REFERENCES employee(id)
  	ON UPDATE CASCADE
  	ON DELETE RESTRICT;

Apa sing ditulis ing kene:

ON UPDATE CASCADE : Yen tombol id ing tabel karyawan diganti, banjur uga ngganti employee_id ing tabel tugas sing ngrujuk.

ON Mbusak Watesan : Yen larik lagi dibusak saka Tabel pegawe lan referensi saka Tabel tugas, banjur nyegah baris dibusak saka meja pegawe.