【问题标题】:How to retrieve data from multi-valued attributes in a relational database?如何从关系数据库中的多值属性中检索数据?
【发布时间】:2011-05-14 15:57:33
【问题描述】:

以下是我的数据库,其中包含 4 个表(学生、课程、模块、讲师)。我想知道这个数据库是否正确,如果我做得对,我如何使用学生 ID 从表中检索数据,如下所示。

  • 学生有哪些模块 10122342 拥有? >>预期答案:cn103、cn201

(pk) = primary key and (fk)=foreign key

接下来我想从上面的表中导入一些值到一个新创建的表中吗?情况是我想从名为“Everyone”的新创建表的“id”属性中的上面的表中导入“s_id”和“i_id”;同时,我还想为“Everyone”表的“type”属性生成“0”/“1”值,其中从“s_id”导入的 id 为 0 值,从“s_id”导入的其余 id 为 1 i_id'。以下是我预期的新数据库表。

Everyone
id       |type |
-----------------
10122345 | 0   |
10122342 | 0   |
10222346 | 0   |
20432343 | 1   |
20432311 | 1   |
20532334 | 1   |

请问有人可以帮我吗?可以用mysql和php吗?谢谢。

【问题讨论】:

  • 为什么要做上面的事情?如果学生和教师 ID 重叠怎么办?似乎使用这种表结构,每个学生只能注册一门课程。
  • 另外,外键中的逗号分隔值不是好的做法。您将如何在查询中使用联接来调用它?如果您曾经在表中使用逗号分隔值,则表明需要单独的表是一个好兆头。
  • 考虑将表格连接在一起的单独表格。例如,有一个表,其中只包含一个学生 ID 和一个课程 ID,代表哪些学生正在学习哪些课程。这样您就可以让每个学生选修多门课程,并且每门课程可以由多个学生选修。
  • 是的,我知道这是错误的。一名学生只修一门课程,而一门课程有多个模块 - 这里有些模块不止一门课程。这就是我遇到麻烦的原因,我期待某种解决方案,如字符串比较或检索所有数据的东西。现在,如果我使用答案 1 下面的@jeroen-offerijns 的解决方案,它只显示一个模块,该模块只分配给一门课程(cn103)。

标签: php mysql database database-design relational-database


【解决方案1】:

这应该是您第一个问题的答案:

SELECT m_code FROM Module a INNER JOIN Student b ON a.c_code = b.c_code WHERE b.s_id = '10122342'

我无法回答您的第二个问题,虽然它应该与连接有关,但这可能会有所帮助:MySQL Insert & Joins

【讨论】:

  • 它只给出'cn103',它还假设检索'cn201'??
  • Module表中c_code列的数据类型是什么?
猜你喜欢
  • 2011-11-22
  • 1970-01-01
  • 2012-04-08
  • 2020-06-09
  • 1970-01-01
  • 2019-08-13
  • 1970-01-01
  • 2014-04-22
  • 1970-01-01
相关资源
最近更新 更多