StudentId, StudentName, GroupId, GroupName, CourseId, CourseName, LecturerId, LecturerName, Mark

# Statements

Дано отношение с атрибутами StudentId, StudentName, GroupId, GroupName, CourseId, CourseName, LecturerId, LecturerName, Mark.

  1. Найдите функциональные зависимости в данном отношении.
  2. Найдите все ключи данного отношения.
  3. Найдите замыкание множеств атрибутов:
    1. GroupId, CourseId;
    2. StudentId, CourseId;
    3. StudentId, LecturerId.
  4. Найдите неприводимое множество функциональных зависимостей для данного отношения.

Примечания:

  1. Не требуется поддержка:
    • нескольких университетов;
    • дисциплин по выбору;
    • дисциплин с необычным распределением по группам (таких как физическая культура и иностранный язык);
    • переводов между группами;
    • нескольких оценок по одной дисциплине.
  2. Многосеместровые дисциплины считаются по семестрам, например: Математический анализ (семестр 1), Математический анализ (семестр 2).

# 1

-- У студента есть имя и он обучается в определенной группе, при чем могут быть студенты с одинаковыми именами
StudentId -> StudentName
StudentId -> GroupId
-- У группы есть название, при чем название уникально в пределах университета
GroupId -> GroupName
GroupName -> GroupId
-- У курса есть название, при чем названия курсов могут совпадать в разных программах
CourseId -> CourseName
-- У лектора есть имя
LecturerId -> LecturerName
-- Студент может иметь оценку по итогам какого-либо курса, при чем эту оценку выставил лектор этого курса
StudentId, CourseId -> Mark, LecturerId
-- Курс у группы читает определенный лектор, при чем у разныз групп один и тот же курс могут читать разные лекторы
-- Так же лектор может читать больше одного курса
GroupId, CourseId -> LecturerId

# 2

Возьмем надключ из всех аттрибутов. Заметим что StudentId не встерчается в правых частях ФЗ, поэтому ключ обязательно будет содержать StudentId. Для любого множества аттрибутов без StudentId -- это множество не надключ и следовательно не ключ

Аналогичное утверждение верно для CourseId.

Следовательно не будет рассматривать множества аттрибутов не содержащих StudentId, CourseId в качестве ключей

Если множество аттрибутов {StudentId, CourseId} -- надключ, то оно так же и ключ, т.к. любой другой надключ будет содержать в себe это множество и следовательно оно минимально по включению.

Проверим что {StudentId, CourseId} -- надключ: {StudentId, CourseId}* = {StudentId, CourseId, StudentName, GroupId, GroupName, CourseName, Mark, LecturerId, LecturerName}

StudentId, CourseId 

# 3

## 1

GroupId, CourseId
GroupId, CourseId, GroupName
GroupId, CourseId, GroupName, CourseName
GroupId, CourseId, GroupName, CourseName, LecturerId
GroupId, CourseId, GroupName, CourseName, LecturerId, LecturerName

## 2

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

## 3

StudentId, LecturerId
StudentId, LecturerId, StudentName
StudentId, LecturerId, StudentName, GroupId
StudentId, LecturerId, StudentName, GroupId, GroupName
StudentId, LecturerId, StudentName, GroupId, GroupName, LecturerName

# 4

## 1

Есть одна ФЗ в которой в правой части больше 1 аттрибута, расщепляем ее
StudentId -> StudentName
StudentId -> GroupId
GroupId -> GroupName
GroupName -> GroupId
CourseId -> CourseName
LecturerId -> LecturerName
StudentId, CourseId -> Mark
StudentId, CourseId -> LecturerId
GroupId, CourseId -> LecturerId

## 2

Рассмотрим ФЗ в которых потенциально можем удалить аттрибут. Рассмотрим замыкания подмножеств множеств аттрибутов левых частей 

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

## 3

Построим замыкания аттрибутов левых частей каждой ФЗ, без этой ФЗ:
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

# Comments

  1. Функциональные зависимости
  2. Ключи
  3. Замыкания множеств атрибутов
    1. Замыкание множества атрибутов GroupId, CourseId
    2. Замыкание множества атрибутов StudentId, CourseId
    3. Замыкание множества атрибутов StudentId, LecturerId
  4. Неприводимое множество функциональных зависимостей
    1. Первый этап
    2. Второй этап
    3. Третий этап
Made with Org mode, © 2023 - ∞ iliayar