2014-02-24 125 views
0

假設在連接到Postgres數據庫的Rails應用程序中,有一個名爲'Party'的表,可以有少於5個明確定義的party_types,如'Person'或'組織'。Rails:規範化或不規範化幾個值

您是否將party_type存儲在派對錶中(例如party.party_type ='Person')或對其進行規範化(例如party.party_type = 1和party_type.id = 1/party_type.name ='Person')?爲什麼?

回答

1

如果一方類型可以在代碼中定義的,我肯定會用名「人」等去

如果你希望這樣的類型將由管理員/用戶動態地添加,並且有它這樣的GUI ,然後將其設置爲party.party_type = 1

當然,在「1」VS「Person」之間會有一個db存儲/性能考慮因素,但如果應用程序不是那麼大,那麼考慮周到時就太小了。

1

這裏有兩個問題:

  1. 你處理這些類型一般與否?
  2. 您是否向用戶顯示該類型?

如果對(1)的回答是「是」,那麼在表中添加一行顯然比改變約束和/或應用程序代碼更可取。

如果對(2)的答案是「是」,那麼在數據庫中存儲人可讀標籤可能更適合翻譯成應用程序代碼中的人類可讀文本。

所以簡而言之,你會大概希望有一個單獨的表。另一方面,如果所有類型都預先知道,並且只是使用它們來驅動應用程序邏輯的特定路徑而不直接顯示給用戶,那麼單獨的表可能是多餘的 - 只需定義適當的CHECK以將該字段限制爲有效值並清楚記錄每個價值。


換句話說,你可以添加一個新的類型和應用程序的邏輯將繼續工作,或者你還需要更改應用程序邏輯是什麼?