2016-12-29 42 views
0

我在构思数据库时遇到困难。对于一个问题,我有两种解决方案,我想知道哪一个最好。SQL在一个字段中创建多个信息或创建表

问题:

让我们用图片2个字段的表特产:speciality_id和speciality_name。 因此,例如:

1 - Mage 
2 - Warrior 
3 - Priest 

现在,我有一个字段,如USER_ID,名称,姓名等表用户... 在这个表中,有一个叫做专业领域。该专业存储一个整数,对应于表专业的speciality_id。

这对于只有一个专业的用户是可以接受的。我想改进模型,以便能够为用户提供多种特色。

这里是我的两个解决方案:

创建表“解决方法1”,这与speciality_id链接USER_ID和删除用户表的专业领域。因此,对于有2个专业的用户,将在表'solution1'中创建2行。

更改用户表中字段专业的类型,以便能够写下以逗号分隔的专业。 例如2; 3

我得到的第二个解决方案的问题是使我的表用户和我的表专业之间的外键,以链接它们。在将来我也可能会遇到更多的PHP困难,同时希望获得用户的功能(需要使用我认为的解析器)。

您发现哪种解决方案最好?

谢谢。

+2

解决方案1是迈向恕我直言,因为它可以让你保持一个整洁和规范化的数据库。解决方案2不好,因为它需要存储查询时难以处理的CSV。 –

回答

1

你的第一个解决方案绝对去。

创建第三个“多对多”表格,允许您将用户与多个专业相关联。这是你遇到的唯一方法。

在设计表格时,您总是希望每列都包含一个且只有一个数据元素。想想看看你的第二个解决方案是什么样的。当你想看到所有具有特定专业的用户时,你会做什么?

您可以尝试这样的事:

select * from user where specialty like '%2%' 

那么,当你有去12的特色,会发生什么?现在“2”匹配多个实体。你可能会进一步下去,并试图变得棘手,但是......你应该尽可能使数据设计尽可能正常,以避免所有的混乱,头痛和错误。去解决方案1.

1

我认为最好的办法是遵循解决方法1事业溶液2后最终会意志大量的复杂性上