问题描述
|
我试图摆脱我的联接表,以支持对大型数据集更快的数据库设计。我计划执行此操作的方法是将子代的ID存储在父记录中。
像这样:
父母表:
id,child1_id,child2_id,child3_id,... child(100)_id
子表:
id,grandchild1_id,grandchild2_id,... grandchild(100)_id
楷模:
父级
has_many:children,:depend =>:destroy
accepts_nested_attributes_for:children
儿童
当属:父母
has_many:grandchildren,:depend =>:destroy
accepts_nested_attributes_for:孙子
孙子
归属于:child
我的最终结果将是能够以相同的形式编辑父母,子孙。通过使用联接表已经可以做到这一点,但是我渴望提高性能
当我依靠联接表提供的功能时,如何获得更好的数据库性能?
请帮助,我已经在网上搜索很多天了:/谢谢!
解决方法
这是糟糕的数据库设计。如果父母有超过100个孩子怎么办?
3条建议:
考虑使用NOSQL数据库存储。
也许使用acts_as_tree。
您不能将其标准化为:
上级:id
子代:id,parent_id
孙子:id,child_id
,您确定性能有问题吗?如果仅是预期,则可能正在进行过早的优化。
如果您能够创建如此多的列作为子代数,那么我几乎可以肯定,您要避免的数据库设计不是问题。只要确保数据库具有正确的索引即可。
一个正在运行的(并包含测试的)应用程序是考虑性能的一个很好的起点。您可能会发现使用最简单的方法可以接受性能。