我們的數據庫包含一個用於存儲用戶特定數據的USERS表,並且每個用戶都有一個狀態,即active
或inactive
。使用USERS表中的is_active
布爾值字段來指示狀態即可。同時,對於「不活躍」的用戶,我們將其他信息保留在另一個字段中,這對於處於相反(「活動」)狀態的用戶來說是不相關的(因此設置爲空)。DB設計問題
我的問題:更好的設計是保留USERS表中的is_active
布爾型字段以清楚地指示狀態,或者根據可用的次要標準實際推導出狀態(附加信息的可用性總是,只有當用戶處於狀態「不活躍」)?
也就是說,它看起來像is_active
字段是關於數據庫規範化的冗餘,但同時,可用於派生它的邏輯在第一次掌握時並不那麼明顯,並且使得關於狀態看起來很麻煩並且包含非明確的邏輯。
取決於您的最終目標是什麼。我不認爲這會使得它在具有is_active字段時顯着減少標準化,因爲您不是跨表重複數據。此外,它使得與數據庫交互更容易,讓您有一個字段可以檢查用戶是否處於活動狀態。它還避免了在用戶未激活時附加字段未更新的問題(假設is_active字段不爲空)。但後來我總是被教導說,第三種正常形式是應用程序性能和數據完整性之間的一個很好的折衷點。 – Brian 2012-02-21 22:23:10