Integritätsbedingungen mit CREATE TABLE

SQLer2014

Neuer Benutzer
Beiträge
1
Hallo,

sehe ich das richtig, dass es keine Möglichkeit gibt, folgende Situation mit einer Integritätsbedingungen, die man im Rahmen des Create Table Befehls angegeben kann, zu berücksichtigen?

Ich habe zwei Tabellen:
Gebäudeart(Bezeichnung, ....)
Gebäude(Nummer, Höhe, Gebäudeart.Bezeichnng, ...)

Sachverhalt:
Ich möchte, dass Gebäude nur eine Höhe von mehr als 200m haben dürfen, wenn die Bezeichnung "Hochhaus" entspricht.

Ich habe folgendes geschrieben:
HOEHE INTEGER CONSTRAINT PR_HOEHE CHECK ((HOEHE >= 200 and BEZEICHNUNG = 'Hochhaus') or (HOEHE < 200 and BEZEICHNUNG <> 'Hochhaus'))

Was aber nicht funktioniert.

In Hoffnung auf Hilfe,

viele Grüße
 
Zuletzt bearbeitet:
Werbung:
Hallo,

sehe ich das richtig, dass es keine Möglichkeit gibt, folgende Situation mit einer Integritätsbedingungen, die man im Rahmen des Create Table Befehls angegeben kann, zu berücksichtigen?

Korrekt.

MySQL akzeptiert zwar CHECK-Constraints, beachtet diese aber nicht. In PG geht es:

Code:
test=# create table haus (typ text, hoehe int, check(case when typ != 'hochhaus' then hoehe < 200 end));
CREATE TABLE
Time: 53,627 ms
test=*# insert into haus values ('hochhaus', 500);
INSERT 0 1
Time: 0,378 ms
test=*# insert into haus values ('hütte', 500);
ERROR:  new row for relation "haus" violates check constraint "haus_check"
DETAIL:  Failing row contains (hütte, 500).
 
Werbung:
Zurück
Oben