2010-11-15 101 views

回答

1

這一切都取決於軌。

如果您的應用程序是唯一訪問數據庫的應用程序(例如沒有其他工具正在寫入數據庫),則可以驗證應用程序代碼中的數據完整性。

然而,有些東西仍然是最好的數據庫。 validates_uniqueness_of就是一個很好的例子。兩個應用程序實例可能報告給定的唯一值,但可能存在競爭條件。在你的數據庫中有一個唯一的索引是一個好習慣。

我總是在我的應用程序代碼中處理完整性檢查,使用唯一性約束的索引。我不打擾foreign_key關係,我讓ActiveRecord處理。

+2

非常糟糕的主意。最終會有其他事情影響你的數據庫,並且當你在某個時候進入新的應用程序時,你是否真的想重新創建所有的數據完整性規則。讓應用程序保持數據庫的完整性是愚蠢和短視的。我曾經看過數百個數據庫,並且從來沒有見過沒有數據完整性保持的數據庫完整性的數據庫。非常糟糕的想法,試圖保持在datbase中,而不是設置FKS等 – HLGEM 2010-11-15 14:56:07

+3

它不是短視。如果您以後需要交換到另一個數據庫系統(如Postgres或某種NoSQL解決方案),該怎麼辦?如果你想在MySQL中使用數據庫分片怎麼辦?讓我知道您的面向數據庫的數據完整性如何保持。 – Ariejan 2010-11-15 15:22:56

+1

您是否確實表示無論框架如何切換數據庫都便宜?在初始實現後,這些棘手的問題和瘋狂的決定過於危險,而我知道Ruby遷移更容易,還有其他的事情要考慮 - 比如數據傳輸,數據庫是否與其他數據庫完全一樣(例如,在/ varchar限制截斷時/ like/group中的不同/ activerecord與新數據庫一起工作的方式在連接屬性上進行類型轉換)並不是我會做的事情。 – 2010-11-15 18:40:21

0

我一直跟上這一點,我想出了一個混合解決方案。

我認爲默認的Rails多態性功能非常適合快速原型設計。但是對於長期解決方案,我使用中間表實現了自己的多態關聯(例如Commentable,Votable)。我無法找到該文章,但Bill Karwin在本網站的幾處答案中指出了這種方法。

我不打算在分片,但如果我這樣做,我認爲Rails的默認解決方案將是一個很好的解決方案。

我寫了我自己的Mixins來模擬默認的Rails多態性功能。這是一個有點棘手的外鍵添加或添加關係後,表已填充,但事情似乎仍然順利運作。

最後,我的項目最終會有多個服務在未確定的後端運行分析,最有可能是Java。除了參考完整性外,擁有標準的關係模型最適合我的需求。

總而言之,我認爲這取決於,但在90%的情況下,具有數據庫級別完整性是最好的。