Sql 在多个表中有相同的列是一种好的做法吗
假设您有三种不同类型的数据库实体Sql 在多个表中有相同的列是一种好的做法吗,sql,postgresql,database-schema,Sql,Postgresql,Database Schema,假设您有三种不同类型的数据库实体 COUNTRY (TABLE) id | name | system_field (boolean) 当system\u field=true时系统不允许任何人删除该行。例如,开箱即用系统提供了一些国家/地区(如美国、英国等),任何人都不允许删除这些国家/地区) 同样地 ROLE (TABLE) id | name | system_field (boolean) 1 | Admin| true 2 |Role2 | false 任何人都不允许删除sys
COUNTRY (TABLE)
id | name | system_field (boolean)
当system\u field=true时
系统不允许任何人删除该行。例如,开箱即用系统提供了一些国家/地区(如美国、英国等),任何人都不允许删除这些国家/地区)
同样地
ROLE (TABLE)
id | name | system_field (boolean)
1 | Admin| true
2 |Role2 | false
任何人都不允许删除system\u字段
标志为true的角色。此类限制/验证是在应用程序级别进行的
对于其他类型的db实体,对此类“系统字段”的需求正在增加,感觉就像许多表中重复了system\u field
列。请注意,这些db实体彼此不相关。是否有更好的方法对此类列(system\u field
)进行建模,使其可以方便地用于将来的表,而无需更改现有表以添加system\u field
布尔列 表COUNTRY和ROLE表示不同的、不相关的域实体。它们恰好有一个同类型的描述性属性,称为system_field
由于实体在意义上是不相关的,它们应该像现在一样占据各自的表,并且每个实体都有一个system_字段列是正确的
如果实体在概念上是相关的,比如说客户和员工,那么可能有很好的理由支持规范化数据表示。我不知道如何规范化客户和员工(我必须看到他们存储的实际数据),但你是对的。@Jeff:是的,这取决于具体情况。把“愿意”改为“可能”。这没什么错。但是,我更喜欢一个更具描述性的名称,例如,是系统生成的
或是可删除的
(如果这是本专栏的唯一目的)<代码>系统\字段
可能意味着anything@a_horse_with_no_name我完全同意。而且,system\u字段
是自参考的system\u tuple
或system\u row
至少会说些什么,但我同意可能有更好的名称。