我正在与自己争论最好的方法。
以下是该方案。
我有一个包含用户列表的表。
为简单起见,我们说它看起来像这样:
Mike | male
Amy | female
Andy | male
等等。
然后我有一个颜色列表,让我们说4种颜色:
red
blue
green
yellow
任何用户都可以分配一种或多种颜色。
我是否向名为assignedColours
的用户表添加新列,创建一个名为colours
的新表,如下所示:
id | colour
1 | red
2 | blue
3 | green
4 | yellow
然后分配然后在用户assignedColours
coloumn中存储一个数组,如
Mike | Male | 2,3
Amy | Female | 1,3,4
或我是否使用颜色列创建颜色表,并将用户分配到该列,如:
Red | Blue | Green | Yellow
| Mike | Mike |
Amy | | Amy | Amy
还是有更好的方式一起完成这项工作吗?
我正在寻找一个答案,哪一个是首选方式和原因。
答案 0 :(得分:4)
如果您需要按颜色搜索,您的第一个解决方案会给您带来问题。
当你添加更多颜色时,你的第二个会给你额外的工作。
另一张加入人与人的表格。颜色将是一个很好的方式去。查看有关多对多关系的信息:http://www.singingeels.com/Articles/Understanding_SQL_Many_to_Many_Relationships.aspx。
答案 1 :(得分:4)
你会想要一个UserColours表...以及用户&颜色。
2个列,UserId,ColourId
UserId上的主键,ColourId,因此它们没有重复项。
答案 2 :(得分:3)
好吧,像MySQL这样的RDS(关系数据存储)这个想法就是拥有data normalized,因此很容易搜索。
因此,你最好的选择是保存一张颜色表,一个用户表和一个多对多表,保存用户颜色,他们的定义就是这一行
用户表
id | int
name | varchar
gender | varchar
颜色表
id | int
name | varchar
users_colors表
id | int
user_id | int
color_id | int
通过这种方式,您可以轻松找到具有特定颜色的所有用户,而使用非规范化方案,您会遇到问题,如何查询具有特定颜色的用户而不是其他用户?
答案 3 :(得分:3)
为什么不创建邻接表?它将允许更容易的连接和设置外键。
示例:
<强> 用户 强>
id| name | gender
-----------------
1 | Mike | male
2 | Amy | female
3 | Andy | male
<强> 颜色 强>
id | name
1 | red
2 | blue
3 | green
4 | yellow
<强> UserColors 强>
user_id | color_id
1 | 3
1 | 2
2 | 1
4 | 2
UserColors
表允许您将Users
与Colors
相关联。
该概念称为adjacency table
或join table
,用于映射one2many
和many2many
关系。
您可以在此处找到更为开发的示例:http://www.joinfu.com/2005/12/managing-many-to-many-relationships-in-mysql-part-1/