我最近在思考规范化问题,但我发现我无法想象出数据库中应该存在1:1关系的情况。
姓名:社会安全号码(SSN)
? 我会将它们放在同一个表中。人员ID:地址ID
? 同样,放在同一个表中。
我可以举出无数个1:多或多:多(带有适当的中间表)的例子,但从未碰到过1:1的情况。
我是否漏掉了一些明显的东西?
我最近在思考规范化问题,但我发现我无法想象出数据库中应该存在1:1关系的情况。
姓名:社会安全号码(SSN)
? 我会将它们放在同一个表中。人员ID:地址ID
? 同样,放在同一个表中。我可以举出无数个1:多或多:多(带有适当的中间表)的例子,但从未碰到过1:1的情况。
我是否漏掉了一些明显的东西?
如果您有太多的信息,1-1关系也是必要的。表中每个记录都有大小限制。有时,表会分成两个部分(主表中包含最常查询的信息),以便记录大小不会太大。如果表较窄,则数据库在查询时也更有效率。
这也是一种扩展已经在生产中的表格的方式,相比于“真正”的数据库更改,风险较小。在遗留系统中看到1:1关系通常是字段在初始设计之后添加的一个很好的指标。
在某些情况下只需要扩展信息。这种情况下,遗留应用程序和编程语言(如RPG)会将程序编译到表格中(所以如果表格发生更改,您必须重新编译程序)。此外,在需要考虑表格大小的情况下,附加文件也可能很有用。
通常情况下,它更多的是一种物理而非逻辑结构。它通常用于垂直分割表格,以利用跨物理设备或其他查询优化与将不经常访问的数据或需要比同一对象上的其他属性更安全地保留的数据进行隔离。
唯一的逻辑考虑是规定1-1关系时,某些属性仅适用于某些实体。然而,在大多数情况下,通过实体提取有更好/更规范的方式来建模数据。