2016-09-16 52 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