java - 只有一列,如何在 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|
两种方法,一种是老师和学生(组合)
一个是类别是运动中的一个属性,
我认为,属性不需要使用很多列,对吧?谢谢你的回答。
解决方案
您的第一个表设计很好,并且是一对多关系的典型。但是,对于您的第二个表,该数据未标准化,因此可能实际上不应该存在于您的数据库中。如果您需要生成类似于第二个示例的表视图,那么 MySQL 提供了一个方便的聚合函数GROUP_CONCAT
,可以使用,例如
SELECT
teacher_id,
GROUP_CONCAT(student_id SEPARATOR '|') students
FROM yourTable
GROUP BY
teacher_id;
第二个非规范化版本不好的主要原因是很难像这样查询管道分隔的数据。数据库旨在将功能和逻辑应用于行,而不是真正应用于列。
推荐阅读
- javascript - GridView Delete with bootbox.confirm 总是返回 false
- php - 如何在执行命令中传递参数?php laravel 电报机器人
- python - 每次在具有不同文件夹的特定根目录中上传 django 数据库中的文件
- bash - 期望运行电报-cli 命令脚本
- visual-studio - Visual Studio 更新 15.7.2 中断 Xamarin Android 项目
- ios - 搜索后我的表格视图单元格的索引发生了变化
- jmeter - JMeter - 如何从 Sample Result 选项卡中提取 Properties 数据
- typescript - 在 typescript npm 模块中重新导出第三方定义
- google-sheets - 如何根据另一个单元格的开始时间让特定单元格每小时增加一小时
- java - 有没有办法连接分析器 OSE JAVA 应用程序 pod?