Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在多个表中有相同的列是一种好的做法吗_Sql_Postgresql_Database Schema - Fatal编程技术网

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
至少会说些什么,但我同意可能有更好的名称。