Rails:标准化或不标准化为少数值

时间:2014-02-24 09:53:58

标签: ruby-on-rails database-design

假设在连接到Postgres数据库的Rails应用程序中,您有一个名为“Party”的表,它可以有少于5个明确定义的party_types,例如“Person”或“Organization”。

您是否将party_type存储在Party表中(例如party.party_type ='Person')或将其标准化(例如party.party_type = 1和party_type.id = 1 / party_type.name ='Person')?为什么?

2 个答案:

答案 0 :(得分:1)

如果可以在代码中定义派对类型,我肯定会使用“人员”等名称。

如果您希望管理员/用户动态添加此类型,并为其设置此类GUI,则对其进行建模并将其设置为party.party_type = 1

当然在“1”VS“Person”之间会有一个数据库存储/性能考虑因素,但是当应用程序不是那么大时,这个问题太小而不能考虑。

答案 1 :(得分:1)

这里有两个问题:

  1. 您是否正在处理一般这些类型? 1
  2. 您是否向用户显示该类型?
  3. 如果(1)的答案为“是”,那么只需在表格中添加一行就可以更改约束和/或应用程序代码。

    如果(2)的答案为“是”,那么在数据库中存储人类可读标签可能比在应用程序代码中翻译成人类可读文本更可取。

    简而言之,你可能想要一个单独的表。另一方面,如果所有类型都事先已知并且您只是使用它们来驱动应用程序逻辑的特定路径而不直接向用户显示,那么单独的表可能是多余的 - 只需定义相应的CHECK以将字段限制为有效值并清楚地记录每个价值。


    1 换句话说,您可以添加新类型并且应用程序的逻辑将继续工作,或者您还需要更改应用程序逻辑吗? < / p>