1.3 Нормализация
Приведение к 1НФ.
требование (требование простой структуры).
Каждую сущность с атрибутами представил в виде множества строк. Объединённых ячеек нет.
2 требование (отсутствие одинаковых по смыслу полей). Повторяющихся полей нет.
требование (отсутствие составных полей).
В таблице «Курсы» есть одинаковые поля, такие как количество лекционных, лабораторных и практических часов, но не следует объединять их в единое поле «количество часов», так как в таблице будет много повторений.
требование (в табл. не должно быть одинаковых записей).
В таблице нет одинаковых записей.
Приведение ко 2НФ.
Определяем у каждой сущности первичный ключ:
Для сущности «Преподаватели» выберем в качестве первичного ключа «табельный номер преподавателя» (табельный номер уникален и не может повториться). А для сущности «Курсы» выберем «№ предмета» (номер сам по себе уникален и не может повториться).
Анализируем зависимости между полями таблицы:
Поле специальность, факультет и группа зависят от поля № группы, т.к. является свойством или атрибутом группы. Поэтому следует разбить таблицу на две части.
Разделение таблицы в соответствии с выделенными смысловыми зависимостями:
Вводим семантически незначащие первичные ключи: «Код города», «№ контроля», «№ группы»
Приведение к 3НФ.
Транзитивных зависимостей между полями таблиц нет. Таблицы приведены ко 2НФ, а значит приведены и к 3НФ. Рисунок 2.
Преподаватели Курсы Группы
Табельный № преподавателя |
|
№ предмета |
|
№ группы |
ФИО Кафедра Должность Стаж Факультет Ученая степень Адрес Телефон Код города |
|
Предмет № группы Лекции Практические занятия Лабораторные работы Семестр № контроля Табельный № преподавателя |
|
Группа Специальность Факультет |
|
Город Форма контроля
Код города |
|
№ контроля |
Город |
|
Контроль |
Рисунок 2.
Проектирование таблиц.
В итоге получилось 5 таблиц.
Таблица 1 «Преподаватели» :
Название поля |
Тип данных |
Правило |
|
Tab_№ |
Number(9) |
PK |
|
FIO1 |
Varchar2(50) |
Обязательное поле |
|
Cafedra |
Varchar2(30) |
Обязательное поле |
|
Fakultet |
Varchar2(30) |
Обязательное поле |
|
Doljnost |
Varchar2(30) |
Обязательное поле |
|
Staj |
Number(2) |
>0 |
|
Uchenaya_Step |
Varchar2(30) |
|
|
Adres |
Varchar2(50) |
Обязательное поле |
|
Telefon |
Number(30) |
>0 |
|
Cod_goroda |
Number(10) |
FK |
|
В таблице 1 будет храниться информация о преподавателях. Таблица имеет следующие поля:
Tab_№ - первичный ключ таблицы – должен быть уникальным и не превышать 9 знаков.
FIO1 – определяет ФИО преподавателя.
Cafedra – определяет кафедру на которой работает преподаватель.
Fakultet – определяет на каком факультете работает преподаватель.
Doljnost – определяет на какой должности работает преподаватель.
Staj – определяет стаж работы преподавателя. Не должен превышать 2 знаков.
Uchenaya_Step – определяет имеется ли у преподавателя ученая степень.
Adres – определяет адрес по которому проживает преподаватель (улица, дом, кв).
Telefon – определяет номер телефона преподавателя. Не должен превышать 30 цифр, т.к. телефонов может быть несколько (домашний и мобильный).
Cod_goroda – определяет код города в котором проживает преподаватель. Не должен превышать 10 знаков.
Используемые типы данных:
VARCHAR2(L) – символьная строка переменной длины с максимальной длиной L байт.
Number(P,S) – число, имеющее точность P и масштаб S.
Таблица 2 «Город» :
Название поля |
Тип данных |
Правило |
Cod_goroda |
Number(10) |
PK |
Gorod |
Varchar2(20) |
Обязательное поле |
В таблице 2 будет храниться информация о городах. Таблица имеет следующие поля:
Cod_goroda – первичный ключ таблицы – должен быть уникальным и не превышать 10 знаков.
Gorod – определяет город в котором проживает преподаватель.
Используемые типы данных:
VARCHAR2(L) – символьная строка переменной длины с максимальной длиной L байт.
Number(P,S) – число, имеющее точность P и масштаб S.
Таблица 3 «Курсы»:
Название поля |
Тип данных |
Правило |
|
№_predmet |
Number(9) |
PK |
|
Predmet |
Varchar2(50) |
Обязательное поле |
|
№_group |
Number(9) |
FK |
|
Lektions |
Number(2) |
>0 |
|
Practics |
Number(2) |
>0 |
|
Laboratorian |
Number(2) |
>0 |
|
Semestr |
Number(2) |
Обязательное поле, >0, <15 |
|
Tab_№ |
Number(9) |
FK |
|
№_kontrol |
Number(9) |
FK |
|
В таблице 3 будет храниться информация о читаемых курсах. Таблица имеет следующие поля:
№_predmet - первичный ключ таблицы – должен быть уникальным и не превышать 9 знаков.
Predmet – определяет предмет который ведет преподаватель у группы.
№_group – определяет номер группы у которой ведет преподаватель данный предмет. Не должен превышать 9 знаков.
Lektions – определяет количество лекционных часов, читаемых группе по данному предмету. Не должен превышать 2 знаков.
Practics - определяет количество практических часов, проводимых у группы по данному предмету. Не должен превышать 2 знаков.
Laboratorian - определяет количество лабораторных часов, проводимых у группы по данному предмету. Не должен превышать 2 знаков.
Semestr – определяет в каком семестре читается данный предмет у группы. Не должен превышать 2 знаков.
Tab_№ - определяет табельный номер преподавателя, который ведет данный предмет у определенной группы. Не должен превышать 9 знаков.
№_kontrol – определяет номер контроля группы по данному предмету.
Используемые типы данных:
VARCHAR2(L) – символьная строка переменной длины с максимальной длиной L байт.
Number(P,S) – число, имеющее точность P и масштаб S.
Таблица 4 «Группы» :
Название поля |
Тип данных |
Правило |
№_group |
Number(9) |
PK |
Group_g |
Varchar2(9) |
Обязательное поле |
Specialnost |
varchar2(50) |
Обязательное поле |
Fakultet1 |
Varchar2(30) |
Обязательное поле |
В таблице 4 будет храниться информация о группах. Таблица имеет следующие поля:
№_group - первичный ключ таблицы – должен быть уникальным и не превышать 9 знаков.
Group_g – определяет группу.
Specialnost – определяет специальность, которой обучают группу.
Fakultet1 – определяет факультет на котором обучается группа.
Используемые типы данных:
VARCHAR2(L) – символьная строка переменной длины с максимальной длиной L байт.
Number(P,S) – число, имеющее точность P и масштаб S.
Таблица 5 «Форма контроля» :
Название поля |
Тип данных |
Правило |
№_kontrol |
Number(9) |
PK |
Kontrol |
Varchar2(30) |
Обязательное поле |
В таблице 5 будет храниться информация о контроле группы. Таблица имеет следующие поля:
№_kontrol - первичный ключ таблицы – должен быть уникальным и не превышать 9 знаков.
Kontrol – определяет контроль группы.
Используемые типы данных:
VARCHAR2(L) – символьная строка переменной длины с максимальной длиной L байт.
Number(P,S) – число, имеющее точность P и масштаб S.
