Sie sind auf Seite 1von 6

Datenbank Contraints

Es sind Datenprfungen, die die Datenintegritt sicherstellen. Sie werden auf deklarativer Ebene direkt auf den Objekten angelegt. DEFAULT (16-6) Bestimmt den Wert fr ein Attribut, falls fr dieses im INSERT-Statement kein Wert mitgeliefert oder das Keywort DEFAULT angegeben wird. Beim UPDATE knnen Werte auf DEFAULT zurckgesetzt werden
Bsp.: Definition beim CREATE CREATE TABLE job_definition ( job_nr NUMBER(3), job_description VARCHAR2(50), visum_aenderung VARCHAR2(30) DEFAULT USER; datum_aenderung DATE DEFAULT SYSDATE ); Bsp.:Nachtrglich mit ALTER TABLE ALTER TABLEjob_definition ( visum_aenderung DEFAULT USER; datum_aenderung DEFAULT SYSDATE ); Bsp.:INSERT-Statements, die dem fr Attribute mit definierter DEFAULT Constraints kein Wert bergeben wird INSERT INTO job_definition VALUES (2, Analytiker, DEFAULT, DEFAULT); Bsp.:INSERT-Statements, bei dem fr Attribute mit definierter DEFAULT Constraints das Keyword DEFAULT bergeben wird INSERT INTO job_definition VALUES (2, Programmierer); Bsp.:UPDATE-Statement, bei dem auf dem DEFAULT-Wert zurckgesetzt wird UPDATE job_definition SET visum_aenderung = DEFAULT, datum_aenderung = DEFAULT;

NOT NULL (16-12)

Stellt sicher, dass in einem Attribut keine NULLWerte erlaubt sind


Bsp.: Definition beim CREATE TABLE CREATE TABLE emp ( empno number(4) not null, ename varchar2(10) not null, ---); Bsp.: Nachtrglich mit ALTER TABLE ALTER TABLE emp MODIFY ( job NULL, hiredate NOT NULL);

CHECK (16-14)

Die Constraint CHECK erlaubt, den Inhalt in einem Attribut zu berprfen.


ALTER TABLE firma_t ADD CONSTRAINT fir_abk_ck CHECK (fir_abk_k = UPPER (fir_abk_k));

ALTER TABLE firma_budget_t ADD CONSTRAINT fbu_betrag_ck CHECK (fbu_betrag >= 0); ALTER TABLE release_t ADD CONSTRAINT rel_eingefroren_ck CHECK (rel_eingefroren IN (J, N, F)); ---------------- (siehe 16-16)

UNIQUE (16-17)

berprft, dass in einer Spalte einer Tabelle alle Werte eindeutig bleiben.
Erstellen einer UNIQUE-Constraint mit Storage-klausel ALTER TABLE dept ADD CONSTRAINT dept_dname_un UNIQUE (dname) USING INDEX STORAGE (INITIAL 100 K NEXT 100 K): TABLESPACE kurse; Verwaltung von UNIQUE-Constraints ALTER TABLE dept DISABLE CONSTRAINT dept_dname_un; ALTER TABLE dept ENABLE CONSTRAINT dept_dname_un; USING INDEX STORAGE (INITIAL 100 K NEXT 100 K): TABLESPACE kurse; ALTER TABLE dept DISABLE CONSTRAINT dept_dname_un KEEP INDEX; Verwaltung von UNIQUE-Constraints ALTER TABLE dept DISABLE CONSTRAINT dept_dname_un CASCADE;

PRIMARY KEY (16-20)

Funktioniert sehr hnlich wie eine UNIQUEConstraint, mit folgenden Unterschieden: pro Tabelle darf nur eine PRIMARY KEY-Constraint existieren, NULL-Werte sind nicht erlaubt.
Erstellung einer PRIMARY KEY-Constraint ALTER TABLE emp ADD CONSTRAINT emp_primary_key PRIMARY KEY (empno) USING INDEX STORAGE (INITIAL 100 K NEXT 100 K) TABLESPACE kurse; Verwaltung einer PRIMARY KEY-Constraint ALTER TABLE emp DISABLE PRIMARY KEY CASCADE; ALTER TABLE emp DROP CONSTRAINT emp_primary_key CASCADE;

