假设我有以下内容:
表region_city
id name parent_id
==============================
1 North null
2 South null
3 Manchester 1
4 London 2
在我的用户表中,我存储了用户所在城市的ID。
现在,在我的搜索表单中,我需要能够执行顶级搜索,即查找属于给定区域(北方或南方)的所有用户。
如果我在用户表中包含region_id字段,它会让生活更轻松吗?或者这是否违背了规范化概念?
答案 0 :(得分:2)
它会对表结构进行非规范化,并且可能会引入数据更新异常。考虑一下:用户从曼彻斯特搬到伦敦,而city_id也在变化。 region_id仍然可以指向北方。
region_id 仅取决于城市,因此它不属于用户表。因为它可以来自这个城市。
答案 1 :(得分:0)
如果设计绝对只需要两个级别(地区和城市),并且您愿意放弃未来可能添加的其他级别(不是我倾向于做出的决定,但是您知道您的数据比我这样做)然后不要在你的用户表中包含regionID;这会使你的数据库非规范化。相反,您有多种表示数据的选择(包括两个相关的表,区域和城市),您可以通过将city表连接到用户表或在搜索中使用IN子句来执行搜索。