在多个表中使用相同列是一种好习惯

时间:2015-10-06 19:41:36

标签: sql postgresql database-schema

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

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),以便它可以很容易地用于将来的表,而不用ALTER现有的表来添加system_field布尔列?

1 个答案:

答案 0 :(得分:3)

COUNTRY ROLE 表示不同的,不相关的域实体。它们恰好具有相同类型的描述性属性,称为 system_field

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

如果实体在概念上相关,比如 CUSTOMER EMPLOYEE ,可能会有一些很好的论据支持规范化数据表示。