StudentId, StudentName, GroupId, GroupName, CourseId, CourseName, LecturerId, LecturerName, Mark
Дано отношение с атрибутами StudentId, StudentName, GroupId, GroupName, CourseId, CourseName, LecturerId, LecturerName, Mark.
- Найдите функциональные зависимости в данном отношении.
- Найдите все ключи данного отношения.
- Найдите замыкание множеств атрибутов:
- GroupId, CourseId;
- StudentId, CourseId;
- StudentId, LecturerId.
- Найдите неприводимое множество функциональных зависимостей для данного отношения.
Примечания:
- Не требуется поддержка:
- нескольких университетов;
- дисциплин по выбору;
- дисциплин с необычным распределением по группам (таких как физическая культура и иностранный язык);
- переводов между группами;
- нескольких оценок по одной дисциплине.
- Многосеместровые дисциплины считаются по семестрам, например: Математический анализ (семестр 1), Математический анализ (семестр 2).
-- У студента есть имя и он обучается в определенной группе, при чем могут быть студенты с одинаковыми именами StudentId -> StudentName StudentId -> GroupId -- У группы есть название, при чем название уникально в пределах университета GroupId -> GroupName GroupName -> GroupId -- У курса есть название, при чем названия курсов могут совпадать в разных программах CourseId -> CourseName -- У лектора есть имя LecturerId -> LecturerName -- Студент может иметь оценку по итогам какого-либо курса, при чем эту оценку выставил лектор этого курса StudentId, CourseId -> Mark, LecturerId -- Курс у группы читает определенный лектор, при чем у разныз групп один и тот же курс могут читать разные лекторы -- Так же лектор может читать больше одного курса GroupId, CourseId -> LecturerId
Возьмем надключ из всех аттрибутов. Заметим что StudentId не встерчается в правых частях ФЗ, поэтому ключ обязательно будет содержать StudentId. Для любого множества аттрибутов без StudentId – это множество не надключ и следовательно не ключ
Аналогичное утверждение верно для CourseId.
Следовательно не будет рассматривать множества аттрибутов не содержащих StudentId, CourseId в качестве ключей
Если множество аттрибутов {StudentId, CourseId} – надключ, то оно так же и ключ, т.к. любой другой надключ будет содержать в себe это множество и следовательно оно минимально по включению.
Проверим что {StudentId, CourseId} – надключ: {StudentId, CourseId}* = {StudentId, CourseId, StudentName, GroupId, GroupName, CourseName, Mark, LecturerId, LecturerName}
StudentId, CourseId
GroupId, CourseId GroupId, CourseId, GroupName GroupId, CourseId, GroupName, CourseName GroupId, CourseId, GroupName, CourseName, LecturerId GroupId, CourseId, GroupName, CourseName, LecturerId, LecturerName
StudentId, CourseId StudentId, CourseId, StudentName StudentId, CourseId, StudentName, GroupId StudentId, CourseId, StudentName, GroupId, GroupName StudentId, CourseId, StudentName, GroupId, GroupName, CourseName StudentId, CourseId, StudentName, GroupId, GroupName, CourseName, Mark, LecturerId StudentId, CourseId, StudentName, GroupId, GroupName, CourseName, Mark, LecturerId, LecturerName
StudentId, LecturerId StudentId, LecturerId, StudentName StudentId, LecturerId, StudentName, GroupId StudentId, LecturerId, StudentName, GroupId, GroupName StudentId, LecturerId, StudentName, GroupId, GroupName, LecturerName
Есть одна ФЗ в которой в правой части больше 1 аттрибута, расщепляем ее
StudentId -> StudentName StudentId -> GroupId GroupId -> GroupName GroupName -> GroupId CourseId -> CourseName LecturerId -> LecturerName StudentId, CourseId -> Mark StudentId, CourseId -> LecturerId GroupId, CourseId -> LecturerId
Рассмотрим ФЗ в которых потенциально можем удалить аттрибут. Рассмотрим замыкания подмножеств множеств аттрибутов левых частей 1. StudentId, CourseId -> Mark {StudentId}* = StudentId, StudentName, GroupId, GroupName {CourseId}* = CourseId, CourseName Mark не встречается в замыканиях, следовательно не можем убрать ни один аттрибут из левой части 2. StudentId, CourseId -> LecturerId {CourseId}* = CourseId, CourseName {StudentId}* = StudentId, StudentName, GroupId, GroupName LecturerId не встречается в замыканиях, следовательно не можем убрать ни один аттрибут из левой части 3. GroupId, CourseId -> LecturerId {GroupId}* = GroupId, GroupName {CourseId}* = CourseId, CourseName LecturerId не встречается в замыканиях, следовательно не можем убрать ни один аттрибут из левой части Остальные правило содержат по одному аттрибуту в левой части, не может удалить оттуда ни один аттрибут
StudentId -> StudentName StudentId -> GroupId GroupId -> GroupName GroupName -> GroupId CourseId -> CourseName LecturerId -> LecturerName StudentId, CourseId -> Mark StudentId, CourseId -> LecturerId GroupId, CourseId -> LecturerId
Построим замыкания аттрибутов левых частей каждой ФЗ, без этой ФЗ: 1. StudentId -> StudentName {StudentId}* = StudentId, GroupId, GroupName Не можем выкинуть, замыкание не содержит StudentName 2. StudentId -> GroupId {StudentId}* = StudentId, StudentName Не можем выкинуть, замыкание не содержит GroupId 3. GroupId -> GroupName {GroupId}* = GroupId Не можем выкинуть, замыкание не содержит GroupName 4. GroupName -> GroupId {GroupName}* = GroupName Не можем выкинуть, замыкание не содержит GroupId 5. CourseId -> CourseName {CourseId}* = CourseId Не можем выкинуть, замыкание не содержит CourseName 6. LecturerId -> LecturerName {LecturerId}* = LecturerId Не можем выкинуть, замыкание не содержит LecturerName 7. StudentId, CourseId -> Mark {StudentId, CourseId}* = StudentId, CourseId, StudentName, GroupId, GroupName, LecturerId, LecturerName, CourseName Не можем выкинуть, замыкание не содержит Mark 8. StudentId, CourseId -> LecturerId {StudentId, CourseId}* = StudentId, CourseId, StudentName, GroupId, GroupName, CourseId, Mark, CourseName, LecturerId Можем выкинуть, LecturerId входит в замыкание 9. GroupId, CourseId -> LecturerId {GroupId, CourseId}* = GroupId, CourseId, GroupName, CourseName -- не можем выкинуть
StudentId -> StudentName StudentId -> GroupId GroupId -> GroupName GroupName -> GroupId CourseId -> CourseName LecturerId -> LecturerName StudentId, CourseId -> Mark GroupId, CourseId -> LecturerId
- Функциональные зависимости
- Ключи
- Замыкания множеств атрибутов
- Замыкание множества атрибутов GroupId, CourseId
- Замыкание множества атрибутов StudentId, CourseId
- Замыкание множества атрибутов StudentId, LecturerId
- Неприводимое множество функциональных зависимостей
- Первый этап
- Второй этап
- Третий этап