- •Глава 1. База данных
- •1.1. База данных
- •1.2.Проблемы определения
- •1.3.Сверхбольшие базы данных
- •Глава 2 проектирование бд
- •2.1. Этапы проектирования данных
- •2.2. Нормализация баз данных
- •2.3. Типичная база данных до нормализации
- •2.4. Логическое проектирование базы данных
- •2.4.1. Первая нормальная форма
- •2.4.2. Вторая нормальная форма
- •2.4.3. Третья нормальная форма
- •Глава 3. Учёт сведений о проданных путёвках
- •3.1. Постановка задачи.
- •3.2. Описание проводимой работы. Создание таблиц и связей.
- •3.3. Запросы.
- •3.4. Формы, отчет и запросы.
2.4.2. Вторая нормальная форма
Целью второй нормальной формы является помещение в отдельную таблицу данных, которые только частично зависят от первичного ключа. Рис. 4.3 иллюстрирует вторую нормальную форму.
|
|
|||||
|
EMPLOYEE_TBL |
|
EMPLOYEE_TBL |
|
|
|
emp_id last_name first_name middle_name address city state zip phone pager |
|
emp_id last_name first_name middle_name address city state zip phone pager |
|
|
||
|
|
EMPLOYEE_PAY_TBL |
|
|
||
position date_hire pay_rate date_last_raise |
|
emp_id position date_hire pay_rate date_last_raise |
|
|
||
|
|
|
|
|
||
CUSTOMER_TBL |
|
CUSTOMER_TBL |
|
|
||
|
|
cust_id cust_name cust_address cust_city cust_state cust_zip cust_phone cust_fax ord_num |
|
cust_id cust_name cust_address cust_city cust_state cust_zip cust_phone cust_fax |
|
|
|
|
|
|
ORDERS_TBL |
|
|
|
|
prod_id qty ord_date |
|
cust_id prod_id qty ord_date |
|
|
Рис.4.3.Вторая нормальная форма
Согласно этому рисунку, вторая нормальная форма может быть получена из первой путем дальнейшего разбиения таблиц на более специальные составляющие. Таблица EMPLOYEE_TBL Была разбита на две таблицы — EMPLOYEE_TBL и EMPLOYEE_PAY_TBL. Персональная информация о сотруднике компании зависит от первичного ключа (EMP_ID) и поэтому она (поля EMP_ID, LAST_NAME, FIRST_NAME, MIDDLE_NAME, ADDRESS, CITY, STATE, ZIP, PHONE и PAGER) осталась в таблице EMPLOYEE_TBL. С ДРУГОЙ стороны, информация, только частич-но зависящая от поля EMP_ID (каждого сотрудника в отдельности), была испо-льзована для заполнения таблицы EMPLOYEE_PAY_TBL (поля EMP_ID, POSITION, POSITION_DESC, DATE_HIRE, PAY_RATE, DATE_LAST_RAISE). Обратите внимание, что обе таблицы содержат столбец EMP_ID, который является в каждой из них первичным ключом и используется для установки соответствия между взаимосвязанными данными.
Из таблицы CUSTOMER_TBL мы выделили две таблицы (CUSTOMER_TBL и ORDERS_TBL) в соответствии с принципами, аналогичными использованным нами при разбиении таблицы EMPLOYEE_TBL. Столбцы, только частично зависящие от первичного ключа, были отправлены в другую таблицу. Например, информация о заказах клиентов (ORDERS_TBL) Зависит от каждого конкретного CUST_ID, однако она непосредственно не связана с общей информацией о заказчике, содержащейся в исходной таблице CUSTOMER_TBL.
