答案是机械地从功能依赖的想法中派生出来的。
对于一个关系中存在的值,这意味着值必须存在于另一个关系中。如果这是真的,届时将有来自相关表(前)外键约束的独立表(后者)
看待这个另一种方式是一对一的关系,实际上只是一个特殊的一对多关系的情况;只有而不是许多,你只有一个。
在SQL
:
CREATE TABLE independent (
id INTEGER PRIMARY KEY
);
CREATE TABLE dependent (
independent_id INTEGER UNIQUE NOT NULL FOREIGN KEY REFERENCES independent(id)
);
像一对多,“众多”有一个外键“一”,但打开“多”到“一”,只是使它unique
。这是典型的便利通过使外键列上的依赖关系的主键的这种关系来表达这一切:
CREATE TABLE dependent (
independent_id INTEGER PRIMARY KEY FOREIGN KEY REFERENCES independent(id)
);
编辑:我注意到您的标题提出了一个不同的问题比你的身体似乎问。以上回答标题。
从数据库规范化的角度来看,可能最好使用多个表,如上所述,以支持可空属性。空值是一种带外方式,表示特定属性的价值在某种程度上是“特殊的”,但并不真正强化对可能意味着什么的任何特定解释。空manager_id
可能意味着完全不同于空birthdate
,即使它们具有相同的标记。
从严格的抽象或学术的角度来看,添加表格并不是一件坏事;也没有添加属性。选择应始终基于您实际需要建模的数据类型。
这就是说,有一些非常实际的原因使用其中一个或另一个。最明显的性能原因来自于使用其中一个或另一个的空间成本。当通常使用可选值时,外键和相应索引使用的额外空间不会很好地支付。同样,如果可选值很少使用;将这些值放在另一个关系中更加紧凑。具有可空属性会占用表中几乎不用的空间。
找出哪些基本上需要实际的数据,以及性能测试这些(也许是其他)配置,看看哪个最好。
另请参阅此关系问题:http://stackoverflow.com/questions/5177991/normalization-of-an-11-or-10-relationship – Hibou57