Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Datenintegrität Referentielle Integrität create table

Ähnliche Präsentationen


Präsentation zum Thema: "Datenintegrität Referentielle Integrität create table"—  Präsentation transkript:

1 Datenintegrität Referentielle Integrität create table
Intgegritätsregeln

2 Referenzielle Integrität
Stehen zwei Relationen so miteinander in Beziehung, daß ein (Nicht-)Schlüssel-Attribut der einen Relation das Schlüssel-Attribut der anderen Relation ist, so muß das relationale Datenbanksystem dafür sorgen, daß die Beziehung zwischen den Relationen keinen undefinierten Zustand annimmt. Das DBMS garantiert einen definierten Zustand der Daten. Es sorgt dafür, dass dieser Zustand bei Änderungen am Datenbestand erhalten bleibt. Änderungswünsche werden von DBMS auf seine Auswirkungen auf den Datenbestand überprüft und zurückgewiesen, wenn sie den festgelegten Regeln widersprechen. Diese Regeln, die häufig auch „Geschäftsregeln“ genannt werden, beschreiben inhaltliche Zusammenhänge oder Bearbeitungsvorschriften der Daten. Sie werden einmal definiert und alle Anwendungsprogramme, die die Datenbestände bearbeiten, müssen sich daran halten. Es ist nicht möglich, die Daten anders, als durch die Geschäftsregeln definiert zu bearbeiten.

3 Beispiel Der Studiengang ist in der Studenten-Tabelle ein „Nicht-Schlüsssel“ und in „Regelstudienzeit-Tabelle“ ein Schlüssel. Das DBMS muß dies Inhalte der Tabellen konsistent halten. Die Anforderungen an die Konsistenz sind von den Anforderungen des Anwendungsprogramms abhängig. Fragen können sein: Was passiert, wenn sich ein Student für einen Studiengang immatrikuliert, der nicht in der Tabelle der Studiengänge steht? Kann ein Studiengang gelöscht werden, der noch von einem Studenten studiert wird? Was passiert, wenn ein Studiengang umbenannt wird? Die Abfrage nach der Regelstudienzeit eines Studenten sollte immer eindeutig beantwortet werden können.

4 Fremdschlüssel Ein Attribut einer Tabelle,
welches in einer anderen Tabelle das Schlüsselattribut ist, wird Fremdschlüssel genannt. Das gleiche gilt für eine Menge von Attributen. In dem vorangegangenen Beispiel hat die Tabelle ta_student die Attribute: Matrikelnummer, Studentenname, Adresse, Studiengang, Semester Die Tabelle ta_studiengang hat die Attribute: Studiengang, Regelstudienzeit Das Attribut „Studiengang“ in der Tabelle ta_student ist ein Fremdschlüssel, da es in der Tabelle ta_studiengang der Schlüssel ist. Für jeden Wert, den „Studiengang“ in der Tabelle ta_sudent muß es einen Eintrag in der Tabelle ta_studiengang geben.

5 Integritätsregeln Die Zusammenhänge zwischen Tabelleninhalten können der Datenbank bekannt gemacht werden. Die Datenbank sorgt dann dafür, dass diese Regeln beim Einfügen, Ändern und Löschen von Daten eingehalten werden. Es ist eine der wichtigsten Aufgabe eines Datenbanksystems, die definierten Integritätsregeln zu überwachen und Verstöße dagegen abzuweisen.

6 Beispiel Die Matrikel-Nr ist in der „Schließkarten-Tabelle“ ein „Nicht-Schlüssel“ Element Jutta, Emil und Fritz können sich noch nicht exmatrikulieren, da sie noch nicht ihre Schließkarten zurückgegeben haben. Es müssen also erst die Einträge in der „Schließkarten-Tabelle“ gelöscht werden, bevor der entsprechende Eintrag in der „Studenten-Tabelle“ gelöscht werden kann. Ein weiteres Beispiel ist ein Bankkunde: seine Adresse sollte erst gelöscht werden, wenn alle seine Konten ausgeglichen sind.

7 Integritätsregeln bei DELETE
Restricted Delete (Verbotenes Löschen) Ein Student wird exmatrikuliert und sein Eintrag gelöscht. Das ist nur möglich, wenn der Student die Schließkarten abgegeben hat, die ihm Zugang zu Sonderräumen ermöglichen. Das Löschen eines Datensatzes wird verboten, wenn in den abhängigen Tabellen passende Einträge sind. Diese Lösung wird gewählt, um ein Löschen zu verhindern, das auf Grund der Randbedingungen noch nicht erlaubt ist.

