หากคุณต้องการA_or_B_ID
ใน TableZ จริงๆคุณมีสองตัวเลือกที่คล้ายกัน:
1) เพิ่ม nullable A_ID
และB_ID
คอลัมน์ในตาราง z สร้างA_or_B_ID
คอลัมน์ที่คำนวณโดยใช้ ISNULL บนสองคอลัมน์นี้และเพิ่มข้อ จำกัด CHECK เพื่อให้มีเพียงหนึ่งในA_ID
หรือB_ID
ไม่เป็นโมฆะ
2) เพิ่มคอลัมน์ TableName ลงในตาราง z ซึ่งถูก จำกัด ให้มี A หรือ B สร้างA_ID
และB_ID
เป็นคอลัมน์ที่คำนวณแล้วซึ่งจะไม่เป็นค่าว่างเมื่อมีการตั้งชื่อตารางที่เหมาะสมเท่านั้น (โดยใช้นิพจน์ CASE) ทำให้ติดตาด้วย
ในทั้งสองกรณีตอนนี้คุณมีA_ID
และB_ID
คอลัมน์ที่สามารถมีคีย์ต่างประเทศที่เหมาะสมกับตารางพื้นฐานได้ ความแตกต่างคือคอลัมน์ที่คำนวณ นอกจากนี้คุณไม่จำเป็นต้องใช้ TableName ในตัวเลือกที่ 2 ด้านบนหากโดเมนของคอลัมน์ ID 2 คอลัมน์ไม่ทับซ้อนกันตราบใดที่นิพจน์กรณีของคุณสามารถระบุได้ว่าโดเมนใดA_or_B_ID
ตกอยู่ใน
(ขอบคุณความคิดเห็นสำหรับการแก้ไขการจัดรูปแบบของฉัน)