【问题标题】:Database design - should I normalise or denormalise (JOIN, or duplicate)数据库设计 - 我应该规范化还是非规范化(JOIN 或重复)
【发布时间】:2013-07-26 08:36:00
【问题描述】:

我正在创建一个包含两个主表的数据库:items、locations。

items 表包含大约 3mill 记录,并且以每月 1mill 记录的速度增长。

locations 表包含 50,000 个位置(名称、纬度、经度),大小不会改变。

每次读取items 表都需要JOIN 到locations 表才能找出项目所在的位置除非我复制每个项目记录的位置内容。我预计每个月都会对 items 表进行大约 5mill 查询。

数据库的搜索将由 Sphinx 执行,因此我无需担心 mysql 地理距离查询复杂化。

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

提前致谢

【问题讨论】:

标签: mysql denormalization


【解决方案1】:

我认为如果你在ITEM 和LOCATIONS 之间有一个JOIN 并且在ITEM 的表中有一个外键会更好。

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

【讨论】:

  • 听起来不错。实际上,我只是在我们的另一个大型数据库(2mill 记录,20,000 个位置)上执行了类似的查询,并且直接选择和连接之间的差异非常小。所以我觉得我很乐意走规范化路线
【解决方案2】:

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

加入 50k 表的成本不是很高,也不会花费太多时间,因为 location 的大小没有增加

如果您有足够的可用空间,非规范化总是会改善您的查询,但会不必要地重复 50.000 条记录,另一方面,您会降低您正在寻找的速度。

【讨论】:

    猜你喜欢
    • 2013-01-18
    • 2018-07-08
    • 2017-01-27
    • 2013-08-21
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    • 2010-10-11
    相关资源
    最近更新 更多