【问题标题】:Is it a good practice to have same column in multiple tables在多个表中具有相同的列是一个好习惯吗
【发布时间】:2015-10-06 19:41:36
【问题描述】:

假设您有三种不同类型的数据库实体

COUNTRY (TABLE)
id | name | system_field (boolean)

system_field=true 系统不允许任何人删除该行时。例如开箱即用的系统提供了一些国家(例如美国、英国等~没有人可以删除)

同样

ROLE (TABLE)
id | name | system_field (boolean)
1  | Admin| true
2  |Role2 | false

任何人都不能删除system_field 标志为真的角色。此类限制/验证处于应用程序级别。

对于其他类型的数据库实体,需要这样的“system_field”越来越多,感觉就像在许多表中重复system_field 列。请注意,这些数据库实体彼此不相关。有没有更好的方法来对这样的列 (system_field) 进行建模,以便它可以轻松地用于未来的表,而无需 ALTERing 现有表添加 system_field 布尔列?

【问题讨论】:

  • 这并没有错。但是,我更喜欢描述性更强的名称,例如is_system_generatedis_deleteable(如果这是专栏的唯一目的)。 system_field 可能意味着任何东西
  • @a_horse_with_no_name 我完全同意。
  • 另外,system_field 是自引用的。 system_tuplesystem_row 至少会说些什么,但我同意可能有更好的名字。

标签: sql postgresql database-schema


【解决方案1】:

COUNTRYROLE 表代表不同的、不相关的域实体。它们只是碰巧有一个称为system_field 的同类描述性属性。

由于实体在含义上不相关,因此它们应该像现在一样占据自己的表,并且每个实体都有一个 system_field 列是正确的。

如果实体在概念上是相关的,比如 CUSTOMEREMPLOYEE,那么可能有很好的论据支持规范化数据表示。

【讨论】:

  • 我不知道如何规范化客户和员工(我必须查看他们存储的实际数据),但否则你是正确的。
  • @Jeff:是的,取决于具体情况。将“会”改为“可能”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-03
  • 1970-01-01
  • 2021-01-21
  • 2019-12-26
  • 2018-10-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多