在用户表中存储区域/城市数据

时间:2010-12-14 23:13:46

标签: sql mysql database-design

假设我有以下内容:

表region_city

id    name           parent_id
==============================
1     North          null
2     South          null
3     Manchester     1
4     London         2

在我的用户表中,我存储了用户所在城市的ID。

现在,在我的搜索表单中,我需要能够执行顶级搜索,即查找属于给定区域(北方或南方)的所有用户。

如果我在用户表中包含region_id字段,它会让生活更轻松吗?或者这是否违背了规范化概念?

2 个答案:

答案 0 :(得分:2)

它会对表结构进行非规范化,并且可能会引入数据更新异常。考虑一下:用户从曼彻斯特搬到伦敦,而city_id也在变化。 region_id仍然可以指向北方。

region_id 取决于城市,因此它不属于用户表。因为它可以来自这个城市。

答案 1 :(得分:0)

如果设计绝对只需要两个级别(地区和城市),并且您愿意放弃未来可能添加的其他级别(不是我倾向于做出的决定,但是您知道您的数据比我这样做)然后不要在你的用户表中包含regionID;这会使你的数据库非规范化。相反,您有多种表示数据的选择(包括两个相关的表,区域和城市),您可以通过将city表连接到用户表或在搜索中使用IN子句来执行搜索。