首页 > 解决方案 > 只有一列,如何在 mysql 中为 A 一对多 B 设计关系

问题描述

1).它是一对多
2).它可以用来查询
这是我的想法,也许有另一个更好的?

select * from table where student_id in (7,1);

 column(teacher_id)     column(student_id)

   1               7
   1               9
   1               11
   2               1

//例如:select * fro table where categories contains '|9|' 或类别包含“|1|”;

 column(sport_id)     column(categories)

   1               |7|8|9|10|11|12|

   2               |1|9|

两种方法,一种是老师和学生(组合)

一个是类别是运动中的一个属性,

我认为,属性不需要使用很多列,对吧?谢谢你的回答。

标签: javamysql

解决方案


您的第一个表设计很好,并且是一对多关系的典型。但是,对于您的第二个表,该数据未标准化,因此可能实际上不应该存在于您的数据库中。如果您需要生成类似于第二个示例的表视图,那么 MySQL 提供了一个方便的聚合函数GROUP_CONCAT,可以使用,例如

SELECT
    teacher_id,
    GROUP_CONCAT(student_id SEPARATOR '|') students
FROM yourTable
GROUP BY
    teacher_id;

第二个非规范化版本不好的主要原因是很难像这样查询管道分隔的数据。数据库旨在将功能和逻辑应用于行,而不是真正应用于列。


推荐阅读