8 Beispiel Der Student Hans ist exmatrikuliert worden. In der „Noten-Tabelle“ wird seine Matikel-Nr durch „null“ ersetzt. In diesem Fall sollen die Noten des Studenten nicht gelöscht werden. Sie werden noch für statistische Auswertungen benötigt. Der Fremdschlüssel (Matr) wird auf null gesetzt. Jetzt sind die Daten anonymisiert, die Anschrift des Studenten kann gelöscht werden und ein Anwendungsprogramm bekommt keine Fehlermeldung, wenn es von der Tabelle ta_noten in die Tabelle ta_Adresse schauen will. Es ist in einigen DBMS möglich, daß ein (Teil-)Schlüssel die Null-Marke als Wert enthält. Dann darf der Schlüssel nicht als eindeutig definiert werden.

9 Integritätsregeln bei DELETE
Nullifies Delete (Nicht-definiert Löschen) Ein Student wird exmatrikuliert und sein Eintrag gelöscht. Die Einträge in seinen Noten werden auf null gesetzt und bleiben so zu statistischen Zwecken erhalten. Das Löschen eines Datensatzes wird auch zugelassen, wenn es Einträge in abhängigen Tabellen gibt. In diesen Einträgen wird dem Schlüssel die Null-Marke zugewiesen. Diese Lösung wird gewählt, wenn die betroffene Information eine eigene Existenzberechtigung hat. Die Art des Speicherns muß dann si gewählt werden, dass das Unterscheidungsmerkmal in der abhängigen Tabelle die Null-Marke bekommen darf. Einige DBMS verweigern dem Schlüssel einer Tabelle diese Möglichkeit.

10 Beispiel Zu jedem Studenten gibt es mindestens eine Adresse.
Ein Eintrag in der Adressen-Tabelle ist ohne einen Verweis zum dazugehörenden Studenten sinnlos. In diesem Fall ist der Schlüssel in der Studenten-Tabelle ein Teilschlüssel in der Adressen-Tabelle. Wenn ein Eintrag in der Studenten-Tabelle gelöscht wird, sollen die dazugehörenden Adressen automatisch gelöscht werden. Zu jedem Studenten gibt es mindestens eine Adresse.

11 Integritätsregeln bei DELETE
Cascades Delete (Verschachteltes Löschen): ein Student wird exmatrikuliert und sein Eintrag gelöscht. Dann werden alle dazugehörenden Adressen gelöscht. Diese Lösung wird gewählt, wenn Einträge in einer Tabelle keine eigene Existenzberechtigung haben und sie nur sinnvoll sind, wenn sie im Zusammenhang zu einem Eintrag in einer anderen Tabelle stehen.

12 create table CREATE TABLE command ::= CREATE TABLE schema. table (
column datatype DEFAULT expr ) table constraint , CREATE TABLE: Schlüsselwort, das den Befehl zum Anlegen einer Datenbanktabelle einleitet. schema: Der Ordnungsbegriff, unter dem die Tabelle angelegt wird, normalerweise die angemeldete Benutzerkennung. table: Tabellenname column: Spaltenname. Eine Tabelle kann bis zu 254 Spalten haben. datatype: Datentyp dieser Spalte. DEFAULT: Standardwert, den diese Spalte annimmt, wenn in einem Insert-Befehl kein Wert für diese Spalte angegeben wird. table constraint: Zwangsbedingungen für diese Tabelle. Der Sprachumfang von SQL umfasst nicht nur Befehle zum Manipulieren von Datenbeständen, sondern auch Befehle zum Bearbeiten der Strukturen des DBMS und zur Pflege des DBMS. VollständigeBeschreibung in: Oracle8 SQL Reference Release 8.0

