我正在学习 MySQL 并在 Fedora 19 中安装了 MariaDB。
我有一个场景,我需要一个列包含多个值,以减少列分配的可能冗余。
在下面的示例中,是否可以让 log
表的 tags
列中的每个值都引用 tag_id
中的列标签
表?
用户
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
最佳答案
如果您不想构建一个“中间人”表来链接两个表,您可以在字段中使用逗号分隔值,您只需要使用 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 将一个字段组合在一起并用分隔符分隔它们,默认为 ,
关于mysql - 是否可以让一个包含多个值的 MySQL 列作为外键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17927131/