#mysql #object-oriented-database
#mysql #объектно-ориентированная база данных
Вопрос:
Ниже приводится scheme
для базы данных в объектно-ориентированной настройке. Каждое отношение становится набором объектов. Студент — это человек, и преподаватель тоже человек. Они показаны как направленные ребра, помеченные как «isa». Все остальные направленные ребра показывают ссылочные атрибуты. Обратите внимание, что атрибут PreReq в Course представляет собой набор ссылок.
Вот запрос, который я не могу понять, как написать:
Реорганизуйте коллекцию регистрации по идентификатору студента. Для каждого учащегося извлеките идентификатор учащегося и оценку. Оценка должна быть отношением, состоящим из CourseCode
LetterGrade
атрибутов и .
Под реорганизацией я почти уверен, что это просто означает получение информации в таком порядке, а НЕ какие-либо обновления базы данных.
Комментарии:
1. Похоже, в нем отсутствует некоторая информация. А именно, что в мире такое «isa»? Это столбец в этих таблицах или просто имя отношения? Другими словами, какой идентификатор связывает таблицу Student с таблицей Person? Я нигде не вижу «StudentID»…
2. @ChrisLively «Это», как в «Факультет — это человек», «Студент — это человек». Предположительно, каждая запись в
Student
иFaculty
имеет поле идентификатора, которое соответствует идентификатору вPerson
таблице, но не показано на диаграмме для краткости.3. @Jordan: я понятия не имею, как я это неправильно понял 🙂
4. Вернемся к нашей обычной запланированной программе: здесь недостаточно информации. На диаграмме отсутствует МНОГО информации. Является ли «StudentID» из таблицы Student отношением 1 к 1 к «ID» в таблице person? Какое поле отображает регистрацию. StudentInfo для студента? Какое поле отображает регистрацию. Предлагая информацию для предложения? Какое поле соответствует предложению. CourseInfo к курсу? Кроме того, где находится «LetterGrade»? Короче говоря, вопрос называет поля, которые не существуют на диаграмме, и диаграмма не является полной моделью данных.
5. Насколько я понимаю, отношения между Student и Person — это не «отношение», это isa, поэтому здесь нет отношений 1-1 или 1-many. Способ работы объектно-ориентированных баз данных с isa заключается в том, что подобъекты наследуют поля от своего родителя. Итак, вызываю студента. Идентификатор действителен, потому что студент — это человек
Ответ №1:
Потому что не на все поля даны правильные ссылки, а инструкции немного… ну, не хватает, я собираюсь сделать несколько предположений. А именно:
-
В таблице student есть поле с именем «StudentID», которое соответствует соотношению 1 к 1 с полем ID в таблице Person.
-
«Реорганизовать» означает «выбрать».. Странная формулировка.
-
Кроме таблицы Person, все остальные идентификаторы соответствуют обычным соглашениям об именовании. Значение,
<TableName>Id
. Например, основным идентификатором в таблице student является StudentID -
«LetterGrade» в вопросе фактически относится к полю «Оценка» в таблице регистрации.
-
Все поля, оканчивающиеся на слово «Info», являются внешними ключами к эквивалентному полю, оканчивающемуся на «Id». Например: Регистрация.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
Комментарии:
1. Способ работы объектно-ориентированных баз данных с isa заключается в том, что подобъекты наследуют поля от своего родителя. Итак, вызываю студента. Идентификатор действителен, потому что студент — это человек.
2. @user446836: Поверьте мне, когда я говорю, что понимаю это. Однако поставщик базы данных, который вы отметили (mysql), не является базой данных OO… таким образом, он ничего не унаследует без надлежащего соединения. Если вы используете другого поставщика, пожалуйста, обновите свои теги.