【问题标题】:Query on an Object-Oriented Database查询面向对象的数据库
【发布时间】:2011-10-19 01:17:33
【问题描述】:

以下是面向对象设置中数据库的scheme。每个关系都成为对象的集合。学生是人,教师也是人。这些显示为标记为“isa”的有向边。所有其他有向边都显示参考属性。注意 Course 中的 PreReq 属性是一组引用。

这是我不知道该怎么写的查询:

按 StudentID 重新组织注册集合。对于每个学生,检索学生的 ID 和成绩。 Grade 应该是由CourseCodeLetterGrade 属性组成的关系。

通过重新组织,我很确定这只是意味着按该顺序检索信息,而不是对数据库进行任何更新。

【问题讨论】:

  • 这似乎缺少一些信息。即,“isa”到底是什么?那是那些表中的一列还是只是关系的名称?换句话说,什么标识符将 Student 表与 Person 表联系起来?我在任何地方都没有看到“StudentID”...
  • @ChrisLively “是一个人”,如“教师是一个人”、“学生是一个人”。大概StudentFaculty 中的每条记录都有一个ID 字段,该字段对应于Person 表中的ID,但为了保持简洁,图中未显示。
  • @Jordan:我不知道我是怎么误读的 :)
  • 回到我们定期安排的节目:这里没有足够的信息。该图缺少很多信息。 Student 表中的“StudentID”与 person 表中的“ID”是一对一的关系吗?哪个字段将 Enrollment.StudentInfo 映射到 Student?哪个字段将 Enrollment.OfferingInfo 映射到产品?什么字段映射到 Offering.CourseInfo 到 Course?另外,“LetterGrade”在哪里?简而言之,图表上不存在平面的问题名称字段,并且图表不是完整的数据模型。
  • 据我了解,Student 和 Person 之间的关系不是“关系”,而是一个 isa,所以这里没有 1-1 或 1-many 的关系。面向对象的数据库与 isa 一起工作的方式是子对象从其父对象继承字段。所以调用 Student.ID 是有效的,因为学生是一个人

标签: mysql object-oriented-database


【解决方案1】:

因为并非所有字段都被正确引用并且说明有点......好吧,缺乏,我将做一些假设。即:

  1. student 表有一个名为“StudentID”的字段,它与 Person 表中的 ID 字段是一对一的关系。

  2. “重组”的意思是“选择”。奇怪的措辞。

  3. 除了 Person 表之外,所有其他 ID 都遵循正常的命名约定。意思是<TableName>Id。例如学生表中的主ID是StudentID

  4. 问题中的“LetterGrade”实际上是指招生表中的“Grade”字段。

  5. 以单词“Info”结尾的所有字段都是以“Id”结尾的等效字段的外键。例如:Enrollment.StudentInfo 映射到 Student.StudentId

类似的东西

SELECT S.StudentID, E.Grade, C.CourseCode
FROM Student S
  INNER JOIN Enrollment E on (E.StudentInfo = S.StudentId)
  INNER JOIN Offering O on (O.OfferingId = E.OfferingInfo)
  INNER JOIN Course C on (C.CourseId = O.CourseInfo)
ORDER BY S.StudentId

【讨论】:

  • 面向对象的数据库与 isa 一起工作的方式是子对象从其父对象继承字段。所以调用 Student.ID 是有效的,因为学生是一个人。
  • @user446836:当我说我明白这一点时,请相信我。但是,您标记的数据库供应商 (mysql) 不是 OO 数据库......所以如果没有正确的连接,它不会继承任何东西。如果您使用的是其他供应商,请更新您的标签。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多