logo

Viittauksen eheyden rajoitukset DBMS:ssä

Viittauksen eheysrajoitus tunnetaan myös nimellä vieraan avaimen rajoitus . Vieras avain on avain, jonka arvot johdetaan toisen taulukon ensisijaisesta avaimesta.

Taulukko, josta arvot on johdettu, tunnetaan nimellä Mestari tai referoitu Taulukko ja taulukko, johon arvot lisätään vastaavasti, tunnetaan nimellä Lapsi tai viittaus Taulukko Toisin sanoen voimme sanoa, että taulukko sisältää vieras avain kutsutaan nimellä lasten pöytä , ja taulukko, joka sisältää Ensisijainen avain/ehdokasavain kutsutaan nimellä viitattu tai päätaulukko . Kun puhumme tietokannan relaatiomallista, ehdokasavain voidaan määritellä attribuuttijoukoksi, jolla voi olla nolla tai useampi attribuutti.

Päätaulukon tai viitatun taulukon syntaksi on:

Vaihda menetelmä java
 CREATE TABLE Student (Roll int PRIMARY KEY, Name varchar(25) , Course varchar(10) ); 

Tässä sarake Roll toimii Pääavain, joka auttaa johtamaan viiteavaimen arvoa lapsitaulukossa.

Viittauksen eheysrajoitus

Lapsitaulukon tai viittaustaulukon syntaksi on:

 CREATE TABLE Subject (Roll int references Student, SubCode int, SubName varchar(10) ); 

Viittauksen eheysrajoitus

Yllä olevan taulukon sarake Roll toimii Vieras avain, joiden arvot on johdettu käyttämällä päätaulukon ensisijaisen avaimen Roll-arvoa.

Vieraan avaimen rajoitus TAI viittauksen eheysrajoitus.

Viitteen eheysrajoituksia on kaksi:

Lisää rajoitus: Arvoa ei voi lisätä CHILD-taulukkoon, jos arvo ei ole MASTER-taulukossa

Poista rajoitus: Arvoa ei voi poistaa MASTER-taulukosta, jos arvo on CHILD-taulukossa

Oletetaan, että haluat lisätä Roll = 05 muiden sarakkeiden arvojen kanssa SUBJECT-taulukossa, niin näet välittömästi virheilmoituksen ' Vieraan avaimen rajoitus rikottu ' eli ajettaessa lisäyskomentoa seuraavasti:

Lisää kohtaan SUBJECT arvot(5, 786, OS); SQL ei viihdytä Insertion Constraint -rajoituksen vuoksi (Koska et voi lisätä arvoa alitaulukkoon, jos arvo ei ole päätaulukossa, koska Roll = 5 ei ole päätaulukossa, joten sitä ei saa syöttää Roll = 5 alitaulukkoon)

Vastaavasti, jos haluat poistaa Roll = 4 OPPILAStaulukosta, näet välittömästi virheilmoituksen ' Vieraan avaimen rajoitus rikottu ' eli ajettaessa poistokomentoa seuraavasti:

