是否可以将包含多个值的MySQL列作为外键?

时间:2013-07-29 14:49:19

标签: mysql foreign-keys mariadb

我正在学习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

1 个答案:

答案 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会将字段组合在一起并用分隔符分隔,默认为,