我正在学习MySQL,并在Fedora 19中安装了MariaDB。
我有一个场景,我需要一个列包含多个值,以减少列分配的可能冗余。
在下面的示例中,是否可以让tags
表的log
列中的每个值引用tag_id
表中的tags
列?
用户
user_id |
1 |
活动
activitity_id |
1
登录
user_id | activity_id | tags
1 | 1 | 1,3,5 # multiple foreign keys?
代码
tag_id |
1 |
2 |
3 |
4 |
5 |
如果不可能,任何人都可以根据上述数据方案提供最可行解决方案的逻辑吗?
类似问题:
Are multiple foreign keys in a single field possible?
MySQL foreign key having multiple (conditional) possible values
it is possible to reference one column as multiple foreign keys
答案 0 :(得分:2)
如果你不想组成一个“中间人”表来链接这两个表,你可以在字段中有一个逗号分隔值,你只需要在进行查询时使用find_in_set
mysql函数
使用find_in_set
SELECT
log.user_id, log.activity_id, log.tags,
GROUP_CONCAT(tags.name) as taggedNames //This assumes there is a field called `name` in tags table
FROM
log
LEFT JOIN tags
ON
FIND_IN_SET(tags.tag_id,log.tags)
GROUP BY
log.activity_id
GROUP_CONCAT会将字段组合在一起并用分隔符分隔,默认为,