【问题标题】:Best way to create relationship between multiple tables在多个表之间创建关系的最佳方法
【发布时间】:2014-11-02 20:10:12
【问题描述】:

我有一个关于如何最好地处理将在多个关系之间共享但不应该真正与所有这些表连接的表的问题。例如,假设我有一张表,其中包含美国各州。然后,在这个例子中,我可能有三个或四个与 States 表有关系的其他表,例如:一个用户表(用户来自哪里)、一个汽车登记表、一个电子邮件表(也许在这个系统上,我们跟踪发送和接收的电子邮件以及它们的来源)和其他一些表格。如果我将所有这些表加入到 State 表中,这会使所有这些表看起来都应该相互之间有某种关系。对于一些表(如用户和汽车注册)可能是这样,但不一定在所有表之间(例如用户和电子邮件表)。或者另一个例子可能是我们有两个表,Employees 和 Work_Office。每个人都有自己的状态。并且每个都相互连接,创建一个循环(Work_Office 有很多员工。员工属于州,Work_Office 属于州)。现在我们有一个循环。

那么,拥有多个“状态”表会更好吗?似乎不会。但与此同时,我不想创建可能并不真正存在的关系?还是只拥有表格而不实际创建任何类型的关系更好?

谢谢 杰森

【问题讨论】:

  • 我认为这更适合dba.stackexchange.com ...毕竟,这不是真正的编程问题,而是与数据库架构相关的问题。
  • 我也会检查一下。谢谢!
  • @lxg - database-design 是一个拥有 1.7K 关注者和 14K 问题的标签。并非所有关于 SO 的问题都与代码有关。

标签: database-design normalization


【解决方案1】:
  1. 拥有多个 STATE 表绝对更糟糕
  2. 许多表引用一个特定的表并没有错。例如,Users 和 Work_Office 和 Car_Registration 表引用一个 Address 表并没有错。
  3. 不过,有几点需要注意:

    • 州与地址: 引用State 表的Employees、Work_Office 和其他表是否也引用其他与Address 相关的表(如City)?如果是,那么您应该考虑使用引用 Street 表、City 表和 State 表的 Address 表,并有一个包含地址其余部分的字段,例如门牌号。现在,所有有地址的实体都应该只引用这个地址表。
    • Employee 和 Users 和 Email:其中只有一个应该引用 Address 表,其余的应该相互引用。也就是说,Employee 应该引用 Users 表,Users 表应该包含一个 email 列,或者引用 Email 表

【讨论】:

  • 感谢您的洞察力。我知道多表考虑是错误的,但我真的不知道该怎么做。
猜你喜欢
  • 1970-01-01
  • 2010-10-08
  • 2021-01-26
  • 1970-01-01
  • 2019-08-24
  • 2013-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多