Ich habe eine Tabelle mit Telefonnummern, die einer Firma gehören, und eine Tabelle mit Anruflisten. Jeder Anrufdatensatz enthält Quell- und Zielnummern (nicht null). Ich habe die Integritätsbedingung, dass entweder die Quellnummer oder die Zielnummer, aber nicht beide, Nummern sein dürfen, die nicht in der Telefonnummerntabelle enthalten sind (da es sich um Zahlen handelt, die nicht von dieser Firma stammen). Mit anderen Worten, ich muss sicherstellen, dass mindestens einer von ihnen ein Fremdschlüssel für die Telefonnummerntabelle ist.SQL-Einschränkung: zwei Attribute, mindestens eine Übereinstimmung mit Fremdschlüsseln in derselben Tabelle
create table phonenumber (
phonenum numeric(10,0) not null,
primary key (phonenum)
);
create table call_record (
URID varchar(20) not null,
c_src numeric(10,0) not null,
c_dst numeric(10,0) not null,
primary key (URID)
);
Folgende klingt wie, was ich will, ist aber nicht gültig SQL:
constraint call_constraint check (
foreign key (c_src) references phonenumber (phonenum) or
foreign key (c_dst) references phonenumber (phonenum)
)
Gibt es eine Möglichkeit, dies in DDL angeben? Wenn nicht, wie würde ich einen Auslöser schreiben, um dies durchzusetzen?
nicht zurück zu testen konnte bis jetzt erhalten , aber das funktioniert. Vielen Dank! Ich bin in einem SQL-Kurs, aber virtuelle Spalten wurden nicht besprochen. Ist das ein allgemeiner Weg oder ein "idealer" Weg, um eine Beschränkung wie diese durchzusetzen? Ich hatte keine starke Vorliebe für DDL über Trigger, aber ich war auf jeden Fall ratlos. –
Meiner Meinung nach ist es nicht sehr häufig, dass ein solcher Constraint benötigt wird, dies könnte ein Zeichen für das Design des Datenmodells sein. Für alles andere über Auslöser Vorliebe könnte ich empfehlen, "Auslöser sind böse" Google-Hits zu lesen. Was virtuelle Spalten betrifft, gibt es tatsächlich mehr, was Sie damit tun können, lesen Sie die Kolumne von Oracle Magazine 2008-März Tom Kyte als Referenz: http://www.oracle.com/technetwork/issue-archive/2008/08-mar/o28asktom -087592.html –