什么是正确的取决于您对数据的使用,但是在将这些值连接到字符串时需要注意一些事项。例如,如果您想查找所有包含“Honda”的行(您可能会),这可能是存储数据的不好方法。
我可能会制作一些额外的表格:car_make、car_make_group 和 car_make_to_group。我会放
car_make (make_id, make_desc)
------------------
1, "Toyota"
2, "Honda"
3, "Nissan"
我会像位标志枚举一样对我的组进行编号,但这并不是很重要..它只是一种以不冲突的方式将编号分配给组的方法。它还具有一切都是相加的特性(group2 + group4 = group6)。不过,我总是提供一个关联表。
car_make_group (make_group_id, make_group_desc)
------------------
1, "Toyota"
2, "Honda"
3, "Toyota, Honda"
4, "Nissan"
5, "Toyota, Nissan"
6, "Honda, Nissan"
7, "Toyota, Honda, Nissan"
最后,我会制作一个关联表来帮助查询:
car_makes_to_group (make_id, make_group_id)
------------------
1, 1
1, 3
1, 5
1, 7
2, 2
2, 3
2, 6
2, 7
3, 4
3, 5
3, 6
3, 7
使用多个表将使您对未来的更改具有一定的灵活性。例如,您稍后可能会意识到您想使用 JSON 并更改 make_group_desc 以保存 JSON 字符串而不是逗号分隔的字符串。
您将能够运行临时查询,您可以在其中找到包含“Toyota”的每一行:
Select m.make_id, m.make_desc, g.make_group_id, g.make_group_desc
FROM car_make_to_group t
INNER JOIN car_make_group g
ON (t.make_group_id = g.make_group_id)
INNER JOIN car_make m
ON (t.make_id = m.make_id)
WHERE m.make_desc = "Toyota"