mysql - 是否可以让一个包含多个值的 MySQL 列作为外键?

标签 mysql foreign-keys mariadb

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

相关文章:

php - 无法运行查询 : SQLSTATE[HY093]: Invalid parameter number: parameter was not defined using webservice

php - mysql插入日期时间不输出正确的时间

mysql - 外键和索引

php - Laravel - 1215 无法添加外键约束

MySql.数据.MySqlClient.MySqlException : Incorrect datetime value

php - 如何在结果中以 0 排序

sql - 打开/关闭 DB2 中所有表的外键检查

MySQL/MariaDB 命名空间 xml 使用 ExtractValue 返回 null

mysql - SQL VIEW简化/解决更快的查询

mysql - 如何访问我的 docker mariadb?