13 Tabellen-Integritätsregeln
table_constraint::= CONSTRAINT constraint , UNIQUE | ( column ) PRIMARY KEY , FOREIGN KEY | ( column ) REFERENCES table , schema. ( column ) ON DELETE CASCADE CONSTRAINT: Schlüsselwort, das die Benennung eines Constraint (=Zwangsbedingung) einleitet, ist optional constraint: Name der Zwangsbedingung UNIQUE: in den angegebenen Spalten muß jeder Wert oder jede Kombination von Werten eindeutig sein PRIMARY KEY: Primärschlüssel FOREIGN KEY: Fremdschlüssel, die angegebene(n) Spalte(n) ist (sind) Primärschlüssel in einer anderen Tabelle. REFERENCES: gibt die Tabelle und deren Spalte(n) an, auf die sich der Fremdschlüssel bezieht. ON DELETE CASCADE: Wenn der Primärschlüssel gelöscht wird, werden in dieser Tabelle die Einträge mit dem entsprechenden Fremdschlüssel gelöscht. CHECK: Es können Prüfroutinen für eine oder mehrere Spalten angegeben werden, die beim Einfügen oder Ändern eines Wertes abgeprüft werden. CHECK condition

14 Anlegen von Tabellen CREATE TABLE ta_studiengang
(Studiengang varchar2(20), Regel number(2) NULL, CONSTRAINT pk_studiengang PRIMARY KEY (Studiengang) ); Die Tabelle "ta_studiengang" hat den Primärschlüssel "Studiengang". Die Werte dieser Spalte müssen eindeutig sein und dürfen nicht die Null-Marke enthalten.

15 Anlegen von Tabellen CREATE TABLE ta_student (Matrikel char(5),
Name varchar2(10), Adresse varchar2(10) null, Studiengang varchar2(20) null, Semester number(2) null, CONSTRAINT pk_student PRIMARY KEY (Matrikel), CONSTRAINT fk_student FOREIGN KEY (Studiengang) REFERENCES ta_studiengang(Studiengang) ); Die Tabelle ta_student bekommt damit folgende Spalten: Matrikel 5 Zeichen lang, kürzere Eingaben werden mit Leerzeichen aufgefüllt Name 10 Zeichen lang, es werden nur genau so viele Zeichen gespeichert, wie eingegeben Adresse Wie Name, es ist möglich, nichts einzugeben Studiengang Wie Adresse, nur maximal 20 Zeichen lang Semester 2 Ziffern lang. Die Tabelle "ta_student" hat die Spalte "Matrikel" als Primärschlüssel. Das Feld "Studiengang" in der Tabelle "ta_student" bezieht sich auf das Feld "ta_studiengang" der Tabelle "ta_studiengang". Es dürfen also in der Spalte "ta_student.Studiengang" nur Wert enthalten sein, die in "ta_studiengang.Studiengang" vorkommen.

16 Anlegen von Tabellen CREATE TABLE ta_pruefung (Matrikel char(5),
Vorlesung varchar2(10), Note number (2,1), CONSTRAINT pk_pruefung PRIMARY KEY (Matrikel, Vorlesung), CONSTRAINT fk_pruefung FOREIGN KEY (Matrikel) REFERENCES ta_student(Matrikel) ON DELETE CASCADE ); Die Tabelle ta_pruefung bekommt damit folgende Spalten: Matrikel 5 Zeichen lang, kürzere Eingaben werden mit Leerzeichen aufgefüllt Vorlesung 20 Zeichen lang, es werden nur genau so viele Zeichen gespeichert, wie eingegeben Note 2 Ziffern lang, davon eine Ziffer nach dem Dezimalkomma ON DELETE CASCADE bewirkt, dass in dieser Tabelle alle Einträge zu einer Matrikel gelöscht werden, wenn in der Tabelle ta_student ein Eintrag mit einer beistimmten Matrikelnummer gelöscht wird.

17 Datenmanipulation INSERT command ::= Update command ::=
, INSERT INTO table VALUES ( column ) Update command ::= UPDATE table SET column = expr WHERE condition DELETE command ::= INSERT INTO dieser Befehl fügt eine Zeile in die angegebene Tabelle ein. VALUES Liste der Werte, die in die Tabelle eingefügt werden soll. Es müssen genau soviel Wert in der Liste sein, wie Spalten in der Tabelle. UPDATE Dieser Befehl ändert eine Menge von Zeilen in einer Tabelle. SET Angabe der Spaltennamen und der geänderten Werte. WHERE Wie im SELECT Befehl; Angabe der Zeilen, die geändert werden sollen. DELETE Dieser Befehl löscht eine Menge von Zeilen aus einer Tabelle. WHERE Wie im SELECT Befehl; Angabe der Zeilen, die gelöscht werden sollen. DELETE table FROM schema. WHERE condition VollständigeBeschreibung in: Oacle 8.0: Server SQL Language ReferenceManual

