簡體   English   中英

我們何時應該采用一對一的關系模型,而不是將屬性添加到同一個表中?

[英]When should we go for one-to-one relation model vs adding attributes to same table?

我正在使用sails框架來構建一個網站和MySQL作為我的數據庫。 我有一個名為“Property”的表。 還有其他細節,如“總預算”,“保留期”,“可租賃區域”,“投資者份額”,“公司份額”,“銷售價格”以及更多與此屬性相關的屬性一對一的時尚。

我無法決定是否為這些細節創建單獨的小表(通過將它們分組在“Equity”,“Funding”,......等小表下),將“Property ID”作為每個小主鍵的主鍵表(在sails上創建一對一關聯)或簡單地將所有這些作為屬性在“Property”表下。 將它們作為屬性添加到“Property”表會使表格太大而大約有40列(這是一個問題嗎?)。

注意:所有這些屬性都是強制性細節,而不是任何時候的“NULL”。

如果所有字段都是強制性的,我會只選擇一個表格。

離MySQL限制 ,這不會有問題。

您的代碼將更易於編寫和閱讀。

對MySQL性能來說也會更好,因為在檢索數據時不需要JOIN表。


編輯 在其他用例中可以使用one-to-one關系。 例如,假設您有一個表“animal” ,其中包含“varchar name”“integer age”“decimal weight”列

但是存儲的動物可以根據其家庭將一些特定屬性存儲在另一個表中。

  • “integer owner_id”“enum breed”“dog”
  • “boolean can_fly”“整數number_of_eggs”“鳥”
  • “整數number_of_gils”“boolean live_in_freshwater”“fish”

Rantanplan the dog, Donald the duck and Nemo the fish都可以存儲在“animal”表中,並將它們的特定屬性存儲在另一個具有one-to-one關系的表中。

這是一個愚蠢的例子,但它提供了一個用例的概念。

正如亞歷克西斯·諾指出的那樣,你將通過一張桌來獲得成績。 40個屬性並不是很多,特別是對於業務邏輯。

但是,我想指出何時有單獨的表是有意義的。 這主要歸結為您的領域是保持靜態還是可能發生變化。

例如,如果您確定該物業中唯一的股份將是公司份額和投資者份額,那么只需要兩個字段。 如果您認為可能需要添加其他持有者,如果稍后再包含它們將會有點混亂(因為這些值都是強制性的)。

如果你使用mongodb,你可以使用arrayjson類型來支持這種動態。 因為它們在mysql中並不是固有的支持,所以最好為不同類型的共享創建表,並根據需要將每個Property與多個Share (一個Share大致看起來像[propertyId,shareType / shareTypeId,shareValue] )。

因此,嘗試將屬性划分為不同的類別,並查看每個類別中的成員是否將保持不變。 如果您認為將來可能會附加任何類別,請將其作為單獨的表格包含在內。

祝好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM