Database-Design

區分記錄與相關欄位

  • March 21, 2016

我是新使用者(顯然),非常感謝問題寫作建議和回答建議:

我有很多相互關聯的表格,這些表格很大程度上取決於我的Products表格,這是某個產品的主列表。任何給定產品的大部分資訊都是由Shipments表中的特徵決定的。和之間存在one-to-many關係。每個貨件都有一個欄位,但除了具有唯一版本外,任何貨件都可能是試貨。Shipments``Products``Product Version

哪個設計更好?

我想到了兩種可行的設計。

1. 目前設計

Product Version欄位包含每種可能性的值。例如,版本 7.6 的產品將具有值7.6,但作為試用版的 7.6 產品將具有值7.61。要選擇所有 7.6 產品,我會使用一個Like "7.6*"語句。這會將所有版本保存在一個表中,並且我已為下一個使用者記錄了這一點。令人惱火的是,我必須有一個包含必要 SQL 的欄位才能查詢該特定版本。此 SQL 位於ProductVersion表中。

2.添加欄位

我可以為每批貨物設置一個 True/False 欄位,表明它是否是試用版……(我還必須考慮到新使用者在沒有我的情況下能夠輕鬆使用它,但這有點主觀,這不是核心問題。)

我不知道這是否有區別,但是

我目前設置的部分樂趣在於,只有一些記錄Products關聯Shipments,因為有一段時間沒有記錄發貨。貨物也會在不同的過程中導入數據庫,有時在相關產品之後。

那麼: 為試用產品添加布爾欄位是不是更好的設計?

我鼓勵那些比我更有知識的人編輯這個答案或問題,如果它對將來閱讀這篇文章的人有益的話。

經過實驗,我實現了Option 2,試用版的布爾欄位。

我認為這個解決方案是

  • 更好的正規化和
  • 讓使用者更清楚

當每個屬性被分解成自己的欄位時(而不是有一個版本欄位,它必須描述多個屬性,如產品版本以及它是否是試用版)。

在某種程度上,如果我可以添加新的版本號(如 7.622 然後 7.6221)以獲得更具體的資訊,這可能是有益的,但這可能會讓人難以理解,而且也有點武斷。另一種選擇——將版本/試用版分成多個欄位——也阻止其他人創建新的可能重複或不必要的版本號,這會使事情更難找到/查詢。

這些附加欄位,例如試驗布爾值,Product通過和 之間的一對多關係Products與每個欄位相關Shipments

引用自:https://dba.stackexchange.com/questions/108018