Şirkete ait bir telefon numarasına ve telefon çağrıları tablosuna sahibim. Her çağrı kaydı (boş olmayan) kaynak ve hedef numaraları içerir. Kaynak numarasının veya hedef numarasının, ancak her ikisinin de değil, telefon numarası tablosunda bulunmayan numaralar olmasına izin verdiğim (bu şirkete ait olmayan numaralar oldukları) bütünlük kısıtlaması verildi. Diğer bir deyişle, en az birinin telefon numarası tablosuna yabancı bir anahtar olduğundan emin olmalıyım.SQL kısıtlaması: iki öznitelik, aynı tabloda en az bir yabancı anahtar eşleşmesi
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)
);
istediğim ama geçerli bir SQL ne olmadığını gibi aşağıdaki sesler:
constraint call_constraint check (
foreign key (c_src) references phonenumber (phonenum) or
foreign key (c_dst) references phonenumber (phonenum)
)
DDL bu belirtmek için bir yolu var mı? Değilse, bunu uygulamak için nasıl bir tetikleyici yazarım? Düzenlenen
şimdi til geri testine alınamadı ama bu işe yarıyor. Teşekkürler! SQL kursundayım ama sanal sütunlar tartışılmamıştı. Bu, ortak bir yol mu, yoksa böyle bir kısıtlamanın uygulanmasının "ideal" bir yolu mu? Tetikleyicilerden DDL için güçlü bir tercihim yoktu ama her iki şekilde de güldüm. –
Aklımda bunun gibi bir kısıtlamaya ihtiyaç duyulmaması çok yaygın değil, bu durum veri modeli tasarımı konusuna işaret edebilir. Tetikleyicilerin tercihi dışındaki her şey için "tetikleyiciler kötülük" kelimesini okumanızı önerebilirim. Sanal sütunlar için aslında onlarla yapabileceğiniz daha çok şey var, Oracle Magazine 2008-Mart Tom Kyte'nin referans için sütununu kontrol edin: http://www.oracle.com/technetwork/issue-archive/2008/08-mar/o28asktom -087592.html –