归一化还是非规范化?

时间:2012-11-21 14:02:29

标签: ruby-on-rails ruby-on-rails-3

我有三种模式:

  • 国家/地区名称:字符串
  • 州名:字符串,国家:参考
  • 城市名称:字符串,州:参考

我有模特:

  • 用户名:string,surname:string,city:references,...

我是否应该在此模型中保留对州和国家的引用,或仅保留对城市模型的引用?

哪种解决方案更好? 现场的交通不是那么高。

此致

1 个答案:

答案 0 :(得分:0)

这个答案完全取决于您的使用案例。如果您需要将邮件发送到相关地址,那么您很可能需要一个非常一致的地址。或者也许只是其他用户知道的信息。

我住在一个叫“牛顿”的城市,但我的实际邮政地址称之为“牛顿中心”,但我们大多数人都把它写成“牛顿中心”。根据我的应用程序中这些数据的使用方式,我可能会选择让用户进入他们的城市,也许使用您现有的列表来帮助自动完成或其他什么。如果您没有用户可能在您的数据库中居住的所有城市,或者如果有错误,那么用户可能会很难处理。有很多方法可以解决这个问题,但它们都是为了保证数据的一致性。

如果你已经拥有这三个模型并填充它们,那么可能就是这样,拥有一个正确规范化的数据模型(像这样)总是我的第一直觉。然而,这是一种特殊情况。特别是在州(也许是省)和国家/地区,已经建立了ISO标准代码,您可以将代码存储在哈希中,并将ISO代码存储在数据库中。有许多宝石提供这些参考。

我几乎总是会说“规范化您的数据库”,但这可能是一个案例,对于城市,州/省,国家(甚至邮政编码),您可能决定不使用数据库支持的模型。我认为这是大多数“典型”应用程序处理地址的方式。