Достижение нормализации SQL 3NF - PullRequest
1 голос
/ 15 марта 2012

Я пытаюсь добиться 3NF, используя данные, которые у меня есть, но я запутался.Вот таблицы, которые у меня есть:

FACULTY table    DEPARTMENT table        STUDSGROUP table         STUDENT table
FACULTY_ID       DEPARTMENT_ID           STUDSGROUP_ID            STUDENT_ID
FACULTY_NAME     DEPARTMENT_NAME         ACADEMIC YEAR            STUDENTS_NAME
FACULTY_DEAN     HEAD OF DEPARTMENT      COURSE/SPECIALITY        STUDENTS_GROUP
                                                                  COURSE/SPECIALITY 
                                                                  DOB/DATE OF BIRTH

Я думаю, что могу сделать это ниже, хотя я думаю, что я не прав.

FACULTY table
FACULTY_ID,PK
DEAN

DEPARTMENT table
DEPARTMENT_ID,PK
FACULTY_ID,fk
DEPARTMENT_NAME
HEAD OF DEPARTMENT


STUDSGROUP table
STUDSGROUP_ID, pk
ACADEMIC YEAR
SPECIALITY

STUDENTS table
STUDENT_ID, pk
FACULTY_NAME,FK
STUDSGROUP_ID,FK
FIRST_NAME
LAST_NAME
DOB

1 Ответ

3 голосов
/ 15 марта 2012

Нормализация требует, чтобы вы знали, как связаны различные части схемы.До 3NF и BCNF (почти, но не совсем одно и то же - хотя вам будет трудно найти практический пример 3NF, которого нет также в BCNF), наиболее важной особенностью является функциональная зависимость.

Другим ключевым моментом является «сохранение»;Вы не должны терять колонки вообще.Например, ваша оригинальная таблица факультета имеет идентификационный номер, имя и декан.В вашей исправленной версии отсутствует название факультета;это ошибка в вашем редизайне.

Вы определили, что каждый факультет принадлежит факультету, что кажется достаточно правдоподобным.

Ваша пересмотренная таблица групп учеников кажется такой же, как воригинал.Это, вероятно, хорошо, хотя, возможно, часть курса / специальности означает, что группа студентов связана с отделом, а следовательно, и факультетом.Если это так, то вам может понадобиться таблица курсов / специальностей, в которой указываются курс / специальность и отдел, и группа студентов может определить конкретную группу в рамках курса / специальности.

В исходной таблице студентов естькурс / специальность, а также студенческая группа;это оставляет открытой возможность того, что в данных будет сказано, что ученик Х занимается археологией в таблице учеников, но группа учеников указывает, что ученик Х занимается музыкой.Это разрешено?Если нет, то лучше ли вам было бы обслуживать группу учеников за столом студентов, оставляя это для определения курса / специальности, а также года, факультета и, следовательно, факультета?Ваша пересмотренная схема добавляет идентификатор факультета в таблицу студентов (но удаляет курс / специальность);это все еще оставляет возможность конфликта в данных.

Вам нужна таблица для определения действительных академических лет?Возможно нет.Должен ли быть стол для персонала, чтобы вы могли определить деканов и руководителей департаментов.Может ли декан факультета быть заведующим кафедрой?Из кафедр вне их факультета?

...