FOREIGN KEY (16-22) berprft Daten-Abhngigkeiten zwischen Tabellen oder innerhalb der gleichen Tabelle; Definition der referenziellen Integritt. Referenziert PK oder UNIQUE Constraint einer

anderen oder gleichen Tabelle.


Definition einer FOREIGN KEY-Constraint mit expliziter Angabe des referenzierten PK-Attributs: ALTER TABLE emp ADD CONSTRAINT emp_foreign_key FOREIGN KEY (deptno) REFERENCES dept(deptno); Definition einer FOREIGN KEY-Constraint mit Angabe der Option ON DELETE CASCADE, damit alle Details mitgelscht werden, falls der Master gelscht wird. ALTER TABLE emp ADD CONSTRAINT emp_foreign_key FOREIGN KEY (deptno) REFERENCES dept(deptno) ON DELETE CASCADE; Wenn nur die Master-Tabelle angegeben wird, sucht sich ORACLE selbst den PK auf der Master-Tabelle. ALTER TABLE emp ADD CONSTRAINT emp_foreign_key FOREIGN KEY (deptno) REFERENCES dept; Definition einer FOREIGN KEY-Constraint mit Angabe der Option ON DELETE SET NULL, damit alle Details auf NULL gesetzt werden, falls der Master gelscht wird. ALTER TABLE emp ADD CONSTRAINT emp_foreign_key FOREIGN KEY (deptno) REFERENCES dept(deptno) ON DELETE SET NULL;

FOREIGN KEY mit exklusiver Beziehung (16-26)

Die FK-Constraints mssen zustzlich mit einer CHECK-Constraint definiert werden. Die CHECKConstraints stellt sicher, dass nur die eine oder andere Beziehung mglich ist.
Definition der beiden FK-Constraints: ALTER TABLE emp ADD CONSTRAINT emp_foreign_key FOREIGN KEY (deptno) REFERENCES dept; ALTER TABLE emp ADD CONSTRAINT emp_abteilung_key FOREIGN KEY (abtno) REFERENCES abteilung; Mit einer CHECK-Constraint muss zustzlich berprft werden, dass nur eine der beiden Beziehungen aktiv ist: ALTER TABLE emp ADD CONSTRAINT emp_dept_excl_abt_ck CHECK ( (detpno IS NOT NULL AND and abtno IS NULL) OR (detpno IS NULL AND and abtno IS NOT NULL));

View Contraints Deklaration der Constraints UNIQUE, PK, FK auf Views sind mglich. Sie sind nur deklarativ und werden nicht geprft. Die definition von View Constraints erlaubt es Query Tools Beziehungen zwischen Views zu erkennen. Einschalten von Contraints auf bestehende Daten Einschalten => Constraints (16-31) Daten werden berprft und knnen Contraints verletzen

ALTER TABLE emp ADD CONSTRAINT emp_sal_ck CHECK (sal > 1000) EXCEPTIONS INTO exceptions; Identifikation der fehlenden Stze mit einem JOIN zwischen emp und der Fehlertabelle exceptions. SELECT emp.ename, emp.sal, emp.ROWID FROM emp, exceptions WHERE emp.rowid = exceptions.row_id; Eine View, die Daten der Mitarbeiter der eigenen Abteilung selektiert, in diesem Fall fr User SCOTT: CREATE OR REPLACE VIEW myemps AS SELECT * FROM emp WHERE deptno = (SELECT deptno FROM emp WHERE ename = USER); Es ist mglich die Daten ber die View zu ndern, die spatter ber die View nicht selektiert werden knnen INSERT INTO myemps (empno, ename, job, hiredate, sal, deptno) VALUES (4711, MEIER, ANALYST, SYSDATE, 3000, 30); Lsung des Problems mit CHECK OPTION CREATE OR REPLACE VIEW myemps AS SELECT * FROM emp WHERE deptno = (SELECT deptno FROM emp WHERE ename = USER) WITH CHECK OPTION;

CHECK OPTION (16-32)

READ ONLY OPTION (16-36)

nderung ber eine VIEW sollen nicht zugelassen werden


CREATE OR REPLACE VIEW emp30 AS SELECT * FROM emp WHERE deptno = 30 WITH READ ONLY;

