如果我發現自己想要對存儲在我的關係數據庫中的對象進行深層複製,是否必須在架構上做一些根本性錯誤?這是另一個問題(更詳細的問題),我問了一個不同的角度,但沒有得到很多回應稱爲Copying Relational Table Data。數據庫和深度複製
數據庫和深度複製
回答
這取決於您的關係表代表什麼,以及您的哪些實體組合在一起以構建「業務對象」。例如,如果您有一個內容管理系統的關係模型,其中包含一個「Postings」表和一個「Text_lines」表,每個Posting包含一個文本行列表,那麼您的業務對象「Posting」的有效副本將最有可能成爲「Postings」實體以及所屬Text_lines實體的深層副本。
另一方面,如果有兩個表「部門」和「員工」,部門的正確副本最有可能不是深層副本(至少,如果每個員工只在一個點與一個部門相關聯及時)。在關係數據庫方案中,這些差異常常與分配給關係的參照完整性檢查並行。可以使用具有「ON DELETE CASCADE」完整性的外鍵約束來建模關係「Postings」 - >「Text_lines」(當然,如果數據庫支持的話)。然而,「部門」 - >「員工」不應該在它上面有這樣的「ON DELETE CASCADE」檢查。
不一定。我自己做了這個,並取得了很大的成功來實現版本控制方案。基本上可以對整個圖進行版本控制(使用compite密鑰,其中密鑰的一部分是事物ID,另一部分是版本號),我們可以輕鬆訪問所有以前版本的圖或子圖。
要清楚的是,DB架構師推薦這個方案;他的觀點有很大的影響力,解決方案並不是我的第一選擇。但最終它運作得非常好。
通常,如果複製父對象,則只需將引用複製到子對象,而不是對象本身。但是,有些情況下,像保留特定時間點的對象狀態,需要複製子對象。所以,要回答你的問題,這個場景應該讓你停下來思考,但並不意味着你做錯了什麼。
我認爲,如果你需要一個數據庫對象的彈性克隆,那麼你最好的辦法就是執行一個深層複製 - 至少複製所有那些在未來某個時候可能會改變的項目。我沒有看到除了實現一些寫入時複製風格的'克隆'以外,還有很多其他選擇,雖然在某些情況下它可能是正確的,但會引入複雜的額外邏輯。
- 1. 限制數據庫樹深度
- 2. GWT覆蓋深度複製
- 3. Ruby:對象深度複製
- 4. 如何深度複製NSMutableURLRequest?
- 5. 鏈式Java深度複製?
- 6. elisp的深度複製 - consing
- 7. 深度複製陣列
- 8. 如何深度複製
- 9. 深度複製Java中
- 10. Python C APi深度複製
- 11. S4對象深度複製
- 12. 功能深度複製
- 13. 深度複製嘗試
- 14. 深度複製散列表
- 15. 在C ... malloc中深度複製數組?
- 16. 深度複製多維數組
- 17. 複製/深度複製和變量範圍
- 18. 我怎樣才能複製和深度複製[] [] []結構
- 19. 複製進度4GL中的數據庫
- 20. 以角度深度複製對象?
- 21. Azure SQL數據倉庫sys.dm_pdw_exec_requests的深度
- 22. 複製mysql數據庫通過複製數據.frm和.ibd
- 23. C++如何深度複製未知數據類型的結構?
- 24. 深度數據庫中的數據庫Vs緩存管理
- 25. 將深度渲染緩衝區複製到深度緩衝區
- 26. 數據庫複製
- 27. 數據庫複製
- 28. 數據庫複製
- 29. 淺層和深層複製
- 30. 深複製[]和ArrayList的Java