18 Integritätsregeln bei INSERT
CREATE TABLE ta_studiengang (Studiengang varchar2(20), Regel number(2) NULL, CONSTRAINT pk_studiengang PRIMARY KEY (Studiengang)); CREATE TABLE ta_student (Matrikel char(5), Name varchar2(10), Studiengang varchar2(20) null, CONSTRAINT pk_student PRIMARY KEY (Matrikel), CONSTRAINT fk_student FOREIGN KEY (Studiengang) REFERENCES ta_studiengang(Studiengang)); INSERT INTO ta_studiengang VALUES ('Inf', 9); INSERT INTO ta_student VALUES ('98002','Emil',,'Inf‘); Die Tabelle ta_studiengang enthält alle erlaubten Studiengänge. Die Tabelle ta_student enthält für jeden Studenten seinen Studiengang. Es dürfen nur solche Studiengänge eingetragen werden, die auch in der Tabelle ta_studiengang enthalten sind. Ein neuer Studiengang muss also zuerst in die Tabelle ta_studiengang eingetragen werden, bevor ein Student mit diesem Eintrag in die Tabelle ta_student aufgenommen werden kann.

19 Integritätsregeln bei INSERT
SQL> insert into ta_studiengang 2 values ('Inf', 9); SQL> insert into ta_student 2 values('98002','Emil','WH1','FÜ',2); insert into ta_student * FEHLER in Zeile 1: ORA-02291: Verstoß gegen Integritätsregel (WORZYK.FK_STUDENT). Übergeordn. Schlüssel nicht gefunden Es ist nicht möglich, in die Tabelle "ta_student" einen Studiengang einzutragen, der in der Tabelle "ta_studiengang" nicht definiert ist. Bei dieser Fehlermeldung erweist sich ein Namenskonzept als sinnvoll. Wird in einem constraint kein Name angegeben, erzeugt ORACLE einen künstlichen Namen, der in der Regel in einer Fehlermeldung nicht zu deuten ist.

20 Beispiel ohne Namenskonzept
SQL> create table t1(spalte1 number, 2 primary key (spalte1)); SQL> create table t2 (spalte1 char, spalte2 number, 2 foreign key (spalte2) references t1(spalte1)); SQL> insert into t2 values ('a', 1); FEHLER in Zeile 1: ORA-02291: Verstoß gegen Integritätsregel (WORZYK.SYS_C004317). Übergeordn. Schlüssel nicht gefunden Die Fehlermeldung mit der Integritätsregel WORZYK.SYS_C ist nicht sehr aussagekräftig und kann erst interpretiert werden, wenn der entsprechende Systemkatalog befragt wird, der Auskunft über die Zusammenhänge gibt. Deshalb ist es sinnvoll, auch Zwangsbedingungen zu benennen und die Namen zu zu wählen, dass eine eventuelle Fehlermeldung aussagekräftig wird.

21 Integritätsregeln bei DELETE
SQL> insert into ta_student 2 values('98001','Jutta','WH1','Inf',2); SQL> insert into ta_pruefung 2 values('98001','Math',1.3); 2 values('98001','Prog',2.7); SQL> select * from ta_pruefung; MATRI VORLESUNG NOTE 98001 Math ,3 98001 Prog ,7 SQL> delete from ta_student 2 where Matrikel = '98001'; Es wurden keine Zeilen ausgewählt In der Tabelle "ta_pruefung" wurde die Spalte "Matrikel" als Fremdschlüsel mit dem Attribut "ON DELETE CASCADE" definiert. Wenn in der Tabelle "ta_student" ein Eintrag gelöscht wird, werden automatisch die dazugehörenden Einträge in der Tabelle "ta_pruefung" gelöscht.

22 Integritätsregeln bei UPDATE
SQL> update ta_studiengang set studiengang = 'Informatik' 2 where studiengang = 'Inf'; FEHLER in Zeile 1: ORA-02292: Verstoß gegen Integritätsregel (WORZYK.FK_STUDENT). Untergeordneter Datensatz gefunden. SQL> update ta_student set studiengang = 'Informatik' ORA-02291: Verstoß gegen Integritätsregel (WORZYK.FK_STUDENT). Übergeordn. Schlüssel nicht gefunden Die Definition von Integritätsregeln kann zu Blockaden führen, wenn man vesucht, einen Fremdschlüssel zu ändern. In diesem Beispiel soll der Studiengang ‚Inf‘ umbenannt werden in ‚Informatik‘: Erstes Update: In der untergeordneten Tabelle ta_student existiert ein Eintrag ‚Inf‘. Dazu würde es nach der Änderung keine Referenz mehr geben. Also darf der Eintrag ‚Inf‘ nicht entfernt werden. Zweites Update: In der übergeordneten Tabelle ta_studiengang existiert kein Eintrag ‚Informatik‘. Darum darf in die Tabelle ‚ta_student‘ nicht ‚Informatik‘ in die Spalte ‚Studiengang‘ eingetragen werden. Lösungsmöglichkeit: Die Integritätsregeln werden aus der ‚create table‘-Abweisung entfernt und durch Programme abgeprüft, die automatisch durch einen Tabelleneintrag aufgerufen werden (Trigger).

23 Anelgen und Löschen von Tabellen
DROP TABLE ta_student; DROP TABLE ta_studiengang; CREATE TABLE ta_studiengang Studiengang varchar2(20), Regel number(2) NULL, CONSTRAINT pk_studiengang PRIMARY KEY (Studiengang)); CREATE TABLE ta_student (Matrikel char(5), Studiengang varchar2(20) null, CONSTRAINT pk_student PRIMARY KEY (Matrikel), CONSTRAINT fk_student FOREIGN KEY (Studiengang) REFERENCES ta_studiengang(Studiengang)); Tabellen können nur ein einer sinnvollen Reihenfolge angelegt und gelöscht werden: Eine Tabelle mit einem FOREIGN KEY kann erst angelegt werden, wenn die Tabelle, auf die sie sich bezieht, bereite vorhanden ist. Eine Tabelle kann nur gelöscht werden, wenn es keine Tabelle mit einem FOREGN KEY gibt, der sich auf diese Tabelle bezieht. Es ist sinnvoll, Scripte (=ablauffähige Sammlung von Befehlen) für die Erstellung von Tabellen anzulegen. Mit Hilfe dieser Scripte können die Tabellen während der Entwicklungszeit leicht verändert werden und während der Produktionszeit im Fall einer Zerstörung schnell erstellt werden. Diese Scripte sollten mit einem „drop table“- Befehl eingeleitet werden. Dieser Befehl löscht die eventuell noch vorhandene alte Tabelle und richtet keinen Schaden an, wenn die Tabelle nicht mehr vorhanden ist. Unterbleibt dieser Befehl kann eine neue Tabelle mit dem gleichen Namen nicht angelegt werden, solange die alte Tabelle noch vorhanden ist. Werden mehrere Tabellen in einem Script angelegt, müssen die Abhängigkeiten der Tabellen in der Reihenfolge der „drop“- und „create“-Befehle berücksichtigt werden.