Deferred Contraints Constraints, die per Default bei jedem Statement geprft werden (INITIALLY IMMEDIATE). Constraints, die erst zum Zeitpunkt berprft werden (DEFERRED). ber Deferred Constraints wird ein Update Cascade mglich. Deferred Constraints - INITIALLY IMMEDIATE (NOT DEFERRABLE): (16-40) Default - DEFERRABLE (INITIALLY IMMEDIATE): Deferred gilt nur fr die eigene Session, automatische Zurcksetzung auf INITIALLY IMMEDIATE am Ende der Transaktion. - DEFERRABLE (INITIALLY DEFERRED): Constraint defaultmssig DEFERRED, Prfung immer erst beim COMMIT
Status einer Constraint ndern: ALTER TABLE emp MODIFY CONSTRAINT fk_deptno

INITIALLY DEFERRED;

Ein Constraint mir Status NOT DEFERRABLE kann nicht auf DEFERRABLE umgestellt werden.
Bsp.: UPDATE Cascade (16-41) ALTER TABLE emp ADD CONSTRAINT fk_deptno FOREIGN KEY (deptno) REFERENCES dept DEFERRABLE; SET CONSTRAINT fk_deptno DEFERRED; UPDATE dept SET deptno = 21 WHERE deptno = 20; UPDATE emp SET deptno = 21 WHERE deptno = 20; COMMIT Ohne den DEFERRABLE kann man den Update auf dept nicht machen, da die referenzielle Integritt verletzt wre. Eine Fehlermeldung wird kommen, da der aktueller status auf INITIALLY IMMEDIATE ist.

SET CONSTRAINT (16-41)

Mit diesem Befehl, kann jederzeit geprft werden, ob ein COMMIT mglich wre oder nicht.
Bsp.: alle auf DEFERRED nderbaren Constraints knnen mit einem Befehl auf DEFERRED gesetzt werden: SET CONSTRAINT ALL DEFERRED Bsp.: berprfung einer bestimmten Constraint SET CONSTRAINT fk_deptno IMMEDIATE Bsp.: berprfung aller Constraints SET CONSTRAINT ALL IMMEDIATE Bsp.: Falls die Daten fehlerhaft sind resp. die Constraints nicht erfllen, passiert kein ROLLBACK. Ein COMMIT wrde in diesem Fall ein ROLLBACK forcieren UPDATE dept SET deptno = 21 WHERE deptno = 20; berprfung, ob die Daten konsistent sind (kein ROLLBACK) SET CONSTRAINT fk_deptno IMMEDIATE Da die Daten jetzt nicht konsistent sind, muss nun das UPDATE auf emp gemacht werden. Danach wird wieder geprft und dann COMMIT ausgelst.

Deferred und Cascade-Action (1643)

Deferred ist nur fr die Prfung gltig, eine Constraint-Action (CASCADE) wird sofort durchgefhrt.
ALTER TABLE emp ADD CONSTRAINT fk_deptno FOREIGN KEY (deptno) REFERENCES dept ON DELETE CASCADE INITIALLY DEFERRED;

Das DELETE CASCADE wird umgehend ausgefhrt:


DELETE FOM dept WHERE deptno = 10;

Contraints Administration Eine Constraint kann enabled (ENABLE), disabled (DISABLE) oder enforced (ENABLE NOVALIDATE) sein. Erstellen der Tabelle mit einer aktiven Constraint Enforced Constraint ALTER TABLE emp (16-48)
ADD CONSTRAINT check_sal CHECK( sal > 0 AND sal IS NOT NULL) INITIALLY IMMEDIATE, Constraint disablen, Datenload durchfhren ALTER TABLE emp DISABLE CONSTRAINT check_sal, UPDATE emp SET sal = NULL WHERE ename = KING;

DISABLE VALIDATE (16-50)

ENABLE NOVALIDATE (Enforced), ab diesem Zeitpunkt werden neue INSERTs/UPDATEs geprft. ALTER TABLE emp ENABLE NOVALIDATE CONSTRAINT check_sal; Erlaubt eine Constraint zu disablen und sicherzustellen, dass keine schreibende Transaktionen auf die Tabelle durchgefhrt werden knnen bis die Constraint wieder enabled (oder gedroppt) ist. ALTER TABLE dept DISABLE VALIDATE CONSTRAINT dept_primary_key CASCADE

Data Dictionary Gibt genaue Auskunft ber die gesetzten Constraints. DESC user_constraints

Das könnte Ihnen auch gefallen