7

我目前有3个表格,用于存储有关世界上所有主要城市,与这些国家相对应的每个地区/州以及这些州/地区中的每个城市的信息。有关地址,城市,国家数据的规范化问题

City, States and Countries

现在我有大约6其他表在我的数据库如用户或组织表需要完全相同的5列:地址,郊区,城市,州/地区,国家。所以我想知道,如果这是一种'良好'的规范化实践,也许使用一个'Location'表来存储这5条信息,那么Users或Organizations表就会有一个location_id来引用。

Cities, States and Countries with Location table

好主意还是坏主意?我也在考虑使用包含home_phone,business_phone,mobile_phone,email_address的相同原则的“联系人”表,而不是在6个表中的每个表中都有相同的5列。

任何意见赞赏。非常感谢!

回答

8

这是一种不必要的关系 - 您可以从城市中获取地区/国家。

请注意,我在下面的图片中有地区和国家错误的方式,但它说明了我的意思!

enter image description here

当然,这将是有用的定义相结合的城市,国家和地区实际上写你的查询视图。我也认为在这个水平上正常化在实践中是一个非常好的主意。当你来添加一个新的字段到你的位置表时,你会非常高兴你将它分开;-)

+0

我唯一担心做这种方式是,用户不能只选择一个国家和/或地区/国家。一些“城市”<40,000人不在我的数据库中,因为全球有10,000多人,并且在查询时会减慢速度。此外,用户或组织可能在城镇而不是城市。然后,如果他们在下拉列表中找不到他们的城市,他们将无法选择国家或地区,因为它不会映射回位置表。 – zuallauz 2011-04-21 00:44:41

+1

我的网络应用程序当前的工作方式是用户在下拉菜单中选择一个国家,它使用AJAX显示该国家/地区的所有区域的另一个下拉菜单,然后该下拉菜单再次使用AJAX让用户选择该地区/州的城市。我想要做的是让这些组织按国家,州/地区或城市搜索,这样当用户访问该网站时,他们可以在他们想要的区域找到这些组织。如果他们无法在该城市找到该组织,那么他们需要能够按地区进行搜索,并且即使它是一个小城镇,也应该找到它。 – zuallauz 2011-04-21 00:45:10

1

我认为你已经过度了。作为独立表的地区,城市和国家很棒,因为您可以轻松管理条目而不会造成数据不一致。但是,将每个用户/组织的地址数据存储在单独的(位置)表中是不必要的。将这些字段添加到用户/组织表中。

编辑:RB说明它在更多的细节:)

+0

我把所有的地址,郊区,城市,地区,国家数据放在每个表格中的问题看起来像一个凌乱的蜘蛛网:[像这样](http://i.imgur.com/tfkbi.png)。我在他的帖子下讨论了RB的方法的问题。 – zuallauz 2011-04-21 00:46:02