Frage über CHECK

Lei0812

Grünschnabel
Hallo,

kann jemand mir sagen, ob das folgende Befehl richtig ist?

Alter table STANDORT add constraint ck1_STANDORT CHECK (trasse IN (decode (trasse,'h','Haupttrassenstandort','n','Normaltrassenstandort')));

Ich bin für jede Antwort sehr dankbar.
 
Hallo,

Was möchtest du erreichen? Jetzt mal unabhängig von der Definition des Constraints.
Rein syntaktisch ist das Statement richtig.
Aber im Moment testet du auf die gleiche Spalte. Falls das so gewünscht ist, sind im Moment nur die Werte "Hauptstrassenstandort" und "Normalstrassenstandort" gültige Werte für die Spalte "trasse". Ich glaub du möchtest aber was anderes erreichen.

Markus
 
Hallo Markus,

vielen Dank für deine Antwort. Ich möchte eine Gültigkeitsregel für diese Spalte anlegen und möchte auch dazu zeigen, was genau die Abkürzungen bedeuten. Ist so in Ordnung?

Viele Grüsse
 
Hallo,

leider nein, da die Abkürzungen selbst keine gültigen Spalteneinträge sind.

Ich sehe zwei Möglichkeiten das ganze sinnvoll zu lösen:

1) neue Tabelle erzeugen für die Einträge, die deine Spalte annehmen kann. Dort trägst du dann sowohl die Abkürzungen an wie auch den Text dazu. Die Abkürzuung bildet den Primärschlüssel. Dann legst du auf deine Spalte "trasse" einen Fremdschlüssel. Dann kannst du über Joins jederzeit den Text zu deiner "Abkürzung" herausfinden und stellst gleichzeitig sicher, dass keine anderen Werte eingegeben werden dürfen.

SQL:
CREATE TABLE trassentypen
(  
   typKuerzel      VARCHAR2(2) PRIMARY KEY,
   typBeschreibung VARCHAR2(50)
);

INSERT INTO trassentypen (typKuerzel,typBeschreibung) VALUES ('H','Haupttrasse');
INSERT INTO trassentypen (typKuerzel,typBeschreibung) VALUES ('N','Nebentrasse');


ALTER TABLE standort ADD constraint fk_trassentypen FOREIGN KEY (trasse) REFERENCES trassentypen (typKuerzel);

2. Wenn es Dir "nur" darum geht, dass der Spalteninhalt dokumentierrt ist, dann machst du folgendes:

SQL:
ALTER TABLE standort ADD CONSTRAINT ck1_STANDORT CHECK ( trasse IN('H','N') );

COMMENT ON COLUMN standort.trasse IS 'Trassentyp: H=Haupttrasse, N=Nebentrasse';

Markus
 
Zurück