2013-05-27 216 views
0

我被要求允許用戶在每個字段中輸入多個值。所以這個選項是無限的。每個字段可以有多個值

例如。欄目有: CompanyID- 公司名稱 網站 Key_Markets 中號& A_History 亮點 地區 評論

情景是,公司可以有多個網站,重點市場,區域,蝕刻。我將如何做到這一點專業?我正在考慮把每一欄放在一張獨立的桌子上。

+3

歡迎來到Stack Overflow。通過正確標記您的問題開始,是mysql或sql server 2008R2,而不是兩者。在這種特殊情況下,當您詢問可能的數據庫設計時,可能並不那麼重要,但您應該遵循這一規則。然後你可以閱讀關於關係數據庫的設計。你可以從這裏開始(http://en.wikipedia.org/wiki/Database_design)。 – Yaroslav

+0

規範化數據庫就足夠了。如果你不知道這意味着什麼,我已經聽說過關於這本書的數據庫設計的好消息。 –

回答

2

基本上有三種方法可以實現這一點。

1)將多個字段單獨寫入一列。這將是一個非常糟糕的設計,你將不得不在你的應用程序中進行拆分 - 不要那麼做;-)

2)使用一個包含多個組的表來存儲數據。這對於參數是有意義的,但如果你爲每個客戶有不同的價值,那就不是真的。例如:

  • CompanyID
  • 的GroupID
  • 位置

實施例:

108001, 'homepage', 1, 'www.mypage.com'; 
108001, 'homepage', 2, 'www.mysecondpage.com'; 
108001, 'homepage', 3, 'www.anotherpage.com'; 
108001, 'markets', 1, 'erp'; 
108001, 'markets', 2, 'software'; 
108001, 'region', 1, 'germany'; 
108001, 'region', 2, 'austria'; 
108001, 'region', 3, 'poland'; 

3)使用單獨的表的每個1:n的關係!這將是我想你的需求的最佳解決方案。這樣做的好處是您可以輕鬆擴展架構並在其中存儲更多數據。例如,如果您決定存儲每個地區或關鍵市場的用戶數量等。

另一點:使用n:m關係可避免數據庫中的雙重內容!例如,關鍵市場和區域應存儲在完全分離的表格中,並將客戶和密鑰市場的ID存儲在交叉表中。所以你不需要把鑰匙市場作爲每個客戶的字符串存儲!

+1

@Mag Ron - Re:上面的要點(1):**不要那麼做!**達斯汀說,我支持這一說法。在單個字段中組合值也會引發如下問題:允許多少個值?你如何區分他們,例如電話號碼(家庭,工作,手機,傳真,最近的親屬......)?最大組合長度是否開始達到最大行大小限制?只是不要去那裏。 – HABO

+0

我很感激所有的幫助。 –

+0

我正在這樣做。我把列放到自己的表中。現在我有大約30桌。但是,我收到一個錯誤,因爲我可以索引company_id的數量有多少。 –

0

您將需要一個數據庫結構,如:

table_master_companies 
    - record_id 
    - company_name 

table_websites 
    - record_id 
    - company_id 
    - website_address 

table_key_markets 
    - record_id 
    - company_id 
    - key_market 

等等,那麼你就需要使用連接來Concat的所有信息到一個單一的記錄。

+1

我建議將關鍵市場存儲在交叉表中,這樣您就可以通過將其ID分配給公司ID來避免數據庫中的冗餘。 –

+0

@dustinklien完全同意,我的錯誤! –

相關問題