关于地址,城市,国家数据的规范化问题

时间:2011-04-07 12:16:56

标签: mysql database database-design normalization denormalization

我目前有3个表格,用于存储世界上所有主要城市的信息,每个地区/州对应这些国家/地区,以及这些州/地区的每个城市。

City, States and Countries

现在我的数据库中还有大约6个其他表,例如需要完全相同的5列的用户或组织表:地址,郊区,城市,州/地区,国家/地区。所以我想知道是否“良好”的规范化实践可能使用存储这5条信息的“位置”表,然后用户或组织表将有一个location_id来引用回来。

Cities, States and Countries with Location table

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

任何建议表示赞赏。非常感谢!

2 个答案:

答案 0 :(得分:8)

这是一组不必要的关系 - 你可以从城市获得地区/国家。

请注意,我在下图中的区域和国家方向错误,但它说明了我的意思!

enter image description here

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

答案 1 :(得分:1)

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

编辑:RB更详细地说明了它:)