两个相同的表:将它们分开或与多余的键列合并

时间:2018-08-12 16:54:47

标签: sql

让我们假设我们有两个相同的状态表。每个表都有自己的值。他们不同意。

现在,什么是最佳实践?

  • 将那些分隔开,或者
  • 将它们与其他键列合并

分隔:

Table: offer_statuses
- id
- name  //For example: calculating, sent

Table: project_statuses
- id
- name  //For example: preparation, in progress

合并:

Table: statuses
- id
- status //For example: offer, project
- name   //For example: calculating, sent, preparation, in progress

3 个答案:

答案 0 :(得分:2)

Id保持独立。项目状态不是报价状态。通过合并您将一无所获,现在合并状态表中的每个外键将是两列而不是一列。您还可能会引入错误,因为您的外键不会阻止您使用仅项目状态有效的商品状态。

答案 1 :(得分:1)

您可以选择任何一种方式。通常,每种状态都有一个单独的参考表,因为这将允许这两种情况:

    "C:\Program Files\Microsoft SQL Server\130\Tools\Binn\SqlLocalDB.exe" create "v13.0" 13.0 -s offers到适当状态的
  • 外键关系;和
  • 两个实体之间的状态不会意外混合。

在某些情况下,将所有状态都放在同一表中很有用。例如,如果状态确实确实重叠,则将它们放在同一表中是有意义的。另一个用例是国际化。如果应用程序需要易于翻译,那么将所有语言字符串(例如状态描述)放在一个表中(或少数几个表中)会很有帮助。

换句话说,我通常会去单独的表。但是,将它们组合在一起可能有充分的理由。

答案 2 :(得分:1)

我建议将它们分开。从逻辑的角度来看,这听起来似乎有所不同。具有相同属性的一个指标是两个表可能对同一实体建模但没有证据。

保持它们不同可以更轻松地实现数据正确性,因为您可以使用外键约束,该约束指向正确的状态。如果您只有一张桌子,则很难确保,例如优惠仅可用于优惠状态。