2012-11-21 197 views
0

我有三个型号:规范化或反规范化?

  • 国名:字符串
  • 国名:字符串,国家:引用
  • 城市名称:字符串,状态:引用

我有模式:

  • 用户名:字符串,姓:字符串,城市:引用,...

我是否应该继续在这个模型中引用州和国家,或者只保留对城市模型的引用?

什么解决方案更好? 网站上的流量并不是很高。

Regards

回答

0

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

我住在一个名为“牛顿”的城市,但我的实际邮政地址称之为“牛顿中心”,但我们大多数人会将其写为“牛顿中心”。根据我的应用中如何使用这些数据,我可能会选择让用户进入他们的城市,也许可以使用您现有的列表作为帮助自动填写或其他内容的方式。如果你没有你的用户可能存在于你的数据库中的所有城市,或者如果有错误,那么对用户来说就是一件痛苦的事情。有很多方法可以解决这个问题,但是它们都会影响数据一致性的可用性。

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

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