归一化或不归一化几个不同的值

Mik*_*e81 3 postgresql normalization database-design dimensional-modeling

假设在 Postgres 数据库中,您有一个名为 的表party,它可以有少于 5 个明确定义的,party_types例如“人”或“组织”。

您会将存储party_typeparty表中(例如party_type = 'Person')还是对其进行标准化(例如party.party_type = 1party_type(id, name) = (1, 'Person'))?
为什么?

a1e*_*x07 7

如果您正在实施参与方角色关系模型或其中的一部分,那么将其party_type作为一个单独的实体非常重要。您可能有更多的表带有到 party_type 的外键(例如,将某些角色的适用性限制为特定的当事人类型[s],或强制执行不同类型当事人之间的关系等)。在这种情况下使用任何形式(包括枚举)的检查约束会隐藏逻辑并使维护更加困难。

  • 我猜你的意思是“party”表,而不是“party_type”,这将是一个小的查找。根据其他要求,您可以将组织和人员存储在一张表中;在某些情况下,这对我来说似乎没问题。 (2认同)

Ulr*_*bor 5

我会为此使用一种enum类型

  • +1 对于没有任何其他属性的实体,`enum` 类型就像一个穷人的查找表,可以作为“规范化”传递。 (4认同)