Tôi có một bảng số điện thoại được sở hữu bởi một công ty và một bảng các bản ghi cuộc gọi điện thoại. Mỗi bản ghi cuộc gọi bao gồm (không null) nguồn và số đích. Tôi được cung cấp ràng buộc toàn vẹn rằng số nguồn hoặc số đích, nhưng không được cả hai, được phép là số không nằm trong bảng số điện thoại (vì chúng là số không thuộc sở hữu của công ty này). Nói cách khác, tôi cần đảm bảo rằng ít nhất một trong số họ là một khóa ngoại vào bảng số điện thoại.Ràng buộc SQL: hai thuộc tính, ít nhất một đối sánh khóa ngoài trên cùng một bảng
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)
);
Những âm thanh sau đây giống như những gì tôi muốn, nhưng không phải là SQL hợp lệ:
constraint call_constraint check (
foreign key (c_src) references phonenumber (phonenum) or
foreign key (c_dst) references phonenumber (phonenum)
)
Có cách nào để xác định này trong DDL? Nếu không, làm thế nào tôi sẽ viết một kích hoạt để thực thi điều này?
Không thể lấy lại để kiểm tra đến bây giờ , nhưng cái này hoạt động. Cảm ơn! Tôi đang ở trong một khóa học SQL nhưng các cột ảo chưa được thảo luận. Đây có phải là cách thông thường hay cách "lý tưởng", thực thi ràng buộc như thế này? Tôi đã không có một sở thích mạnh mẽ cho DDL trên gây nên nhưng tôi đã stumped một trong hai cách. –
Theo tôi, không cần phải có một ràng buộc như thế này, điều này có thể báo hiệu vấn đề thiết kế mô hình dữ liệu. Đối với bất cứ điều gì khác trên ưu tiên kích hoạt tôi có thể đề nghị đọc "gây nên là ác" google hits. Đối với các cột ảo, thực tế bạn có thể làm nhiều hơn với chúng, hãy kiểm tra cột của Oracle Magazine 2008-March Tom Kyte để tham khảo: http://www.oracle.com/technetwork/issue-archive/2008/08-mar/o28asktom -087592.html –