首页 > 解决方案 > 允许一列与另一个表中的多行相关

问题描述

对于一项任务,我们应该对网站进行“逆向工程”并尝试重新创建数据库结构。我只完成了一篇专栏,但我不知道如何让它发挥作用。

对于这项任务,我选择“逆向工程”评价我的教授网站。我有 4 个表:用户、评论、教授和学校。在网站中,您可以保存多个教授,但这就是我遇到的问题......我不知道要设置“用户”表的“saved_professors”列的数据类型。我希望它在数组中包含每个教授的 id,但据我所知,您不能将数据类型作为数组(SET 和 ENUM 看起来很接近,但我很确定这些不会起作用我需要它的方式...)

有没有办法做到这一点?或者我应该将它设置为 VARCHAR 或 TEXT(它只会在字符串中保存一个 id 列表)?


注意:这不是关于存储一串 id,我已经知道该怎么做,而且我知道这不是最好的方法,这就是我专门问这个问题的原因......请不要将其标记为“重复”在数据库列中存储分隔列表真的那么糟糕吗?...这是一个很好的问题/答案,但它没有在这里回答我的问题。

标签: sqldatabasemany-to-manyrelational-database

解决方案


你需要另一张桌子。

你描述的是多对多的关系。一个学生可以救很多教授,同样一个教授也可以被很多学生救。

每个多对多关系都应该存储为新表中的一组行:

CREATE TABLE saved_professors (
  user_id INT NOT NULL,
  professor_id INT NOT NULL,
  PRIMARY KEY (user_id, professor_id)
);

在此表的每一行中只存储一对。这意味着对于每个学生,该表中可能有很多行。

另请参阅我的回答:在数据库列中存储分隔列表真的那么糟糕吗?


推荐阅读