我被要求允許用戶在每個字段中輸入多個值。所以這個選項是無限的。每個字段可以有多個值
例如。欄目有: CompanyID- 公司名稱 網站 Key_Markets 中號& A_History 亮點 地區 評論
情景是,公司可以有多個網站,重點市場,區域,蝕刻。我將如何做到這一點專業?我正在考慮把每一欄放在一張獨立的桌子上。
我被要求允許用戶在每個字段中輸入多個值。所以這個選項是無限的。每個字段可以有多個值
例如。欄目有: CompanyID- 公司名稱 網站 Key_Markets 中號& A_History 亮點 地區 評論
情景是,公司可以有多個網站,重點市場,區域,蝕刻。我將如何做到這一點專業?我正在考慮把每一欄放在一張獨立的桌子上。
基本上有三種方法可以實現這一點。
1)將多個字段單獨寫入一列。這將是一個非常糟糕的設計,你將不得不在你的應用程序中進行拆分 - 不要那麼做;-)
2)使用一個包含多個組的表來存儲數據。這對於參數是有意義的,但如果你爲每個客戶有不同的價值,那就不是真的。例如:
實施例:
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存儲在交叉表中。所以你不需要把鑰匙市場作爲每個客戶的字符串存儲!
@Mag Ron - Re:上面的要點(1):**不要那麼做!**達斯汀說,我支持這一說法。在單個字段中組合值也會引發如下問題:允許多少個值?你如何區分他們,例如電話號碼(家庭,工作,手機,傳真,最近的親屬......)?最大組合長度是否開始達到最大行大小限制?只是不要去那裏。 – HABO
我很感激所有的幫助。 –
我正在這樣做。我把列放到自己的表中。現在我有大約30桌。但是,我收到一個錯誤,因爲我可以索引company_id的數量有多少。 –
您將需要一個數據庫結構,如:
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的所有信息到一個單一的記錄。
我建議將關鍵市場存儲在交叉表中,這樣您就可以通過將其ID分配給公司ID來避免數據庫中的冗餘。 –
@dustinklien完全同意,我的錯誤! –
歡迎來到Stack Overflow。通過正確標記您的問題開始,是mysql或sql server 2008R2,而不是兩者。在這種特殊情況下,當您詢問可能的數據庫設計時,可能並不那麼重要,但您應該遵循這一規則。然後你可以閱讀關於關係數據庫的設計。你可以從這裏開始(http://en.wikipedia.org/wiki/Database_design)。 – Yaroslav
規範化數據庫就足夠了。如果你不知道這意味着什麼,我已經聽說過關於這本書的數據庫設計的好消息。 –