Приведение ко 2нф
Определим для каждой сущности первичный ключ:
Человек — № паспорта.
Работа — составной PK, состоящий из двух полей «№ паспорта» и «предприятие».
Образование — составной PK, состоящий из двух полей «№ паспорта» и «Название учебного заведения».
От номера паспорта зависят ФИО, дата рождения, место рождения, адрес проживания, город проживания, домашний телефон, почтовый индекс, номер трудовой книжки.
В сущности «Работа» от номера паспорта зависят поля предприятие, должность, дата найма, дата увольнения, а от предприятия зависят адрес предприятия, и город предприятия.
В сущности «Образование» от номера паспорта зависят название учебного заведения, начало и окончание учёбы, специальность и квалификация, а от названия заведения зависят его адрес и город.
Для удобства обращения с БД создадим таблицу городов с семантически незначащим ключом «код города» и заменим поля «Город проживания», «Город предприятия», «Город учебного заведения» на поле «код города» в каждой сущности.
Введём для таблиц предприятие и учебное заведение, семантически незначащие ключи «код предприятия» и «код учебного заведения» соответственно.
Составным ключом в таблице «Образование» будут поля № паспорта и код учебного заведения, составным ключом в таблице «работа» будут поля № паспорта и код предприятия.
Приведение к 3нф
Так как транзитивных зависимостей нет, то 2 НФ является и 3 НФ.
Таким образом, получаем 6 таблиц, представленных на рисунке 3:
Рисунок 3. Приведение к 2-3НФ.
Проектирование таблиц
Поле |
Тип |
Пояснение |
№ паспорта |
Числовой |
Используем тип числовой, т. к. № паспорта – это совокупность цифр |
ФИО |
Символьный |
Используем символьный тип, потому что имя, фамилия, отчество – состоят из букв |
Дата рождения |
Дата |
Используем тип дата, потому что дата рождения – это совокупность дня, месяца и года |
Код города |
Числовой |
Используем числовой тип, т.к. код будем задавать числом |
Адрес |
Символьный |
Используем символьный тип, потому что адрес содержит буквы |
Домашний телефон |
Числовой |
Используем числовой тип, т.к. № телефона – это совокупность чисел |
Почтовый индекс |
Числовой |
Используем числовой тип, т.к. индекс – это совокупность чисел |
Поле |
Тип |
Пояснение |
№ паспорта |
Числовой |
Используем тип числовой, т. к. № паспорта – это совокупность цифр |
Код предприятия |
Числовой |
Используем числовой тип, т.к. код будем задавать числом |
Должность |
Символьный |
Используем символьный тип, потому что название должности – это совокупность букв |
Дата найма |
Дата |
Используем тип дата, потому что дата – это совокупность дня, месяца и года |
Дата увольнения |
Дата |
Используем тип дата, потому что дата – это совокупность дня, месяца и года |
Поле |
Тип |
Пояснение |
№ паспорта |
Числовой |
Используем тип числовой, т. к. № паспорта – это совокупность цифр |
Код учебного заведения |
Числовой |
Используем числовой тип, т.к. код будем задавать числом |
Начало учебы |
Дата |
Используем тип дата, потому что дата – это совокупность дня, месяца и года |
Окончание учебы |
Дата |
Используем тип дата, потому что дата – это совокупность дня, месяца и года |
Специальность |
Символьный |
Используем символьный тип, потому что название специальности – это совокупность букв |
Квалификация |
Символьный |
Используем символьный тип, потому что название квалификации – это совокупность букв |
Поле |
Тип |
Пояснение |
Код предприятия |
Числовой |
Используем числовой тип, т.к. код будем задавать числом |
Предприятие |
Символьный |
Используем символьный тип, потому что название предприятия – это совокупность букв |
Адрес предприятия |
Символьный |
Используем символьный тип, потому что адрес содержит буквы |
Код города |
Числовой |
Используем числовой тип, т.к. код будем задавать числом |
Поле |
Тип |
Пояснение |
Код учебного заведения |
Числовой |
Используем числовой тип, т.к. код будем задавать числом |
Учебное заведение |
Символьный |
Используем символьный тип, потому что название учебного заведения – это совокупность букв |
Адрес учебного заведения |
Символьный |
Используем символьный тип, потому что адрес содержит буквы |
Код города |
Числовой |
Используем числовой тип, т.к. код будем задавать числом |
Поле |
Тип |
Пояснение |
Код города |
Числовой |
Используем числовой тип, т.к. код будем задавать числом |
Республика |
Символьный |
Используем символьный тип, потому что название республики – это совокупность букв |
Область |
Символьный |
Используем символьный тип, потому что название области – это совокупность букв |
Населенный пункт |
Символьный |
Используем символьный тип, потому что населенного пункта – это совокупность букв |
