首页 > 解决方案 > 来自多个表的 MySQL 最喜欢的项目

问题描述

当有多个表可供选择时,存储收藏夹最有效的方法是什么。

例如:您有一个用户(ID,姓名,...),食物(ID,卡路里,...),鸡尾酒(ID,酒精,...)和糖果(ID,姓名,...),用户可以从这些表格中收藏多个元素。解决这个问题的最佳方法是什么。

我的想法是创建一个多对多关系,我让用户与上面的每个表(用户食物、用户鸡尾酒、用户糖果)或我有外键的最喜欢的表建立关系上面提到的所有表格。

我猜后者不是最佳解决方案。

标签: mysqlsqlmany-to-manyentity-relationship

解决方案


你基本上有两个选择:

create table favorites (
    favoritesId int auto_increment primary key,
    userId,
    which varchar(255),
    id int,
    foreign key (userId) references users(userId)
);

这简短、简洁,可让您添加新实体。

或者,您可以单独列出每个:

create table favorites (
    favoritesId int auto_increment primary key,
    foodId int,
    cocktailsId int,
    . . .
    foreign key (userId) references users(userId),
    foreign key (foodId) references foods(foodId),
    foreign key (cocktailsId) references cocktails(cocktailsId),
    . . .
);

这不太简洁,但它确实允许您添加显式外键引用。如果需要,它还可以轻松地在单行上表示多个收藏夹。


推荐阅读