2016-04-20 85 views
0

正确的约束有一个基本的模式:我如何获得在SQL

CREATE TABLE Human (
hid INTEGER PRIMARY KEY, 
name VARCHAR(50), 
gender CHAR(1), 
dob DATE 
); 
CREATE TABLE Wed (
husbd INTEGER REFERENCES Human(id), 
spouse INTEGER REFERENCES Human(id), 
wedSince DATE, 
PRIMARY KEY (husbd, spouse) 
); 

在这种模式中,每对夫妇可以结婚只有一次......但我真的不明白为什么。有人可以解释吗?我将如何允许同一对夫妇分居和重新结婚?

+0

主键不允许重复 –

回答

0

也许在数据中,每对夫妇只能结婚一次。但是,这种模式不会强制执行该限制。问题是(A,B)和(B,A)都是允许的。

这很容易通过在配偶上添加检查约束来解决。我会去:

CREATE TABLE Wed (
    spouse1 INTEGER REFERENCES Human(hid), 
    spouse2 INTEGER REFERENCES Human(hid), 
    wedSince DATE, 
    PRIMARY KEY (spouse1, spouse2), 
    CHECK (spouse1 < spouse2) 
); 

最后一个约束保证你想要什么。最后一个条件保证(spouse1, spouse2)(spouse2, spouse1)不在表中。请注意,这仍然允许一个配偶与多个其他人结婚 - 在世界大部分地区,这意味着离婚或丧偶。

作为一个参考点,许多国家承认同性配偶,所以不能保证配偶之一是“丈夫”。

+0

如何处理宝贝? – wildplasser

+0

@wildplasser。 。 。 “在世界大部分地区......”。 –