2013-07-30 42 views

回答

0

你指的是外鍵的強制性屬性,這讓我相信你要麼誤解了不相交關係的含義,要麼在錯誤的「方向」上用關係來實現它。

比方說,我們要實現以下模式:

  • 類:科員
  • 類:永久(專業職員)
  • 類:臨時(專業職員)
  • 一工作人員是要麼 a永久員工 a臨時承包商

相應的EER模式將是(MySQL的句法):

CREATE TABLE staff_member (
    id INT PRIMARY KEY, 
    name VARCHAR(20) NOT NULL 
); 

CREATE TABLE permanent (
    id INT PRIMARY KEY, 
    next_appraisal DATETIME NOT NULL, 
    FOREIGN KEY (id) REFERENCES staff_member(id) 
); 

CREATE TABLE temporary (
    id INT PRIMARY KEY, 
    contract_end DATETIME NOT NULL, 
    FOREIGN KEY (id) REFERENCES staff_member(id) 
); 

通知外鍵是專業實體父實體(id是主鍵,也總是強制性的根據定義)。

這仍然不能回答你的問題。如何模擬這種關係的不相交屬性?你不能輕易做到這一點(順便說一句,你也不能模擬專業化是完整的)。

許多RDBMS支持使用CHECK約束來強制執行這些額外的條件,但MySQL不會(當心,MySQL語法分析器接受該語法,但聲明被忽略)。但是,simple workarounds exist導致相同的效果。