Poista kohdasta OPPILAS, jossa Roll = 4; SQL ei viihdyttää sitä poistorajoituksen vuoksi. (Koska et voi poistaa arvoa päätaulukosta, jos arvo on alitaulukossa, koska Roll = 5 on alitaulukossa, joten Roll = 5:tä ei saa poistaa päätaulukosta. jotenkin onnistuimme poistamaan Roll = 5, sitten Roll = 5 on käytettävissä alitaulukossa, mikä lopulta rikkoo lisäysrajoitusta.

ml oz

POISTA KASKADI.

Poistorajoituksen mukaisesti: Arvoa ei voi poistaa MASTER-taulukosta, jos arvo on CHILD-taulukossa. Seuraava kysymys tulee, voimmeko poistaa arvon päätaulukosta, jos arvo on alitaulukossa rikkomatta poistorajoitusta? eli sillä hetkellä, kun poistamme arvon päätaulukosta, sitä vastaavan arvon pitäisi myös poistua alitaulukosta.

Vastaus yllä olevaan kysymykseen on KYLLÄ, voimme poistaa arvon päätaulukosta, jos arvo on alitaulukossa rikkomatta poistorajoitusta, meidän on tehtävä pieni muokkaus alitaulukkoa luotaessa, eli lisäämällä poistokaskadissa .

TAULUKON SYNTAKSI

ohut algoritmi
 CREATE TABLE Subject (Roll int references Student on delete cascade, SubCode int, SubName varchar(10) ); 

Yllä olevassa syntaksissa, juuri viittausten avainsanan jälkeen (käytetään vieraan avaimen luomiseen), olemme lisänneet poistosarjaan, lisäämällä sellaisen nyt voimme poistaa arvon päätaulukosta, jos arvo on alitaulukossa rikkomatta poistamista. rajoite. Jos nyt halutaan poistaa Roll = 5 päätaulukosta, vaikka Roll = 5 on alitaulukossa, se on mahdollista, koska sillä hetkellä, kun annat komennon poistaa Roll = 5 päätaulukosta, rivillä on Roll = Myös 5 alatason taulukosta poistetaan.

Viittauksen eheysrajoitus
Viittauksen eheysrajoitus

Yllä olevat kaksi taulukkoa STUDENT ja SUBJECT, joissa kummallakin on neljä arvoa, näytetään. Oletetaan nyt, että haluat poistaa Roll = 4:n OPISKELIJA( Master ) -taulukosta kirjoittamalla SQL-komennon: poista kohdasta OPISKELIJA missä Roll = 4;

Kun SQL suorittaa yllä olevan komennon, myös rivi, jonka Roll = 4 SUBJECT( Child ) -taulukosta poistetaan, tuloksena oleva OPPILAS ja AINE taulukko näyttää tältä:

Viittauksen eheysrajoitus
Viittauksen eheysrajoitus

Yllä olevista kahdesta taulukosta STUDENT ja SUBJECT voit nähdä, että molemmissa taulukoissa Roll = 4 poistetaan kerralla ilman, että poistorajoitusta rikotaan.

Joskus haastatteluissa kysytään erittäin tärkeä kysymys: Voiko vieraalla avaimella olla NULL-arvoja?

Vastaus yllä olevaan kysymykseen on KYLLÄ, sillä voi olla NULL-arvoja, kun taas ensisijainen avain ei voi olla NULL hinnalla millä hyvänsä. Ymmärtääksemme yllä olevan kysymyksen käytännössä, ymmärrämme alla käsitteen delete null.

POISTA NULL.

Poistorajoituksen mukaisesti: Arvoa ei voi poistaa MASTER-taulukosta, jos arvo on CHILD-taulukossa. Seuraava kysymys tulee, voimmeko poistaa arvon päätaulukosta, jos arvo on alitaulukossa rikkomatta poistorajoitusta? eli kun poistamme arvon päätaulukosta, sitä vastaavan arvon pitäisi myös poistua alitaulukosta tai se voidaan korvata NULL-arvolla.

Vastaus yllä olevaan kysymykseen on KYLLÄ, voimme poistaa arvon päätaulukosta, jos arvo on alitaulukossa ilman poistorajoitusta rikkomatta lisäämällä NULL vierasavaimeen, meidän on tehtävä pieni muutos luotaessa alitaulukkoa, ts. lisäämällä poistamalla null .

TAULUKON SYNTAKSI:

 CREATE TABLE Subject (Roll int references Student on delete null, SubCode int, SubName varchar(10) ); 

Yllä olevassa syntaksissa, heti viittausten avainsanan jälkeen (käytetään vieraan avaimen luomiseen), olemme lisänneet kohtaan delete null, lisäämällä sellaisen nyt voimme poistaa arvon päätaulukosta, jos arvo on alitaulukossa rikkomatta poistamista. rajoite. Jos nyt halutaan poistaa Roll = 4 päätaulukosta, vaikka Roll =4 on alitaulukossa, se on mahdollista, koska sillä hetkellä, kun annat komennon poistaa Roll = 4 päätaulukosta, rivillä on Roll = 4 alitaulukosta korvataan NULL-arvolla.

java-kokoelmat java
Viittauksen eheysrajoitus
Viittauksen eheysrajoitus

Yllä olevat kaksi taulukkoa STUDENT ja SUBJECT, joissa kummallakin on neljä arvoa, näytetään. Oletetaan nyt, että haluat poistaa Roll = 4:n OPISKELIJA( Master ) -taulukosta kirjoittamalla SQL-komennon: poista kohdasta OPISKELIJA missä Roll = 4;

Kun SQL suorittaa yllä olevan komennon, rivi, jonka Roll = 4 SUBJECT( Child ) -taulukosta korvataan NULL-arvolla, tuloksena oleva OPPILAS ja AINE taulukko näyttää tältä:

Viittauksen eheysrajoitus
Viittauksen eheysrajoitus

Yllä olevista kahdesta taulukosta STUDENT ja SUBJECT voit nähdä, että taulukossa STUDENT Roll = 4 poistetaan, kun taas SUBJECT-taulukon Roll = 4 -arvo korvataan NULL:lla. Tämä osoittaa, että vierasavaimella voi olla nolla-arvoja. Jos SUBJECT-taulukon tapauksessa sarake Roll on Primary Key yhdessä vierasavaimen kanssa, emme voineet tehdä vieraa-avaimesta NULL-arvoja.