我正在將舊數據庫系統升級到.NET +實體框架6(代碼優先POCO)+ PostgreSQL。爲了便於編程,我要拆分大型表(超過200場)劃分爲多個實體,如:EF6表拆分vs多個拆分的共享主鍵
Franchise
FranchiseLegalEntity
FranchiseBilling
FranchiseSignup
FranchiseAllocation
FranchiseCompliance
FranchiseMiscellaneous
FranchiseNotifications
我很高興地發現EF6支持「表分裂」:映射一個表到多個實體分割領域。
然而,試圖實現這一點,並在線閱讀很多頁面時,確認這在分割多次時是有問題的。實體框架不僅需要主體實體的導航屬性,還需要映射到該表的所有實體之間的導航屬性。對於我上面的場景,這需要21個無意義的導航屬性 - 如果我打擾他們使用雙向導航屬性,則需要42個導航屬性。
參見:How to separate large table into multiple discrete types using EF-Code-First
使用具有共享主鍵的多個表建議,一個是我的選擇。然而,考慮到EF的臃腫的SQL查詢生成以及PostgreSQL有時候具有複雜查詢的隨意查詢優化器,我擔心這個選項(100GB +數據庫)的性能。
總結:
表拆分
優點:最佳的查詢性能,最快在數據庫層
缺點來實現:污染的我的模特和OnModelBuilding()方法廢話,混淆其他開發商
跨多個表個共享主鍵
優點:最乾淨的車型&代碼,對於非傳統的數據庫推薦的解決方案
缺點:額外的工作來實現,可能表現較差
我的問題:
1)EF6是否改善了2+分裂的表分裂?
2)有沒有我沒有考慮過的因素?
3)有沒有其他的選擇?
P.S.我對使用[ComplexType]不感興趣使用[ComplexType]
也許你應該考慮使用視圖和創建視圖的實體?優點 - 簡單 - 缺點 - 不參考。另外考慮到一旦數據庫已經創建並且事情進一步改變,管理表分割會遇到困難。 –