2010-02-26 146 views
2

我正在爲客戶設計一個系統,他可以爲他銷售的各種產品創建數據表單。 他將使用的字段數不會超過600-700(最壞的情況)。看起來他可能會在400 - 500(最大)的範圍內。一個包含許多字段或多個(數百個)字段的表的mysql表?

我腦子裏想的2種方法用於創建數據庫(使用元數據):

一)每個產品創建一個表,該表將只持有這個產品,這將導致數百表的字段必要但只有每個產品

b)中使用一個單一的表與所有速效表單字段(從電流300至最大700)的任何範圍,致使一個表,將有許多領域的neccessary字段其中只有約10%用於每個產品入口(產品應該通常不超過50-80字段)

哪種解決方案最好?請記住,表格的維護(創建,更新和更改)將使用元數據完成,因此我不需要手動更改表格。

謝謝!

/**** UPDATE *****/

只是一個更新,甚至在此之後很長一段時間(和聚集更多的經驗,配發),我需要一提的是normalizing你的數據庫是一個可怕的想法。更重要的是,幾乎總是沒有規範化的數據庫(總是從我的經驗來看)表明了一個有缺陷的應用程序設計。

回答

2

您的關鍵決定因素是是否需要normalization。即使您只是使用應用程序添加數據,您仍然需要迎合異常情況,例如如果某人的電話號碼發生更改,會發生什麼情況,並在應用程序的整個生命週期中插入多行?哪一行包含正確的電話號碼?作爲一個例子,你可能會發現你的數據中會有repeating groups,就像一個人有幾個電話號碼一樣;而不是有三個名爲「Phone1」,「Phone2」,「Phone3」的列,您可以將該數據分解到自己的表中。

規範化還存在其他問題,例如傳遞或非關鍵依賴關係。這些概念將有希望引導您進入數據庫表格設計,而無需使用modification anomalies,正如您應該希望的那樣!

4

我將有3個表:

  • 產品

    • ID
    • 其他任何你需要
    • ID
    • 字段名
    • 其他任何你可能需要
  • product_field

    • ID
    • PRODUCT_ID
    • FIELD_ID
    • 字段值
+0

你好pulegium, 我也想過類似的東西,但有一個問題:字段的類型可以是從布爾到文本的任何東西。在這種設計中,沒有辦法爲ecah字段設置正確的字段類型(理論上我可以使用TEXT,因爲它可以容納我需要的任何值,但我希望爲每個字段指定正確的字段類型然後) – mspir 2010-02-26 10:26:14

+0

,除非我有更多的field_value字段具有不同的字段類型......(field_value_int,field_value_text,field_value_decimal等)......但是,這個doesent感覺非常正確......? :) – mspir 2010-02-26 10:42:34

+1

向'field'表中添加一個'field_type'列。這仍然會讓您不得不將所有內容都作爲文本存儲在數據庫中,但可以根據需要爲字段定義自己的驗證規則。這會給你pulegium設計的所有靈活性,再加上你不僅僅限於你的數據庫引擎支持的類型,而且還可以有,例如,,'must_be_multiple_of_five_percent'驗證(用於折扣),'week_day_name'驗證等。 – 2010-02-26 11:05:12

1

Pulegiums解決方案是一個很好的路要走。

您不希望使用每個產品一個表的解決方案,因爲插入或刪除產品時不應更改數據庫的結構。只應插入或刪除一個或多個表的行,而不是表本身。

1

儘管可能有必要,但對於像我的產品列表那樣簡單的產品,可能有許多領域聽起來像您可能有一個有缺陷的設計。

您需要分析潛在的表結構,以確保每個字段包含不超過一條信息(例如,單個字段中的「2個錘子,500個釘子」是不好的),並且每條信息都沒有它屬於多個字段(例如,有phone1,phone2,phone3字段不好)。這些情況都表明您應該將這些信息移出到一個單獨的相關表中,並使用外鍵將其連接回原始表。正如pulegium所證明的,這項技術可以快速將事物分解爲三張桌子,總共只有十幾個字段。

相關問題