重構數據庫以支持許多:許多:許多。在第二級和第三級,我們需要保留最終用戶的「映射」或對齊來自不同來源的數據,例如,多對多,包括來自不同來源的數據對齊
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