2

給SO中的每個人的好日子。爲具有多個可選列和依賴關係的表設計數據庫

我在爲我的項目設計數據庫時出現問題,這是eyelet工廠生產模塊。爲了記錄,我爲我的項目使用了MySQL,C#.NET Framework和NHibernate。

故事背景

我的項目,將有項目表。項目定義了包括在生產孔眼中的所有項目。它可以是可以出售的原材料(卷材,油漆,板材等),中間產品(現在的打孔產品)和最終產品(裝配產品,拋光產品,彩色產品等)。

所有項目都有名稱股票閾值列,但一些項目可以有例如外徑顏色列,而一些項目沒有那個。 可選列這裏依賴於項目類型(例如線圈只有外徑,內徑和高度,而Paint只有顏色,最終產品包含所有這些)。 項目也有多個單位(千克,個人電腦,包等),可以轉換爲其他單位。同樣,某些項目可能只有Kg單位關聯,而其他項目可能有Kg和Pcs單位關聯(以及它們之間的轉換速率)。

這就是我的想法。

  1. 項目
    • ID
    • ItemType_ID [FK]
    • 名稱
    • 庫存
    • Treshold
    • 時間戳(CreatedAt,UpdatedAt,DeletedAt)
    • IsDelet ED
  2. 尺寸
    • 的Item_ID [FK]
    • 外徑
    • 內徑
    • 身高
  3. 顏色
    • 的Item_ID [FK]
    • 顏色
  4. 的ItemType
    • ID
    • 名稱
  5. 單位
    • ID
    • 名稱
  6. Item_Unit關聯表

    • 的Item_ID [PK]
    • UNIT_ID [PK]

    ......還沒說完,來這裏尋求建議。

我想問的事情是:

  1. 這是我的第二個設計,而我的第一個設計將在項目表中的所有可選 列,並指派空當用戶沒有輸入該列的 值。使用我的第一個設計更好嗎?導致它 簡化我的代碼(只選擇1個表格)。但是我聽說在數據庫中有空值是不好的?
  2. 在這種情況下使用繼承更好嗎?使用父表和子表(項目表和線圈表作爲孩子)?
  3. 裝配項目,彩色項目,拋光項目,它們的前提項目可以是中級項目或其他最終項目(某些彩色項目可以由中間項目+塗料製造,其他一些彩色項目可以從裝配項目+繪畫,而裝配項目總是由中間項目組成)。我如何設計表格以便查找?在我的主要製作形式中,將會有組合框選取組件。
  4. 如何在此場景中存儲物品轉化率?

任何意見,更正或甚至整個作出了讚賞。非常感謝你

回答

0

對於每個項目你將有很多空列。在Items變化不大的某些情況下,這不被稱爲不良設計。

,如果你的項目是具有比任何使用父子關係或最好的辦法太多不同的屬性,我建議是使用Entity–attribute–value model

這種模式將有較少的列,但更多的行。檢查此模型是否適用於您的問題。

相關問題