CodeGym/Kurso sa Java/All lectures for TL purposes/CONSTRAINT: integridad ng database

CONSTRAINT: integridad ng database

Available

Kontrol sa integridad ng database

Ang isa pang mahalagang bagay na dapat malaman tungkol sa mga database ay CONSTRAINS. Sa tulong ng mga hadlang, maaari mong kontrolin ang mga pagbabago sa data sa iyong mga talahanayan at mapanatili ang kanilang integridad at pagkakapare-pareho.

Ano ang pagkakapare-pareho ng data kapag pinag-uusapan natin ang tungkol sa isang database?

Dalhin natin ang aming online na tindahan kasama ang mga talahanayan ng empleyado, produkto at gawain . Alam na natin na maaaring mayroong mga gawain sa talahanayan ng gawain na hindi nakatalaga sa sinuman: ang employee_id ng naturang mga hilera ay NULL.

Ngunit ano ang mangyayari kung mayroong isang entry sa talahanayan ng gawain na may isang employee_id na katumbas ng, sabihin nating, 115? Kung tutuusin, wala kaming ganoong empleyado. Wala kaming empleyado na may id = 115 sa talahanayan ng empleyado. Kasabay nito, ang isang link sa isang empleyado na may ganitong id ay nasa talahanayan ng gawain. Ito ay isang halimbawa ng hindi pagkakapare-pareho ng data .

Kaya paano natin ipagkakasundo ang mga datos na ito? Sa isip, ito ay upang ang SQL server, na may anumang pagbabago ng data, ay kinokontrol ang lahat ng mga nuances na ito. At may ganitong pagkakataon, ito ay tinatawag na FOREIGN_KEY.

Kung ang ilang column sa iyong talahanayan ay naglalaman ng hindi lamang mga numero, ngunit mga hilera ng id mula sa isa pang talahanayan, maaari itong tahasang tukuyin.

Pagdaragdag ng FOREIGN KEY

Ang nasabing susi ay maaaring idagdag sa talahanayan kapwa sa yugto ng paglikha nito, at pagkatapos, gamit ang ALTER TABLE. Ang format ay hindi sa panimula ay naiiba. Ipapakita namin ang parehong mga pagpipilian.

Ang pangkalahatang anyo ng naturang susi/panuntunan ay:

FOREIGN KEY (column)
  	REFERENCES table(column)

Idagdag natin ang susi/panuntunan na ito sa talahanayan ng gawain upang matiyak na ang lahat ng mga empleyado_id mula sa talahanayan ay tumutukoy sa isang umiiral nang entry sa talahanayan ng mga empleyado. Magiging ganito ang script na ito:

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

At kung nagpasya kaming idagdag ang panuntunang ito sa oras ng paglikha ng talahanayan ng gawain, ang code ay magiging ganito:

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

Oo nga pala, may mga sitwasyon kapag ang string na tinutukoy namin ay may natatanging composite key: halimbawa, "Pangalan at taon ng kapanganakan" o "productCatogoryId at productId". Kung gayon ang FOREIGN KEY ay maaaring isulat tulad nito:

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

FOREIGN KEY at pagbabago ng data

Ngayon isipin ang isang sitwasyon kung saan nagpasya kaming mag-update ng ilang data sa talahanayan ng empleyado at nagbago ang aming id ng empleyado. Ano ang mangyayari sa data sa talahanayan ng gawain? Iyon ay tama, sila ay magiging walang kaugnayan, at ang integridad ng aming database ay malalabag.

Upang maiwasang mangyari ito, maaari mong sabihin sa SQL Server na baguhin ang employee_id ng lahat ng mga row sa lahat ng mga talahanayan na tumutukoy sa partikular na binagong id kapag nagbago ang id sa talahanayan ng empleyado.

Ang mga naturang script ay tinatawag na OnUpdate at OnDelete . Ano ang gagawin kung magbago ang record id, at ano ang gagawin kung matanggal ang record?

Sa pag-alis, hindi lahat ay napakasimple. Kung mayroon kang mga umaasa na bagay na kinakatawan ng mga string sa database na tumutukoy sa isa't isa, kung gayon ang isang malawak na iba't ibang mga senaryo ng pag-uugali ay posible kapag nagtatanggal ng isang bagay.

Sabihin nating tanggalin natin ang isang user ng site, na nangangahulugang dapat nating tanggalin ang lahat ng kanyang personal na sulat. Ngunit hindi malamang na dapat nating alisin ang lahat ng kanyang pampublikong komento.

O isang empleyado ang huminto. Kakaiba kung siya ay huminto at kasabay nito ay nawala sa database ang lahat ng mga gawaing itinalaga sa kanya. Ngunit kung nanatili silang hinirang na hindi niya, ito rin ay magiging masama. Mas tama na gawin ito upang ang empleyado ay makapag-quit pagkatapos italaga ang lahat ng kanyang mga gawain sa ibang tao.

Narito kung paano namin mailalarawan ang mga sitwasyong ito gamit ang FOREIGN KEY. Ang pangkalahatang anyo ng naturang susi/panuntunan ay:

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

Ano ang gagawin kung sakaling matanggal ang (ON DELETE) o baguhin ang (ON UPDATE) na mga tala? Sa kabuuan, maaaring mayroong 5 mga opsyon para sa SQL server na kumilos sa bawat isa sa mga sitwasyong ito:

# reference_option Paliwanag
1 PAGHIHIGPIT I-disable ang pagkilos kung may nakitang string reference
2 CASCADE Baguhin ang id sa mga dependent na row
3 SET NULL Itakda ang id sa dependent row sa NULL
4 WALANG AKSYON Walang magawa
5 Itakda ang DEFAULT x Itakda ang id sa dependent sinks sa x

Narito kung paano namin mababago ang aming talahanayan ng gawain:

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

Ano ang nakasulat dito:

SA UPDATE CASCADE : Kung ang id key sa talahanayan ng empleyado ay nagbabago, pagkatapos ay baguhin din ang employee_id sa talahanayan ng gawain na tumutukoy dito.

ON DELETE RESTRICT : Kung ang isang row ay tinatanggal mula sa talahanayan ng empleyado at isinangguni mula sa talahanayan ng gawain, pagkatapos ay pigilan ang hilera na matanggal mula sa talahanayan ng empleyado.

Mga komento
  • Sikat
  • Bago
  • Luma
Dapat kang naka-sign in upang mag-iwan ng komento
Wala pang komento ang page na ito