2015-10-06 44 views
1

说你有三种不同类型的数据库实体它是一个很好的做法,同一列的多个表

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列。请注意,这些db实体彼此不相关。有没有更好的方法来模拟这样一个列(system_field),以便它可以很容易地用于将来的表格,而不需要ALTER ing现有的表格添加system_field布尔列?

+1

这没有什么错。然而,我希望有一个更具描述性的名字,例如'is_system_generated'或'is_deleteable'(如果这是列的唯一目的)。 'system_field'可能意味着_anything_ –

+0

@a_horse_with_no_name我完全同意。 –

+0

另外,'system_field'是自引用的。 'system_tuple'或'system_row'至少会说些什么,但我同意可能有更好的名字。 –

回答

3

COUNTRYROLE代表不同的,不相关的域实体。它们碰巧具有同名的描述性属性system_field

由于实体在含义上并不相关,它们应该分别占据它们自己的表格,并且每个实例都有一个system_field列是正确的。

如果实体是概念相关,说客户EMPLOYEE有可能是很好的论点支持标准化数据表示的。

+0

我不知道如何正常化客户和员工(我必须看到他们存储的实际数据),但是否则您是正确的。 – Jeff

+0

@Jeff:是的,取决于具体情况。将“将”更改为“可能”。 –

相关问题