Nếu bạn thực sự cần A_or_B_ID
trong TableZ, bạn có hai tùy chọn tương tự:
1) Thêm nullable A_ID
và B_ID
cột vào bảng z, tạo A_or_B_ID
một cột được tính toán bằng cách sử dụng ISNULL trên hai cột này và thêm ràng buộc CHECK sao cho chỉ một trong số A_ID
hoặc B_ID
không phải là null
2) Thêm cột TableName vào bảng z, được giới hạn để chứa A hoặc B. Bây giờ tạo A_ID
và B_ID
dưới dạng cột được tính toán, chỉ có giá trị khác rỗng khi bảng thích hợp của chúng được đặt tên (sử dụng biểu thức CASE). Làm cho họ cũng tồn tại
Trong cả hai trường hợp, bây giờ bạn có A_ID
và B_ID
các cột có thể có khóa ngoại thích hợp cho các bảng cơ sở. Sự khác biệt là các cột được tính toán. Ngoài ra, bạn không cần TableName trong tùy chọn 2 ở trên nếu các miền của 2 cột ID không trùng nhau - miễn là biểu thức chữ hoa của bạn có thể xác định miền nào A_or_B_ID
thuộc
(Cảm ơn nhận xét đã sửa định dạng của tôi)