我正在建立一个数据库,我不确定我应该制作多么深的层次结构。
节省空间的最佳情况似乎是三层。 基团 - > sub_group->项目
在平均情景中,子组有300个项目,组有100个子组。项目目前接近100万,增长正在加速。
我喜欢区分GROUP和ITEM,因为它反映了现实世界,但SUB_GROUP仅存在,因为ITEM通常对于几百行是相同的。为了清楚起见,我可以在子组的一个实例中获取数据并将其附加到每个项目实例。
在每个查询中至少进行3次连接会更好地提高性能吗?或者我最好减少使用更多重复数据的表格?
答案 0 :(得分:0)
这不是一个MySQL问题,而是一般的SQL RDBMS问题。
您已将数据库规范化,以消除重复并最大限度地减少存储。
如果符合以下条件,您可能会正确化并将子组信息与项目放在一起:
可能还有其他一些注意事项,但是这一点可以让你开始。
这里没有绝对的。
答案 1 :(得分:0)
首先,您的决定不应基于性能问题,检索数据所需的JOIN数量或任何相关问题。您应该选择正确为您的数据建模的设计。如果您使用关系数据库来存储数据,则意味着遵循数据规范化原则,独立于感知性能问题。完成此操作后,如果您无法实现所需的性能,则可以考虑使用有限的策略非规范化来获得所需的性能。但是,在大多数情况下,规范化解决方案也将是最高效的解决方案。
那就是说,我并不完全清楚" group"," sub-group"和" item"在现实世界中建模。但是,数据规范化的原则绝对规定items
中多个记录的多列中的常见值应该被抽象为sub-group
中的单个记录。目前尚不清楚的是,您是否可以使用仅三个表,或者是否有其他级别的分组需要进行规范化。