假设在 Postgres 数据库中,您有一个名为 的表party
,它可以包含少于 5 个定义良好的表,party_types
例如“Person”或“Organization”。
您会将其存储party_type
在party
表中(例如party_type = 'Person'
)还是对其进行规范化(例如party.party_type = 1
and party_type(id, name) = (1, 'Person')
)?
为什么?
假设在 Postgres 数据库中,您有一个名为 的表party
,它可以包含少于 5 个定义良好的表,party_types
例如“Person”或“Organization”。
您会将其存储party_type
在party
表中(例如party_type = 'Person'
)还是对其进行规范化(例如party.party_type = 1
and party_type(id, name) = (1, 'Person')
)?
为什么?
如果您正在实施党-角色-关系模型或其中的一部分,那么拥有
party_type
一个单独的实体非常重要。您可能有更多带有外键的表 party_type (例如,将某些角色的适用性限制为特定的派对类型,或强制不同类型的派对之间的关系等)。在这种情况下使用任何形式的检查约束(包括枚举)都会隐藏逻辑并使维护更加困难。我会为此使用一种
enum
类型。我总是使用查找表,因为您的应用程序可能会扩展(例如,一旦您添加“机构组织”,“组织”可能会变成“零售组织”)。当您意识到类型比原始名称所暗示的更具体或不同时,类型名称的单个位置非常好。此外,这是添加特定于类型的值的好地方,例如“CanHaveMultipleLogins”,它经常被硬编码。