Constraints anlegen und löschen, Data Dictionary Tabellen
Constraints Integritätsregeln, die zum Beispiel beim Einfügen, Ändern und Löschen von Datensätzen eingehalten werden müssen Arten von Constraints Primary Key Constraints Foreign Key Constraints Unique Key Constraints Check Constraints
Primary Key Constraint Ein oder mehrere Spalten einer Tabelle werden als Primärschlüssel festgelegt Primärschlüssel Über Wert in Primärschlüssel-Spalte(n) kann jeder Datensatz eindeutig identifiziert werden LIB_BOOK LIB_BELONGS_TO_GENRE BOOK_ID TITLE CAT_ID YEAR 1 Schwarm 2000 2 Limit 2005 3 Erlösung 2006 4 Vergebung 2007 BOOK_ID GEN_ID 1 2 3 Primärschlüssel auf Spalte book_id Primärschlüssel auf Spalten book_id, gen_id
Primary Key Constraint BOOK_ID TITLE CAT_ID YEAR 1 Schwarm 2000 2 Limit 2005 Primärschlüssel bei Tabellenerzeugung anlegen Primärschlüssel nach Tabellenerzeugung hinzufügen CREATE TABLE lib_book ( book_id NUMBER(7), title VARCHAR2(40), cat_id NUMBER(2,0), year NUMBER(4,0), CONSTRAINT pkbook PRIMARY KEY(book_id) ); CREATE TABLE lib_book ( book_id NUMBER(7)CONSTRAINT pkbook PRIMARY KEY, title VARCHAR2(40), cat_id NUMBER(2,0), year NUMBER(4,0) ); ALTER TABLE lib_book ADD CONSTRAINT pkbook PRIMARY KEY (book_id);
Foreign Key Constraint Definiert einen Fremdschlüssel für eine Spalte einer Tabelle Fremdschlüssel-Spalte referenziert Primärschlüssel (bzw. Unique Key-Spalte) einer Tabelle LIB_BOOK LIB_CATEGORY BOOK_ID TITLE CAT_ID YEAR 1 Schwarm 2 2000 Limit 2005 3 Java 5 2006 4 Peter Pan 2007 CAT_ID CAT_NAME 1 Fachbuch 2 Roman 3 Kinderbuch REFERENZ Was passiert, wenn in LIB_BOOK-Tabelle Datensatz mit CAT_ID eingefügt wird, die nicht in LIB_CATEGORY vorhanden ist Datensatz wird nicht eingefügt, da FOREIGN KEY-Constraint verletzt wird Was passiert, wenn aus lib_category ein Eintrag gelöscht wird, dessen cat_id in lib_book referenziert wird? ON DELETE NO ACTION(default): Löschvorgang wird nicht durchgeführt ON DELETE CASCADE: In Buch-Tabelle werden referenzierende Einträge gelöscht ON DELETE SET NULL: In Buch-Tabelle wird referenzierende CAT-ID auf NULL gesetzt
Foreign Key Constraint LIB_BOOK LIB_CATEGORY BOOK_ID TITLE CAT_ID YEAR 1 Schwarm 2 2000 Limit 2005 3 Java 5 2006 4 Peter Pan 2007 CAT_ID CAT_NAME 1 Fachbuch 2 Roman 3 Kinderbuch REFERENZ Fremdschlüssel bei Tabellenerzeugung festlegen CREATE TABLE lib_book( book_id NUMBER(7), title VARCHAR2(40), cat_id NUMBER(2)CONSTRAINT fkcat REFERENCES LIB_CATEGORY(cat_id) ON DELETE SET NULL, year NUMBER(4,0) ); CREATE TABLE lib_book( book_id NUMBER(7), title VARCHAR2(40), cat_id NUMBER(2), year NUMBER(4,0), CONSTRAINT fkcat FOREIGN KEY(cat_id)REFERENCES LIB_CATEGORY(cat_id)ON DELETE SET NULL );
Foreign Key Constraint LIB_BOOK LIB_CATEGORY BOOK_ID TITLE CAT_ID YEAR 1 Schwarm 2 2000 Limit 2005 3 Java 5 2006 4 Peter Pan 2007 CAT_ID CAT_NAME 1 Fachbuch 2 Roman 3 Kinderbuch REFERENZ Fremdschlüssel nach Tabellenerzeugung festlegen ALTER TABLE lib_book ADD CONSTRAINT fkcat FOREIGN KEY(cat_id) REFERENCES lib_category(cat_id)ON DELETE SET NULL;
Foreign Key Constraint Weitere Constraint Clauses INITIALLY DEFFERED: Einhaltung des Constraints wird standardmäßig erst bei Commit geprüft INITIALLY IMMEDIATE: Einhaltung des Constraints wird standardmäßig direkt nach SQL-Befehl geprüft DEFERRABLE: Erlaubt, dass die Prüfung eines Contraints mit Hilfe des Befehls: SET CONSTRAINT constraint_name DEFFERED verzögert und erst am Ende einer Transaktion (COMMIT) durchgeführt wird … CONSTRAINT fkcat FOREIGN KEY(cat_id) REFERENCES lib_category(cat_id) ON DELETE CASCADE | ON DELETE SET NULL INITIALLY DEFERRED | INITIALLY IMMEDIATE DEFERRABLE;
UNIQUE KEY Constraint Wird für eine oder mehrere Spalten angelegt Bei einer Spalte: Jeder Wert in dieser Spalte muss eindeutig sein Bei mehreren Spalten: Jede Wertkombination in diesen Spalten muss eindeutig sein BOOK_ID TITLE CAT_ID YEAR 1 Schwarm 2000 2 Limit 2005 3 Erlösung 2006 UNIQUE KEY auf TITLE: Es dürfen keine zwei Bücher mit gleichem Titel eingetragen werden Unique Constraint bei Tabellenerzeugung anlegen CREATE TABLE lib_book ( book_id NUMBER(7), title VARCHAR2(40), cat_id NUMBER(2,0), year NUMBER(4,0), CONSTRAINT utitle UNIQUE(title) ); CREATE TABLE lib_book ( book_id NUMBER(7), title VARCHAR2(40) CONSTRAINT utitle UNIQUE, cat_id NUMBER(2,0), year NUMBER(4,0) ); Unique Constraint nach Tabellenerzeugung anlegen ALTER TABLE lib_book ADD CONSTRAINT utitlle UNIQUE(title);
Check Constraint Legt Regeln fest, die jeder Datensatz in einer Tabelle erfüllen muss Beispiel: Titel muss länger als 2 Zeichen sein und das Jahr darf nicht vor1900 liegen Check Constraint bei Tabellenerzeugung anlegen Check Constraint nach Tabellenerzeugung anlegen CREATE TABLE lib_book ( book_id NUMBER(7), title VARCHAR2(40), cat_id NUMBER(2,0), year NUMBER(4,0), CONSTRAINT chbook CHECK (length(title)>2 AND YEAR > 1900) ); ALTER TABLE lib_book ADD CONSTRAINT chbook CHECK(length(title)>2 AND YEAR > 1900);
Constraints löschen SYNTAX Beispiel ALTER TABLE tabellenname DROP CONSTRAINT constraintname; Beispiel Mit folgendem Befehl wird der Primary Key Constraint pkbook gelöscht, der für die Tabelle lib_book angelegt wurde. ALTER TABLE lib_book DROP CONSTRAINT pkbook;
CONSTRAINTS im Data Dictionary
Data Dictionary Tabellen USER_CONSTRAINTS beinhaltet alle Constraints des angemeldeten Users Wichtige Spalten CONSTRAINT_NAME: Name des Constraints R_CONSTAINT_NAME: Für Fremdschlüssel - Name des Constraints, der referenziert wird TABLE_NAME: Name der Tabelle, für die der Constraint definiert ist CONSTRAINT_TYPE: p:Primary Key, r: Foreign Key, c: Check Constraint, u: Unique Key SEARCH_CONDITION: Für Check Constraints: zu überprüfende Bedingung USER_CONS_COLUMNS Beinhaltet Spalten, für die Constraints des angemeldeten Users definiert sind CONSTRAINT_NAME: Name des Constraints TABLE_NAME: Name der Tabelle, für die der Constraint definiert ist COLUMN_NAME: Spalte, für die der Constraint definiert ist