Adatintegritási szabályok (adatbázis kényszerek)
Kényszerek típusai
Az SQL szabvány nem definiálja elég szigorúan, ezért az egyes adatbáziskezelő rendszerek valamelyest eltérhetnek egymástól ebben:Nem feltétlenül ugyanazokat a lehetőségeket nyújtjákNem feltétlen azonos az SQL szintaxisa e térenA kényszerek fajtái:NOT NULLCHECKPRIMARY KEY (elsődleges kulcs)UNIQUE KEY (egyedi kulcs)FOREIGN KEY (külső kulcs)Forrás:előadás diái
NOT NULL
A NOT NULL kényszer meggátolja, hogy a tábla egy oszlopában NULL (üres) érték tárolódjon. A feltétel ellenőrzése sor beszúrásakor, vagy az attribútum módosításakor történik. A CHECK CONSTRAINT egy speciális esetének tekinthető.Forrás:előadás diái
Használata
Az alapszintaxisa:expression IS NOT NULL Példa:CREATE TABLE Dolgozó(A_dolgozó_törzsszáma CHAR(7) PRIMARY KEY, Név VARCHAR(50),Email VARCHAR(50) NOT NULL, Fizetés DECIMAL(7,0) );Az email címet kötelező kitölteni, nem vehet fel NULL értéket a korlátozás miatt.Forrás:https://www.techonthenet.com/oracle/isnotnull.php
CHECK
A CHECK kényszer egy olyan logikai kifejezés, melynek minden sorra teljesülnie kell. A kulcsszót 1 zárójelbe tett feltétel követi, amelyet az attribútum minden értékének ki kell elégítenie.1 attribútumra vonatkozó CHECK feltételt csak akkor ellenőriz a rendszer, amikor valamelyik sorban az adott attribútum új értéket kap. Ha az új érték megsérti a feltételt, akkor a rendszer az adatmódosítást visszautasítja. Az SQL szintaxis sokszínűsége miatt több formában is lelehet írni ugyanazt. Az Oracle-on kívüli adatbáziskezelőknél emiatt formai különbségek előfordulhatnak.Forrás:http://vizsgazz.hu/index.php?option=com_content&view=article&id=74:09tetel&catid=105&Itemid=221előadás diái
Használata
A következő 3 példa egyaránt azt korlátozza, hogy fizetésnek ne lehessen 100000 forintnál kevesebbet megadni. Formailag a [CONSTRAINT constraint_name]-t ellehet hagyni, viszont ha a CONSTRAINT feltétel a végén található és nem közvetlen következik, akkor figyelni kell a vesszőre!CREATE TABLE Dolgozó (A_dolgozó_törzsszáma CHAR(7), Név VARCHAR(50), Fizetés DECIMAL(7,0) CHECK (Fizetés >100000));CREATE TABLE Dolgozó (A_dolgozó_törzsszáma CHAR(7), Név VARCHAR(50), Fizetés DECIMAL(7,0)CONSTRAINT Fizetes_min CHECK (Fizetés >100000));CREATE TABLE Dolgozó (Fizetés DECIMAL(7,0), A_dolgozó_törzsszáma CHAR(7), Név VARCHAR(50), CONSTRAINT Fizetes_min CHECK (Fizetés >100000));Forrás:http://vizsgazz.hu/index.php?option=com_content&view=article&id=74:09tetel&catid=105&Itemid=221saját példa
PRIMARY KEY
A Primary key egyértelműen azonosít minden rekordot a táblában. Célszerű, ha minden táblának van egy elsődleges kulcsa.Nem vehet fel NULL értéketNem lehet egy táblában két olyan sor melynek azonos az elsődleges kulcsa.Állhat egyetlen attribútumból (egyoszlopos),Lehet többoszlopos is.forrás:előadás diáihttps://www.techonthenet.com/oracle/primary_keys.php
Használata
szintaxisa:CREATE TABLE table_name ( column1 datatype null/not null, column2 datatype null/not null, ... CONSTRAINT constraint_name PRIMARY KEY (column1, column2, ... column_n) ); A következő 3 példa egyaránt a dolgozó törzsszámát állítja be elsődleges kulcsnak. Formailag a [CONSTRAINT constraint_name]-t ellehet hagyni, viszont ha a CONSTRAINT feltétel a végén található és nem közvetlen következik, akkor figyelni kell a vesszőre!CREATE TABLE Dolgozó (A_dolgozó_törzsszáma CHAR(7) PRIMARY KEY, Név VARCHAR(50), Fizetés DECIMAL(7,0) );CREATE TABLE Dolgozó (A_dolgozó_törzsszáma CHAR(7) CONSTRAINT dolgozo_pk PRIMARY KEY, Név VARCHAR(50), Fizetés DECIMAL(7,0) );CREATE TABLE Dolgozó (A_dolgozó_törzsszáma CHAR(7) , Név VARCHAR(50), Fizetés DECIMAL(7,0), CONSTRAINT dolgozo_pk PRIMARY KEY (A_dolgozó_törzsszáma));forrás:előadás diáihttps://www.techonthenet.com/oracle/primary_keys.php
UNIQUE KEY
A UNIQUE KEY biztosítja, hogy egy oszlopba különböző értékek kerüljenek (akárcsak a primary key), ebből viszont korlátlan számú lehet, akár 0 is. NULL értéket is felvehet, mert az ismeretlen értékkel nem szegjük meg az egyediséget.Forrás:https://www.techonthenet.com/oracle/unique.phpelőadás diái
Használata
szintaxisa:CREATE TABLE table_name ( column1 datatype [ NULL | NOT NULL ], column2 datatype [ NULL | NOT NULL ], ... CONSTRAINT constraint_name UNIQUE (uc_col1, uc_col2, ... uc_col_n) ); A következő 3 példa egyaránt az email címet állítja be egyedire, azaz nem adható olyan email cím melyet már használ valaki, viszont üresen lehet hagyni, mert nem primary key.CREATE TABLE Dolgozó (A_dolgozó_törzsszáma CHAR(7), Név VARCHAR(50),Email VARCHAR(50) UNIQUE, Fizetés DECIMAL(7,0) );CREATE TABLE Dolgozó (A_dolgozó_törzsszáma CHAR(7), Név VARCHAR(50),Email VARCHAR(50), Fizetés DECIMAL(7,0), CONSTRAINT email_check UNIQUE(Email) );CREATE TABLE Dolgozó (A_dolgozó_törzsszáma CHAR(7), Név VARCHAR(50),Email VARCHAR(50)CONSTRAINT email_check UNIQUE, Fizetés DECIMAL(7,0) );Forrás:https://www.techonthenet.com/oracle/unique.phpsaját példa
FOREIGN KEY
Az adatbázisokban nem csupán az egyedtípusokat, hanem azok közti kapcsolatokat is el kell tárolnunk. A táblák közötti kapcsolatok tárolására használjuk az idegen kulcsokat. Idegen kulcsnak nevezzük egy tábla olyan mezőjét, amelynek értékei egy másik tábla rekordjait azonosítják. Az idegen kulcs segítségével a táblák közötti kapcsolatokat tudjuk eltárolni a relációs adatmodellnek megfelelő adatbázisokban. Tehát a "külső kulcs" kényszer meggátolja, hogy olyan értéket vigyünk be egy tábla oszlopába, amely érték nem található meg egy táblánk elsődleges kulcsában vagy egyedi kulcsában.példa:Tegyük fel, hogy feladatunk, hogy személygépkocsik és tulajdonosaik adatinak tárolását szeretnénk megvalósítani.Az autók rendszámát, gyártmányát, típusát, és hengerűrtartalmát, a tulajdonosok nevét, személyi igazolványszámát, valamint lakcímét szeretnénk tárolni.Az Autók táblában a RendSzam a Személyek táblában a SzemIgSzam lesz az azonosító.Az Autók egyedtípusban úgy jelezzük a tulajdonost, hogy a táblában elhelyezünk a Tulajdonos mezőt, amelynek minden értéke a Személyek tábla azonosító mezőjéből származik, azaz azonosít egy személyt.Az Autók tábla Tulajdonos mezője idegen kulcs.CREATE TABLE Autok (Rendszam VARCHAR(6),Gyártmány VARCHAR(30), Tipus VARCHAR(20), Hengerurtartalom NUMBER(3), Tulajdonos VARCHAR(8),CONSTRAINT autok_Tulajdonos_fk FOREIGN KEY (Tulajdonos) REFERENCES Tulajdonos(SzemIgSzam));CREATE TABLE Tulajdonos(SzemIgSzam VARCHAR(8) PRIMARY KEY,Vezeteknev VARCHAR(20), Keresztnev VARCHAR(20), Lakcim VARCHAR(100));Ezáltal, ha a személyek tábla tárolja az összes létező személyi igazolványszámot nem tudunk nem létező tulajdonost megadni egy autóhoz mert a tulajdonos mező idegen kulcs, mely csak a Személyek tábla SzemIgSzam-ból vehet fel értéket.Forrás:http://www.tankonyvtar.hu/hu/tartalom/tamop425/0005_25_adatbazis_kezeles_scorm_02/262_specilis_mezk_a_relcis_adatmodellben.htmlSaját példa
aForma
Foreign Key-t többféle formában is megadhatjuk.Példa: Vannak részlegeink és azokban dolgozóinkrészlegek elsődleges kulcsa: RÉSZLEG_IDdolgozók elsődleges kulcsa: MUNKAS_IDA MUNKASOK táblában is van egy RÉSZLEG_ID oszlop, és ez mutatja, hogy melyik dolgozó melyik részlegben dolgozik.Nem lehet a dolgozók között olyan aki nem létező részlegben dolgozikA következő foreign key kényszerek ugyanazt eredményezik.CREATE TABLE RESZLEGEK(RÉSZLEG_ID NUMBER(4)PRIMARY KEY,RÉSZLEG_NÉV VARCHAR(30));CREATE TABLE MUNKASOK (MUNKAS_ID NUMBER(6),VEZETEKNEV VARCHAR(30),KERESZTNEV VARCHAR(30), LAKCIM VARCHAR(50), RÉSZLEG_ID NUMBER(4),CONSTRAINT MUNKASOK_RESZLEGEK_FK FOREIGN KEY (RÉSZLEG_ID) REFERENCES RESZLEGEK(RÉSZLEG_ID));(CONSTRAINT [CONSTARINT_NAME] elhagyható)CREATE TABLE MUNKASOK (MUNKAS_ID NUMBER(6),VEZETEKNEV VARCHAR(30),KERESZTNEV VARCHAR(30), LAKCIM VARCHAR(50), RÉSZLEG_ID NUMBER(4),FOREIGN KEY (RÉSZLEG_ID) REFERENCES RESZLEGEK(RÉSZLEG_ID));Ha közvetlen utána következik a FOREIGN_KEY(TÁBLA_NEVE) is elhagyhatóCREATE TABLE MUNKASOK (MUNKAS_ID NUMBER(6),VEZETEKNEV VARCHAR(30),KERESZTNEV VARCHAR(30), LAKCIM VARCHAR(50), RÉSZLEG_ID NUMBER(4) REFERENCES RESZLEGEK(RÉSZLEG_ID));Ha egyértelmű elég a tábla nevet megadni.CREATE TABLE MUNKASOK (MUNKAS_ID NUMBER(6),VEZETEKNEV VARCHAR(30),KERESZTNEV VARCHAR(30), LAKCIM VARCHAR(50), RÉSZLEG_ID NUMBER(4) REFERENCES RESZLEGEK);Forrás:Előadás diáiSaját példa
Ugyanazon táblára való hivatkozás
Foreign Key akár ugyanazon tábla elsődleges kulcsára is hivatkozhat.Példa:Itt a MENEDZSER_ID az idegen kulcs, mely a MUNKAS_ID-ra mutat, ami az elsődleges kulcs.CREATE TABLE MUNKASOK (MUNKAS_ID NUMBER(6) PRIMARY KEY,VEZETEKNEV VARCHAR(30),KERESZTNEV VARCHAR(30), LAKCIM VARCHAR(50), RÉSZLEG_ID NUMBER(4),MENEDZSER_ID NUMBER(6),CONSTRAINT MUNKAS_MENEDZSER_FK FOREIGN KEY (MENEDZSER_ID) references MUNKASOK(MUNKAS_ID));rövidebb megoldás:CREATE TABLE MUNKASOK (MUNKAS_ID NUMBER(6) PRIMARY KEY,VEZETEKNEV VARCHAR(30),KERESZTNEV VARCHAR(30), LAKCIM VARCHAR(50), RÉSZLEG_ID NUMBER(4),MENEDZSER_ID NUMBER(6) references MUNKASOK(MUNKAS_ID));Forrás:előadás diáisaját példa
Hierarchikus viszony ábrázolása relációsan
Ha egy tábla FOREIGN KEY kulcsa ugyanazon tábla PRIMARY KEY kulcsára hivatkozik, szülő-gyerek kapcsolatot tudunk létrehozni. Ezáltal a tábla egyik sorának nem lesz szülője. Ebben a sorban a FOREIGN KEY oszlop értéke NULL. Ez különösen hasznos nagy szervezeteknél, az információ áramlása során.példa: Főnök-ügyvezető-menedzser-...Forrás:Előadás diáihttps://docs.oracle.com/cd/E16582_01/doc.91/e15115/crtng_parnt_child_reltnps.htm#EOAHF00745
Kényszerek működése
Az adatbáziskezelő rendszer figyeli a felhasználók által megkísérelt adatmódosításokat (INSERT, DELETE, UPDATE, stb.) és ha azok megpróbálnák megszegni "a szabályt", akkor azt azonnal megakadályozza, az ilyen műveletek nem sikerülnek. A megszorítások nevét a felhasználó megadhatja, egyébként a rendszer generál egy azonosító nevet SYS_Cn formátumban. Hibajelzésekben jelenik meg ez a név, valamint használhatjuk azokat az ALTER TABLE utasításban is. A megszorítás állapotban a megszorítási szabályok működtetésével kapcsolatos dolgokat lehet definiálni, például be- vagy kikapcsolt (ENABLE, DISABLE) állapot. Alaphelyzetben a megszorítások be vannak kapcsolva.Általános alakja:[CONSTRAINT megszorítás_név] megszorítás [megszorítás_állapot]Bevezető példa: Dolgozó táblaCREATE TABLE Dolgozó (A_dolgozó_törzsszáma CHAR(7) PRIMARY KEY, Név VARCHAR(50),Fizetés DECIMAL(7,0) );A dolgozó törzsszáma maximum 7 karakter lehet és elsődleges kulcs, a név 50 karakter, a fizetés pedig maximum 7 jegyű egész szám.Töröljük ki majd hozzuk létre egy olyan korlátozással a táblát, hogy fizetésnek ne lehessen 100000 forintnál (minimálbérnél) kevesebbet megadni.DROP TABLE Dolgozó;CREATE TABLE Dolgozó (A_dolgozó_törzsszáma CHAR(7), Név VARCHAR(50), Fizetés DECIMAL(7,0) CHECK (Fizetés >100000));insert into Dolgozó (A_dolgozó_törzsszáma,Név,Fizetés) values ('1112222','Nagy Erika','200000');--->helyesinsert into Dolgozó (A_dolgozó_törzsszáma,Név,Fizetés) values ('1112222','Nagy Erika','40000');--->nem fogja engedni, mert kisebb fizetés van megadva a minimálbérnélForrás:http://aries.ektf.hu/~holovacs/AB/4_SQL_1.htm#s44http://www.inczedy.hu/~szikszai/adatbazis/sql1.pdfelőadás diáisaját példa
aKényszerek ellenőrzése
A kényszerek ellenőrzése különböző módon történik, a kényszertől függően.NOT NULL: beszúrni kívánt sor értékeinek az ellenőrzéseCHECK: beszúrni kívánt sor értékeinek az ellenőrzésePRIMARY KEY: egyedi indexek segítségévelUNIQUE: egyedi indexek segítségévelAz indexek automatikusan létrejönnek a CONSTRAINT létrehozásának eredményeképpen. (Következő óra)A legnagyobb kihívás a több felhasználó által egyidőben végrehajtott módosítások ellenőrzése jelenti. A FOREIGN KEY megszorítást a különböző adatbázis kezelő rendszerek más-más módon biztosítják. Egyes rendszereknél ilyenkor is kötelező az index (a külső kulcson) még másoknál csak ajánlott.Forrás:Előadás diái
Opcionális lehetőségek
A különböző adatbáziskezelő rendszerek más-más módon végzik a kényszerek ellenőrzését.Ha azonnal a DML utasítás végén ellenőrzik a kényszert, akkor ha megpróbálnánk megszegni, hibaüzenetet kapunk, a DML utasítás elutasításra kerül.Ha az ellenőrzés csak a tranzakció végén történik, akkor akár bevihetünk előbb gyerek adatot és utána szülő adatot.Forrás:Előadás diái
Oracle
Az Oracle azonnal, a DML utasítás végén ellenőrzi a kényszert.példa:RÉSZLEGEK tábla RÉSZLEG_ID-ra hivatkozik a MUNKASOK tábla RÉSZLEG_ID-ja. MUNKASOK Táblában nem tudok adatot feltölteni addig, míg legalább egy RÉSZLEG_ID-t nem adtam meg a RÉSZLEGEK táblában. (Aki akarja kipróbálhatja)(És ezután is csak olyat lehet megadni ami megtalálható.)CREATE TABLE RESZLEGEK(RÉSZLEG_ID NUMBER(4)PRIMARY KEY,RÉSZLEG_NÉV VARCHAR(30));CREATE TABLE MUNKASOK (MUNKAS_ID NUMBER(6),nev varchar(20), RÉSZLEG_ID NUMBER(4),CONSTRAINT MUNKASOK_RESZLEGEK_FK FOREIGN KEY (RÉSZLEG_ID) REFERENCES RESZLEGEK(RÉSZLEG_ID));Forrás:Előadás diáiSaját példa
Amit nem lehet kényszerrel
Bonyolultabb megszorításokat nem mindig lehet kényszerekkel megadni.Példa: A dolgozó fizetése nem lehet több, mint a főnökének a fizetése.Ha nem megoldható valami deklaratív szabályokkal, akkor programkódokkal kell. Erre alkalmasak az adatbázis triggerek.*Triggerek a következő óráknak az anyaga lesz, akit érdekel:https://docs.oracle.com/cd/A57673_01/DOC/server/doc/SCN73/ch15.htmForrás:Előadás diái
Trigger
A triggerek olyan speciális eljárások egy adatbázisban, amelyeket az INSERT, UPDATE, DELETE, TRUNCATE parancsok végrehajtások előtt, után vagy helyett hív meg a rendszer. A trigger vagy engedélyezheti vagy elvetheti az adott táblán történt módosításokat, naplózási feladatokat végezhet, járulékos módosításokat hajthat végre az adatbázisban.Fajtái: BEFORE-trigger INSTEAD OF-trigger AFTER-triggerFontos tudni, hogy egy táblázathoz parancsonként csak egy trigger rendelhető hozzá. Ez azt jelenti, hogy egy táblához legfeljebb három trigger készíthető el (INSERT, UPDATE, DELETE). Persze lehetőség van arra is, hogy egy trigger ne csak egy parancsnál legyen aktiválva. Előfordulhat, hogy például az INSERT és UPDATE parancsoknál történő ellenőrzések (szinte) megegyeznek: ilyenkor nem szükséges két triggert írni, hiszen az ellenőrzést eggyel is meg lehet oldani.*Ez későbbi előadások anyagaForrás:https://hu.wikipedia.org/wiki/Trigger_(adatb%C3%A1zisok)
Drop Table
DROP TABLE utasítással törülhetünk egy korábban létrehozott táblát.formája:DROP TABLE table_name; forrás:https://www.tutorialspoint.com/sql/sql-drop-table.htm
Használható
Ha nem hivatkozik a táblánkra semmi, szabadon törölhetjük a táblát.Példa:CREATE TABLE Dolgozó (A_dolgozó_törzsszáma CHAR(7) PRIMARY KEY, Név VARCHAR(50),Fizetés DECIMAL(7,0) );DROP TABLE Dolgozó; -->törlődik a tábla
Nem használható
Fontos, hogy szülő tábla nem dobható el Foreign Key megszorításban.példa:A következő esetben a RESZLEGEK táblát nem tudjuk DROP utasítással törölni, mert a MUNKASOK tabla hivatkozik rá.CREATE TABLE RESZLEGEK(RÉSZLEG_ID NUMBER(4)PRIMARY KEY,RÉSZLEG_NÉV VARCHAR(30));CREATE TABLE MUNKASOK (MUNKAS_ID NUMBER(6),VEZETEKNEV VARCHAR(30),KERESZTNEV VARCHAR(30), LAKCIM VARCHAR(50), RÉSZLEG_ID NUMBER(4)REFERENCES RESZLEGEK(RÉSZLEG_ID));DROP TABLE RESZLEGEK; -->nem fut leAzonban ha előbb eldobjuk a MUNKASOK táblát, utána már szabadon eldobhatjuk a RESZLEGEK táblát is.DROP TABLE MUNKASOK; -->lefutDROP TABLE RESZLEGEK; -->lefutForrás:Saját példa
Kényszerek létrehozása
Kényszert létrehozhatunkTábla létrehozása során (CREATE TABLE)Tábla módosítása során (ALTER TABLE)A kényszerek aTábla definíció részei (tábla szintű kényszer)Tábla oszlopa definíciójának a részei (oszlop szintű kényszer)Nem minden értékkorlátozást lehet kényszerrel megadni.Forrás:előadás diái
Create Table
Már a tábla létrehozásának pillanatában is létrehozhatunk kényszereket, mellyel biztosítjuk, hogy az adatok feltöltése során nem kerülhet be a táblába biztosan hibás adat.Általános formája:CREATE TABLE table_name ( column1 datatype null/not null, column2 datatype null/not null, ... CONSTRAINT constraint_name CHECK (column_name condition) [DISABLE] ); példa:CREATE TABLE suppliers ( supplier_id numeric(4), supplier_name varchar2(50), CONSTRAINT check_supplier_id CHECK (supplier_id BETWEEN 100 and 9999) ); A suppliers táblában a supplier_id nem lehet 100nál kisebb és 9999nél nagyobb, (mert mondjuk nem létezik ilyen), akkor nem fogja engedni ezeknek a hozzáadását a CHECK kényszer miatt.Forrás:https://www.techonthenet.com/oracle/check.php
Alter Table
Miután már létrehoztunk egy táblát, utólag is hozzáadhatunk kényszereket.Általános alak:ALTER TABLE table_name ADD CONSTRAINT constraint_name CHECK (column_name condition) [DISABLE]; Példa:ALTER TABLE suppliers ADD CONSTRAINT check_supplier_name CHECK (supplier_name IN ('IBM', 'Microsoft', 'NVIDIA')); Itt a check_supplier_name CONSTRAINT biztosítja, hogy a supplier_name oszlop értékei csak IBM, Microsoft vagy NVIDIA lehessen.Forrás:https://www.techonthenet.com/oracle/check.php
Enable Constarint
Alapbeállítás esetén a CONSTRAINT ENABLED (engedélyezve) állapotban található, de ha DISABLED (nincs engedélyezve) állapotban van, akkor engedélyezni kell, hogy érvényesüljön.Formája:ALTER TABLE table_name ENABLE CONSTRAINT constraint_name; Példa:A supplier táblában a supplier_id a primary key. Products táblában fk_supplier néven létrehoztunk egy idegen kulcsot, mely a supplier tábla supplier_id mezőjére mutat. Ezt a végén ENABLE-vel engedélyeztük.CREATE TABLE supplier ( supplier_id numeric(10) not null, supplier_name varchar2(50) not null, contact_name varchar2(50), CONSTRAINT supplier_pk PRIMARY KEY (supplier_id) ); CREATE TABLE products ( product_id numeric(10) not null, supplier_id numeric(10) not null, CONSTRAINT fk_supplier FOREIGN KEY (supplier_id) REFERENCES supplier(supplier_id) ); ALTER TABLE products ENABLE CONSTRAINT fk_supplier; Forrás:https://www.techonthenet.com/oracle/foreign_keys/enable.php
Disable Constraint
Alapbeállítás esetén a CONSTRAINT ENABLED (engedélyezve) állapotban található, de ha nem akarjuk engedélyezni, akkor a DISABLE-lel tudjuk ezt megtenni.Formája:ALTER TABLE table_name DISABLE CONSTRAINT constraint_name; Példa:A supplier táblában a supplier_id a primary key. Products táblában fk_supplier néven létrehoztunk egy idegen kulcsot, mely a supplier tábla supplier_id mezőjére mutat. Ezt a végén a DISABLE utasítással felfüggesztettük.CREATE TABLE supplier ( supplier_id numeric(10) not null, supplier_name varchar2(50) not null, contact_name varchar2(50), CONSTRAINT supplier_pk PRIMARY KEY (supplier_id) ); CREATE TABLE products ( product_id numeric(10) not null, supplier_id numeric(10) not null, CONSTRAINT fk_supplier FOREIGN KEY (supplier_id) REFERENCES supplier(supplier_id) ); ALTER TABLE products DISABLE CONSTRAINT fk_supplier; Forrás:https://www.techonthenet.com/oracle/foreign_keys/disable.php
Drop Constraint
DROP CONSTRAINT-el törülhetünk korábban létrehozott függőséget/korlátot.Fontos, hogy Primary Key/Unique Constraint nem dobható el, ha foreign key megszorításban hivatkozunk rá.Formája:ALTER TABLE table_name DROP CONSTRAINT constraint_name; Példa:A supplier táblában a supplier_id a primary key. Products táblában fk_supplier néven létrehoztunk egy idegen kulcsot, mely a supplier tábla supplier_id mezőjére mutat. Ezt a végén a DROP utasítással töröltük.CREATE TABLE supplier ( supplier_id numeric(10) not null, supplier_name varchar2(50) not null, contact_name varchar2(50), CONSTRAINT supplier_pk PRIMARY KEY (supplier_id) ); CREATE TABLE products ( product_id numeric(10) not null, supplier_id numeric(10) not null, CONSTRAINT fk_supplier FOREIGN KEY (supplier_id) REFERENCES supplier(supplier_id) ); ALTER TABLE products DROP CONSTRAINT fk_supplier; Forrás:https://www.techonthenet.com/oracle/foreign_keys/drop.phpElőadás diái
Kényszerek szerepe
A kényszerek a táblákra/azok oszlopaira vonatkozó szabályok.Biztosítják az adatbázis konzisztenciáját, hogy használható legyen az adatbázis, logikai ellentmondásokat ne tartalmazzon.(biztosítják, hogy az adatbázis módosítások ne eredményezhessenek helytelen sorokat a relációban.)Deklarációk, tehát a DDL (Data definition language) részei szintaktikailag.Többfelhasználós környezetben és tranzakciós működés során (az egyidejű módosítások következtében) sok probléma merül fel ekörül.Forrás:http://www.inczedy.hu/~szikszai/adatbazis/sql1.pdfElőadás diái
kényszerek biztosítása
Betartásukat az RDBMS (Relational database management system) automatikusan biztosítja. Nem enged meg olyan adatbázis műveleteket, amelyek révén az adatok a szabályokat megszegnék.A relációsadatbázis-kezelő rendszer (angol rövidítéséből: RDBMS) egy olyan adatbázis-kezelő rendszer ,amelynek logikai adatbázisát szoftverkomponensei kizárólag a relációs adatmodellek elvén épülnek fel, illetve kérdezhetőek le. Más szavakkal kifejezve: az RDBMS kizárólag az relációs adatmodell alapú megközelítést támogatja. Amennyiben más adatmodell is kiszolgálható ilyen rendszerrel, úgy a kapcsolódó adatmodell függvényében objektumrelációs, illetve deduktív relációs adatbázisról beszélhetünk. A relációsadatbázis-kezelő rendszerek szabványos adat hozzáférési és adatdefiníciós nyelve az SQL.Forrás:https://hu.wikipedia.org/wiki/Rel%C3%A1ci%C3%B3sadatb%C3%A1zis-kezel%C5%91_rendszer