2017-10-09 68 views
1

例如,我有3個表格:教師,學生和人員。在教師和學生的表格中使用約束

教師與teacher_id和爲person_id,

學生student_id數據和爲person_id,

與爲person_id人員和一些關於他的信息。

當同一個人是老師和學生時,我應該如何使用約束來避免這種情況。我知道如何以簡單的方式使用約束,如限制日期或其他整數值。但在這裏我不知道如何連接和約束它們。

+0

@jarlh這不是重點,我不明白這個概念 –

+1

我沒有看到任何關係映射問題。如果一個人既是其中之一,基本上同樣的外鍵person_id出現在兩個不同的表格中(即:學生和教師)。 – P3trur0

回答

2

如果你想SELECT所有persons,但students誰是teachers,你可以把你的WHERE條款:

SELECT * 
FROM persons p 
INNER JOIN student_id s 
    ON s.person_id = p.person_id 
INNER JOIN teacher_id t 
    ON t.person_id = p.person_id 
WHERE student_id != teacher_id 

更新

使用的情況下的WHERE子句聲明,同時創建您的索引:

CREATE UNIQUE INDEX index_person ON index_table(
    CASE WHEN student_id != teacher_id 
     THEN person_id 
     ELSE NULL 
    END 
); 
+0

謝謝你的回答。但這不是關於從表中選擇。我想用我描述的設置來創建數據庫。 –