24 CHECK CREATE TABLE ta_pruefung (Matrikel char(5),
Vorlesung varchar2(10), Note number (2,1), CONSTRAINT pk_pruefung PRIMARY KEY (Matrikel, Vorlesung), CONSTRAINT fk_pruefung FOREIGN KEY (Matrikel) REFERENCES ta_student(Matrikel) ON DELETE CASCADE, CONSTRAINT check_note CHECK (note in (1.0, 1.3, 1.7, 2.0, 2.3, 2.7, 3.0)) ); Die Spalte ;note‘ darf nur einen der angegebenen Werte aufnehmen. Es ist möglich, beliebig komplizierte Berechnungen auch mit mehreren Spalten anzugeben.

25 CHECK Beispiel SQL> insert into ta_pruefung values('98001','Prog',3.7); FEHLER in Zeile 1: ORA-02290: Verstoß gegen CHECK-Regel (WORZYK.CHECK_NOTE) Die Regel prüft, ob eine der vorgegebenen Noten eingegeben wurde.

26 Zusammenfassung Referentielle Integrität sorgt für Datenkonsistenz
create table kann Integritätsregeln definieren Beispiele für insert delete update


Herunterladen ppt "Datenintegrität Referentielle Integrität create table"

Ähnliche Präsentationen


Google-Anzeigen