数据库设计 - 我应该规范化还是非规范化(加入或复制)

时间:2013-07-26 07:14:57

标签: mysql denormalization

我正在创建一个包含两个主要表的数据库:itemslocations

items表包含约3,500条记录,并以每月1百万条记录的速度上升。

locations表格包含50,000个地点(名称,纬度,经度),且尺寸不会发生变化。

items表的每次阅读都需要JOINlocations表,以找出项目所在的位置,除非我复制了位置内容对于每个项目记录。我预计每个月会对物品表进行大约5,500次查询。

搜索数据库将由Sphinx执行,所以我不需要担心复杂的mysql地理坐标查询。

我的问题是,我最好是复制每个项目的位置数据,还是执行JOIN语句?

提前致谢

2 个答案:

答案 0 :(得分:2)

我认为如果JOINITEM之间的LOCATIONSITEM表中的外键相关,那会更好。

如果您为每个tiem复制数据,将会有太多的数据冗余

答案 1 :(得分:0)

我们可以从学术角度讨论非正规化,但实践总是与理论不同。你如何设计你的结构也应该取决于使用 - 对你来说,我猜它是响应的时间。

加入50k表并不是非常昂贵,并且不会花费太多时间,因为location大小没有上升

如果你有足够的可用空间,非规范化将始终改善你的查询,但不必要地复制50.000条记录,另一方面你将失去你正在寻找的速度。