2016-09-16 51 views
1

我有一個表,在我需要添加行,如下所示:多行VS逗號分隔欄的設計在MySQL

id | empid | manager | page 
------------------------------ 
1 | emp001 | mg001 | page1 
2 | emp001 | mg001 | page2 
3 | emp001 | mg002 | page1 

所以我在混亂如上圖所示是否使用,或者我應該用逗號分離像,

id | empid | manager | page 
--------------------------------- 
1 | emp001 | mg001 | page1,page2,page3,page4.....  
2 | emp001 | mg002 | page2,page10,page5,..... 

如果我和選項1去我覺得行的這個數字不斷增加和empidmangerid可以重複。但是,如果我去與option2然後我覺得它沒有規範化的形式。

任何人可以建議哪個更好的解決方案,爲什麼?

+1

這有什麼錯數Ø f行增加?這實際上是數據庫作業 – Farkie

+0

它真的取決於你想如何分析數據 - 也許考慮2個連接表 - 我想了解更多信息和一些示例代碼和數據 – kerry

+0

@kerry:感謝您的快速回復。當我重新構建數據庫時,問題是我們正在爲員工分配一些管理員,並且這些管理員分配在不同的頁面上,因此他們分配到哪個頁面也需要存儲。頁面不存儲在任何不同的表格中,而是被動態添加。我希望你瞭解情況。我不能提供任何代碼,因爲它不在我手中。所以給了上面的例子。 – Pratima

回答

0

增加行數沒有任何問題。關係數據庫對規範化的數據效果最好,並且可以使用提供的索引在表之間執行有效的操作。

因此,選項1中提供的方法實際上是將數據提取到1NF(第一範式),這樣做會更好,並且不會在將來咬你,就像選項2一樣。

如果將來你可能會想出分析員工的想法和每個網頁他們的經理,這是選項2個叮咬你在哪裏。

作爲附加的註釋我想你可以降低你的列所需的存儲,並停止通過添加額外的表來存儲員工和管理字符串,只有一個整數列引用它們重複自己。至於列我覺得它多餘的追加部分「頁」製作的列值看起來像「頁X」。列名已經告訴你它包含頁面值,所以在這種情況下,整數列X也足夠了。

我發現下面的模式是一個良好的開端:

  • 僱員表存儲的ID作爲整數和名稱爲文本
  • 經理表管理類比到僱員表
  • Employees_Managers 表中存儲其ID,外鍵Employees.ID和Managers.ID和整數類型的網頁
+0

感謝您的所有解釋。這對我向上級提出真正有用。這裏的每條評論都給出了一些知識 – Pratima

+0

你可以註冊並接受你認爲有幫助的答案。這裏是[如何做](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)。這給了該職位的作者。 –

+0

我真的想投票並給予信貸,但它說我沒有這麼多的聲譽賺到了任何一個投票 – Pratima

0

YMMV取決於確切的用例,但作爲一條經驗法則 - 保持數據庫正常化(或至少不要違反1NF,如第二種選擇所示!),以便您可以輕鬆查詢/更新它。建立數據庫是爲了存儲行並有效地查詢它們,除非你有一個redonculous(閱讀:類似facebook的)行數量,不要試圖重新發明輪子。

+1

您的里程可能會有所不同?那是什麼?美國汽車廣告? – Strawberry

+0

@Strawberry它用於表達注意確切的數字(在這種情況下 - 性能統計)可能會因情況而異 – Mureinik