- •Основы систем управления базами данных
- •2.1. Традиционный подход к организации данных
- •2 .2. Система баз данных
- •2.2.1. Данные
- •2.2.2. Аппаратное обеспечение
- •2.2.2. Программное обеспечение
- •2.2.4. Пользователи
- •2.2. Преимущества и недостатки современного подхода к организации данных
- •2.4. Классификация систем баз данных
- •2.5. Архитектура клиент/сервер
- •2.5.1. Компоненты приложений клиент/сервер
- •2.5.2. Разделение клиента и сервера
- •2.5.2. Преимущества и перспективы системы клиент/сервер
- •2.6. Общие понятия реляционного подхода к организации данных
- •2.6.1. Базовые понятия реляционных баз данных
- •Тип данных
- •Отношение
- •2.6.2. Общая характеристика реляционной модели данных
- •2.6.2. Манипулирование данными с помощью языка запросов sql
- •2.7. Основы проектирования реляционных баз данных
- •2.7.1. Основные требования при проектировании бд
- •2.7.2. Основы классической методологии проектирования бд
- •2.7.2. Основные этапы проектирования базы данных
- •2.7.4. Обеспечение свойств бд в процессе проектирования
- •2.8. Проектирование реляционных баз данных с использованием принципов нормализации
- •2.8.1. Первая нормальная форма
- •2.8.2. Вторая нормальная форма
- •2.8.2. Третья нормальная форма
- •2.9. Семантическое моделирование данных. Диаграммы «сущность–связь»
- •2.9.1. Основные понятия
- •2.9.2. Методология idef1
- •2.10. Информационное моделирование с помощью case-средства eRwin
- •2.10.1. Общая характеристика программы eRwin
- •2.10.2. Этапы построения информационной модели в eRwin
- •2.11. Проектирование базы данных доменного производства
- •2.11.1. Концептуальное и логическое проектирование
- •Характеристика вспомогательных сущностей
- •Данные по доменному переделу, приведенные
- •2.11.2. Физическая реализация информационной модели
- •2.12. Контрольные вопросы
2.8.2. Третья нормальная форма
В таблице, соответствующей третьей нормальной форме (2НФ, Third Normal Form, 2NF), помимо требований для 2НФ, ни одно из неключевых полей таблицы не должно зависеть функционально от любого другого неключевого поля. Что это означает?
На приведенном выше рис. 2.19 показан пример нарушения условий 2НФ, поскольку существует транзитивная функциональная связь непервичного атрибута "Код товара" от ключа "Номер товара в заказе" вида
Наименование товара Код товара Номер товара в заказе
Возникает аномалия включения данных: если товар не участвует в заказе, то в базе данных нельзя хранить информацию о его оптовой цене. Кроме этого по-прежнему остаются аномалии удаления и обновления.
На рис. 2.20 представлена таблица 2НФ, в которой проблема скорректирована путем удаления столбцов "Наименование товара" и "Оптовая цена".
-
Код товара в заказе
Номер заказа
Код товара
1
1
1220
2
1
1405
2
1
1602
4
1
1201
5
1
1000
6
2
2001
7
2
1001
8
2
2245
9
2
2021
10
2
4000
11
1
1220
Рис. 2.20. Фрагмент таблицы из базы данных, находящихся в 2НФ
Чтобы не потерять информацию о кодировке товаров и ценах, создадим дополнительно таблицу "Инвентаризация" (рис. 2.21), в которой можно хранить информацию о наименовании товаров и ценах, и свяжем ее с исходной таблицей по ключевому полю "Код товара". Виды взаимосвязей в моделях данных мы рассмотрим далее.
После такой нормализации возникает вопрос о получении полной картины проданных товаров. Каким образом можно узнать всю информацию об определенном товаре, его описание, цену и так далее? В реляционной базе данных для этого существует механизм связывания таблиц по ключевым полям, для вывода необходимой информации используются так называемые виды (или представления), которые, в отличие от таблиц базы данных, не хранятся в ней постоянно, а служат лишь для представления результатов на экран. В данном примере две таблицы связаны по ключевым полям "Код товара", и нужно просто создать запрос к БД, который возвратит всю необходимую информацию. На рис. 2.22 показан вид, который объединяет рассматриваемые таблицы.
Код товара |
Наименование товара |
Оптовая цена |
1000 |
Электропила |
880 |
1001 |
Ключ гаечный |
14 |
1201 |
Гайки |
16 |
1220 |
Болты М4 |
12 |
1220 |
Болты М6 |
12 |
1405 |
Молоток |
20 |
1602 |
Гвозди |
10 |
2001 |
Напильник |
19 |
2245 |
Отвертка |
15 |
2021 |
Стамеска |
24 |
4000 |
Рубанок |
124 |
Рис. 2.21. Фрагмент таблицы "Инвентаризация"
Номер заказа |
Код товара |
Наименование товара |
Розничная цена |
1 |
1000 |
Электропила |
1100 |
1 |
1001 |
Ключ гаечный |
18 |
1 |
1201 |
Гайки |
20 |
1 |
1220 |
Болты М4 |
16 |
1 |
1220 |
Болты М6 |
16 |
2 |
1405 |
Молоток |
25 |
2 |
1602 |
Гвозди |
12 |
2 |
2001 |
Напильник |
24 |
2 |
2245 |
Отвертка |
19 |
2 |
2021 |
Стамеска |
20 |
2 |
4000 |
Рубанок |
156 |
Рис. 2.22. Пример выполнения запроса на выборку данных
из двух связанных таблиц
Распределяя информацию по нескольким таблицам, можно, как и раньше, получить необходимую для работы полноту данных. При этом изменяются только методы извлечения данных.