2010-08-11 57 views
1

我正在與網上商店合作,目前產品是否可用,以及是否通過產品表上的int字段啓用。分離到不同的表或使用枚舉類型?

他們希望我爲此添加更多內容,例如「庫存與供應商」,「缺貨,x天內出貨」等。我正在考慮放棄旗幟,並創建一個枚舉類型的狀態字段,其中'可用','缺貨','未來很快',停產'等。

這樣做的最好方法是什麼?將枚舉類型添加爲產品上的新列?

我被告知應該添加一個名爲Status的單獨表,並在產品表中有一個外鍵引用,以便將來更易於更改。我不確定情況如何,因爲枚舉類型似乎很容易改變。您可以添加它,從中刪除並重命名項目。

回答

0

帶有FK的表格會佔用硬盤空間少一點,但我更喜歡使用Enum類型。這種差異通常很小,並且不會超過標準化的性能優勢。

2

如果您預計會更改枚舉,則應該使用單獨的表格。 INSERT或UPDATE比ALTER更便宜。

此外,請考慮如何確定該字段的可接受值。如果它是枚舉,則必須對選項進行硬編碼或檢查數據庫模式。如果它位於單獨的表格中,則可以選擇填充選項列表。

+0

它會如何不那麼有效?這將導致每個產品的加入聲明,而不是插入和未來幾年之間的差異..? 我喜歡驗證的重點,可能以這種方式作爲驗證和填充表單的更簡單方法。這意味着(希望)未來增加一個新的地位只是一個新的行。 – Richard 2010-08-11 06:45:04

+1

@Richard增加的費用是在應用程序中,而不是數據庫。如果您改變枚舉,則必須搜索代碼以更改引用枚舉的任何代碼以反映架構的更改。使用JOIN的代碼將按原樣運行。 – cbednarski 2010-08-11 07:05:57