前几天我在考虑规范化,我突然想到,我想不出什么时候数据库中应该有1:1的关系.

  • Name:SSN? 我会把它们放在同一张桌子上.
  • PersonID:AddressID? 还是同一张桌子.

我可以想出无数个1:many或many:many(带有适当的中间表)的例子,但从来没有1:1的例子.

我是不是漏掉了什么明显的东西?

推荐答案

1:1关系通常表示您出于某种原因对较大的实体进行了分区.通常是因为物理模式中的性能原因,但如果大量数据预计同时是"未知"的(在这种情况下,您有1:0或1:1,但没有更多),那么这种情况也可能发生在逻辑端.

作为逻辑分区的一个例子:您有关于员工的数据,但需要收集更大的数据集,前提是他们 Select 医疗保险.我会将有关医疗保险的人口统计数据保存在一个不同的表中,以便于安全分区,并避免在与保险无关的查询中拖拽这些数据.

物理分区的一个例子是,相同的数据托管在多台服务器上.我可能会将医疗保险人口统计数据保存在另一个州(例如,人力资源办公室所在的州),主数据库可能只能通过链接服务器链接到它...避免将敏感数据复制到其他位置,同时使其可用于(假设这里很少)需要它的查询.

如果查询需要更大实体的一致子集,那么物理分区可能会很有用.

Sql相关问答推荐

如何重用表值用户定义函数调用的结果?

如何查询一个名称是根据PL/pgSQL函数结果构建的表?

出现5次后,将所有正斜杠替换为连字符

有没有办法用SQL编写一条CASE语句,如果列A&>0,那么列B,列C=0

Select 起始参数和截止参数之间的间隔,包括与期间重叠的参数

SQL:如何将相应位置的两个数组中的元素组合在一起

获得第三名或最老的记录

以一致的价值获得独特的价值

在SQL中将项分配给容器

在SQL查询中查找客户端的最短日期比较列和多行

SQL中相同表内的VLOOKUP等价

如何在 SNOSQL 中执行反连接(或 where 子句过滤)以查找字段不包含另一个表中的值的行?

向表中添加新列取决于表的日期列(unpivot)

使用 Oracle SQL Developer 将不同的列值转换为列会导致错误 ORA-01489

SQL 根据前一天的最大值计算每天的值数

达到特定值时,从0开始累加求和

如何创建一个递归计数器来查找一个元素有多少父级和子级?

如何在 SQL Server 中将 -13422.8450 舍入到 -13422.84

我如何编写一个遍历数组数组并将所有值连接成一个字符串的 postgres 函数

SELECT 用于 Parent、Children 和 ORDER BY [Order] 列