![]() |
1
2
把它当作 有 或 有许多 关系。 绝对是一家公司 有 地址(在您的示例中),因此它应该是父表,地址表应该引用公司表。另一方面,如果许多不同的公司共享同一个地址,则可能是相反的。因此,它还取决于您的需求(您试图建模的逻辑)。 |
![]() |
2
2
如果一个公司要有一个地址,而且只有一个地址,我要么把公司信息留在公司表中,要么在地址表中有一个companyID列,但不管怎样,这似乎没有太多的实用性。如果数据确实与公司有关,而不是在其他地方使用,那么将数据放在那里仍然是3nf。 如果您想说一个“账单地址”和一个“送货地址”,那么地址表与一个地址ID(标识列)和一个引用到公司表的CompanyID列分开会更有意义。 然而,为了给你一个更一般的规则,“主”是数据的真正“主”。在这种情况下,主记录是一个公司,因此应该引用其ID。在你有地址之前,你需要有一个公司。 |
![]() |
3
1
如果每次删除公司时都要删除地址,这意味着地址直接依赖于公司,并且将地址保留在公司表中不会违反
如果地址属性依赖于公司以外的其他东西,您可以将它们放入地址表中,以使地址管理在逻辑上更加一致。
你可以把地址分成
但是,这意味着您对实体中的地址感兴趣,而不是属性,并且您不应该再层叠删除它们。 更新: 在正常形式的定义中, “从属” 方法 “依赖于我的模型”
比如,公司的地址是
如果
在你的模型中
然而,如果 在你的模型中 :
,则包含地址的表位于
从您每次删除公司时希望删除的地址来看,我认为您不会跟踪地址依赖关系,因此,您可以将地址保留在公司表中。 |
![]() |
4
0
你做得不对。地址表中应该有公司ID,而不是公司表中的地址ID。这是因为关系实际上是一对多、一个公司、多个可能的地址(公司通常有多个地址)。这使得公司成为父表。 |
![]() |
developer · 带外键的SQL表设计 5 月前 |
![]() |
relatively_random · 确保两个表之间一致的共同参考 6 月前 |
![]() |
b126 · 在两种不同的Oracle模式上执行相同查询的速度差异很大 1 年前 |
![]() |
robertspierre · 在多对多关系中自动删除未引用的行 1 年前 |
![]() |
Michael Samuel · MYSQL在以下情况下自动创建索引 7 年前 |