重构数据库以支持许多:许多:许多。在第二级和第三级,我们需要保留最终用户的“映射”或对齐来自不同来源的数据,例如,多对多,包括来自不同来源的数据对齐
Order 17
FirstpartyOrderID => aha
LineItem_for_BigShinyThingy => AA-1 # maps to 77-a
LineItem_for_BigShinyThingy => AA-2 # maps to 77-b, 77-c
LineItem_for_LittleWidget => AA-x # maps to 77-zulu, 77-alpha, 99-foxtrot
LineItem_for_LittleWidget => AA-y # maps to 77-zulu, 99-foxtrot
LineItem_for_LittleWidget => AA-z # maps to 77-alpha
ThirdpartyOrderID => foo
LineItem_for_BigShinyThingy => 77-a
LineItem_for_BigShinyThingy => 77-b
LineItem_for_BigShinyThingy => 77-c
LineItem_for_LittleWidget => 77-zulu
LineItem_for_LittleWidget => 77-alpha
ThirdpartyOrderID => bar
LineItem_for_LittleWidget => 99-foxtrot
每个LineItem具有从其源(第一方|第三方)报告的每日数据点。
在我们的UI &应用,我们提供的工具来调整这些,那么我们希望把它们保存到最清洁的模式进行查询,使我们能够在diff的每日报告数据点,并执行其他日常计算(这是我们”我们也将在dbase中存储,幸运的是,一旦我们确定了这一点,应该是蛋糕)。
我们需要映射具有各自数据点的相关[第一方|第三方] line_items。我们将使用该关联来拉取每个line_items数据点集合以进行汇总和差异计算。
我考虑两种选择,标准的has_many,通过X2 - 或 - 可能(恐怖)ubermasterjoin表
OptionA:
order<<-->>
order_join_table[id,order_id,firstparty_order_id,thirdparty_order_id]
<<-->>line_item
order_join_table[firstparty_order_id]-->raw_order[id]
order_join_table[thirdparty_order_id]-->raw_order[id]
raw_order-->raw_line_items[raw_order_id]
line_item<<-->>
line_item_join[id,LI_join_id,firstparty_LI,thirdparty_LI
<<-->>raw_line_items
line_item_join[firstparty_LI]-->raw_line_item[id]
line_item_join[thirdparty_LI]-->raw_line_item[id]
raw_line_item<<-->>datapoints
=>我们依靠加盟来存储第一的所有映射|第三会& line_items
=>键raw_ *使这些顺序& LINE_ITEM细节查找
=>约循环引用和/或缺乏ö关切˚F正确映射逻辑,例如
顺序 - > LINE_ITEM - > raw_line_items
与
顺序 - > raw_order - > raw_line_items
OptionB:
order<<-->>
join_master[id,order_id,FP_order_id,TP_order_id,FP_line_item_id,TP_line_item_id]
join_master[FP_order_id & TP_order_id]-->raw_order[id]
join_master[FP_line_item_id & TP_line_item_id]-->raw_line_item[id]
=> FP_line_item + TP_line_item的每个组合写入join_master表中的记录
=>“理论上”查询容易/快速/灵活/性感
终于,我的问题:
一)从痛苦的亲身经历有关如何最好地执行/调整任何学习收获/优化多到许多一对多在轨关系
B)?
c)任何痛苦的陷阱(循环引用,慢速查询,意大利面条怪兽)要注意什么?
d)任何欢乐&善良Rails3,这使得这个神奇的容易&欢乐? e)任何人都写了“如何在Rails中实现多对多的模式,并使其性能更快?”&教程,我不知何故找不到?如果没有,我会跟进我们的希望是有帮助的学习收获..
感谢高级 -
--Jeff