@@ -63,7 +63,7 @@ <h2 class="title" id="slide-0">
6363
6464
6565
66- < p > Ein Constraint kennen Sie schon:</ p >
66+ < p > Zwei Constraint kennen Sie schon:</ p >
6767
6868< div class ="example ">
6969< pre > < code class ="language-sql linenums "> sql> CREATE TABLE departments ( dep_name VARCHAR(20) PRIMARY KEY, … );
@@ -97,11 +97,71 @@ <h2 class="title" id="slide-0">
9797 Detail: Key (name)=(Marketing) already exists.
9898</ code > </ pre > </ div >
9999
100- < p > Der Primärschlüssel muss eindeutig sein. Das ist ein < strong > unique constraint </ strong > . </ p >
100+ < p > Der Primärschlüssel muss eindeutig sein.</ p >
101101
102102
103103< a class ="slide_break do-not-print " id ="slide-4 " href ="slide.html#slide-4 " title ="Wechsle zur Präsentations-Ansicht, Folie Nr. 4 "> ▻</ a >
104104
105+ < h2 id ="references "> References</ h2 >
106+
107+ < p > Was bedeutet die Fehlermeldung am Ende?</ p >
108+
109+ < div class ="example ">
110+ < pre > < code class ="language-sql linenums "> CREATE TABLE departments (
111+ dep_id SERIAL PRIMARY KEY,
112+ dep_name VARCHAR(20)
113+ );
114+ CREATE TABLE employees (
115+ name VARCHAR(20),
116+ dep_id integer NULL REFERENCES departments(dep_id)
117+ );
118+ INSERT INTO employees VALUES('Brigitte Jellinek', 99)
119+ [23503] ERROR: insert or update on table "employees"
120+ violates foreign key constraint "employees_dep_id_fkey"
121+ Detail: Key (dep_id)=(99) is not present in table "departments".
122+ </ code > </ pre > </ div >
123+
124+
125+ < a class ="slide_break do-not-print " id ="slide-5 " href ="slide.html#slide-5 " title ="Wechsle zur Präsentations-Ansicht, Folie Nr. 5 "> ▻</ a >
126+
127+ < h2 id ="referenzielle-integritt "> Referenzielle Integrität</ h2 >
128+
129+ < p > Mit einem < strong > foreign key constraint</ strong > kann man die Existenz des Fremdschlüssels
130+ in der anderen Tabelle sicher stellen.</ p >
131+
132+ < p > Hier verweist die Spalte < code > dep_id</ code > in der Tabelle < code > employees</ code > auf
133+ die Spalte < code > dep_id</ code > in der Tabelle < code > departments</ code > .</ p >
134+
135+ < p > < code > dep_id</ code > ist also der Primary Key von < code > departments</ code > und ein Foreign Key in < code > employees</ code > .</ p >
136+
137+ < p > Mit dem Keyword < code > REFERENCES</ code > wird diese Beziehung als Constrait festgelegt, es ist
138+ nicht möglich in < code > employees</ code > eine < code > dep_id</ code > zu benutzen, die in < code > departments</ code > nicht existiert.</ p >
139+
140+ < div class ="example ">
141+ < pre > < code class ="language-sql linenums "> CREATE TABLE departments (
142+ dep_id SERIAL PRIMARY KEY,
143+ dep_name VARCHAR(20)
144+ );
145+ CREATE TABLE employees (
146+ name VARCHAR(20),
147+ dep_id integer NULL REFERENCES departments(dep_id)
148+ );
149+ </ code > </ pre > </ div >
150+
151+ < p > Fremdschlüssel sind auch gute Kanditeten für einen Index: Wenn man
152+ die Abfrage machen will “Welche Leute arbeiten im Department 7” ist
153+ es gut einen Index auf < code > dep_id</ code > in < code > employees</ code > zu haben.</ p >
154+
155+
156+ < a class ="slide_break do-not-print " id ="slide-6 " href ="slide.html#slide-6 " title ="Wechsle zur Präsentations-Ansicht, Folie Nr. 6 "> ▻</ a >
157+
158+ < h2 id ="unique-constraint "> Unique Constraint</ h2 >
159+
160+ < p > Dass der Primärschlüssel eindeutig sein muss ist ein Beispiel für ein < strong > unique constraint</ strong > .</ p >
161+
162+
163+ < a class ="slide_break do-not-print " id ="slide-7 " href ="slide.html#slide-7 " title ="Wechsle zur Präsentations-Ansicht, Folie Nr. 7 "> ▻</ a >
164+
105165
106166
107167< p > Ein < strong > unique constraint</ strong > kann man auf eine beliebige Spalte anwenden:</ p >
@@ -115,7 +175,7 @@ <h2 class="title" id="slide-0">
115175</ code > </ pre > </ div >
116176
117177
118- < a class ="slide_break do-not-print " id ="slide-5 " href ="slide.html#slide-5 " title ="Wechsle zur Präsentations-Ansicht, Folie Nr. 5 "> ▻</ a >
178+ < a class ="slide_break do-not-print " id ="slide-8 " href ="slide.html#slide-8 " title ="Wechsle zur Präsentations-Ansicht, Folie Nr. 8 "> ▻</ a >
119179
120180
121181
@@ -137,7 +197,7 @@ <h2 class="title" id="slide-0">
137197</ code > </ pre > </ div >
138198
139199
140- < a class ="slide_break do-not-print " id ="slide-6 " href ="slide.html#slide-6 " title ="Wechsle zur Präsentations-Ansicht, Folie Nr. 6 "> ▻</ a >
200+ < a class ="slide_break do-not-print " id ="slide-9 " href ="slide.html#slide-9 " title ="Wechsle zur Präsentations-Ansicht, Folie Nr. 9 "> ▻</ a >
141201
142202< h2 id ="namen-fr-constraints "> Namen für Constraints</ h2 >
143203
@@ -158,59 +218,6 @@ <h2 id="namen-fr-constraints">Namen für Constraints</h2>
158218 "review_article_id_user_id_key" UNIQUE CONSTRAINT, btree (article_id, user_id)
159219</ code > </ pre > </ div >
160220
161-
162- < a class ="slide_break do-not-print " id ="slide-7 " href ="slide.html#slide-7 " title ="Wechsle zur Präsentations-Ansicht, Folie Nr. 7 "> ▻</ a >
163-
164- < h2 id ="references "> References</ h2 >
165-
166- < p > Was bedeutet die Fehlermeldung am Ende?</ p >
167-
168- < div class ="example ">
169- < pre > < code class ="language-sql linenums "> CREATE TABLE departments (
170- dep_id SERIAL PRIMARY KEY,
171- dep_name VARCHAR(20)
172- );
173- CREATE TABLE employees (
174- name VARCHAR(20),
175- dep_id integer NULL REFERENCES departments(dep_id)
176- );
177- INSERT INTO employees VALUES('Brigitte Jellinek', 99)
178- [23503] ERROR: insert or update on table "employees"
179- violates foreign key constraint "employees_dep_id_fkey"
180- Detail: Key (dep_id)=(99) is not present in table "departments".
181- </ code > </ pre > </ div >
182-
183-
184- < a class ="slide_break do-not-print " id ="slide-8 " href ="slide.html#slide-8 " title ="Wechsle zur Präsentations-Ansicht, Folie Nr. 8 "> ▻</ a >
185-
186- < h2 id ="referenzielle-integritt "> Referenzielle Integrität</ h2 >
187-
188- < p > Mit einem < strong > foreign key constraint</ strong > kann man die Existenz des Fremdschlüssels
189- in der anderen Tabelle sicher stellen.</ p >
190-
191- < p > Hier verweist die Spalte < code > dep_id</ code > in der Tabelle < code > employees</ code > auf
192- die Spalte < code > dep_id</ code > in der Tabelle < code > departments</ code > .</ p >
193-
194- < p > < code > dep_id</ code > ist also der Primary Key von < code > departments</ code > und ein Foreign Key in < code > employees</ code > .</ p >
195-
196- < p > Mit dem Keyword < code > REFERENCES</ code > wird diese Beziehung als Constrait festgelegt, es ist
197- nicht möglich in < code > employees</ code > eine < code > dep_id</ code > zu benutzen, die in < code > departments</ code > nicht existiert.</ p >
198-
199- < div class ="example ">
200- < pre > < code class ="language-sql linenums "> CREATE TABLE departments (
201- dep_id SERIAL PRIMARY KEY,
202- dep_name VARCHAR(20)
203- );
204- CREATE TABLE employees (
205- name VARCHAR(20),
206- dep_id integer NULL REFERENCES departments(dep_id)
207- );
208- </ code > </ pre > </ div >
209-
210- < p > Fremdschlüssel sind auch gute Kanditeten für einen Index: Wenn man
211- die Abfrage machen will “Welche Leute arbeiten im Department 7” ist
212- es gut einen Index auf < code > dep_id</ code > in < code > employees</ code > zu haben.</ p >
213-
214221 < div class ="pagination do-not-print ">
215222 < ul >
216223
0 commit comments