连接数据库中的两个项目 - 最佳方法?

时间:2013-12-25 06:24:35

标签: mysql sql performance database-design

在MySQL数据库中,我有两个表:用户和项目

这个想法是,用户可以根据需要创建任意数量的项目,每个项目都有唯一的ID,并且它们将被连接,以便我可以显示特定用户的所有项目。

在性能和清晰度方面哪种方法更好?是否真的存在差异?

  1. 每个用户都将包含一个包含项目ID列表的列,查询将检索所有匹配的项目行。
  2. 每个项目都将包含一个包含创建用户ID的用户ID的列,该查询将调用具有特定用户ID的所有项目。

4 个答案:

答案 0 :(得分:2)

让我澄清为什么方法2优越......

方法1意味着您要在同一数据库字段中打包几个不同的信息。这违反了atomicity的原则,因此违反了1NF的原则。结果:

  • 索引不起作用(对性能不利)。
  • FOREIGN KEY和类型安全不起作用(对数据完整性不利)。

实际上,方法2是表示这种“一对多”关系的标准方式。

答案 1 :(得分:1)

只要某个项目没有多个所有者,它就是one to many关系。这通常会减少到您提到的第二种方法,例如。 user表格中有created_byItems列。

答案 2 :(得分:1)

第二种方法更好,因为它在one-to-manyUSER表上定义了ITEM关系。

您可以在ITEM列的USERID表格上创建外键,该列引用USERID表格中的USER列。

您可以轻松加入这两个表,索引也可用于该查询。

答案 3 :(得分:1)

如果用户可以拥有一个或多个项目,但每个项目仅由一个用户拥有,那么您将拥有经典的一对多关系。

第一个选项,将相关ID列表填入单个字段,这是完全错误的做法。

为每个表分配唯一标识符字段(称为主键)。并在Item表中添加一个额外的字段,一个外键,即拥有该项目的User的id。

喜欢这个ERD(entity-relationship diagram)......

Diagram of two tables, parent table user_ and child table item_

您有一些关于relational database设计和normalization的了解。