Создание базы данных для торгового дома «Белый Кот», занимающегося продажей экологически чистых хозяйственных товаров, страница 2

Первичным ключом БД являются поля 'Код продажи' и 'Код товара', т.к. сочетание этих полей никогда не повторится, и они однозначно определят любую запись таблицы (зная код товара, мы однозначно определим его цену, размер, производителя и т.д., подробнее в п.3.2). Докажу уникальность сочетания. Каждая покупка определяется уникальным кодом продажи. При этом покупатель одновременно может приобрести различные товары, т.е. в разрезе товаров код продажи теряет свою уникальность (одинаковым значениям поля 'Код продажи' соответствуют разные значения поля 'Код товара'). Когда же покупатель захочет приобрести данный товар вновь, его покупка зарегистрируется уже под другим кодом. Т.е. при одном акте продажи нельзя купить один и тот же товар дважды (количество товара может быть больше одного, это оговаривается в поле 'Количество').

Хотя БД находится в 1НФ, существует избыточность данных. Например, одни и те же сведения о производителе повторяются при каждом акте продаже, и, если он изменит какие-либо сведения о себе, придётся редактировать все записи о товарах этого производителя, о сделках по продаже товара данного производителя. Поэтому необходимо продолжить нормализацию.

3.2. 2НФ

Таблица соответствует 2НФ, если она находится в 1НФ и все её ключевые поля полностью зависят от всего первичного ключа.

Таблица «Продажа товаров» находится в 1НФ, но не находится в 2НФ, так как большинство полей зависят лишь от части первичного ключа. Так, поле 'Цена товара' зависит лишь от поля 'Код товара'. Привожу таблицу ко 2НФ. Для этого определяю, на какие части можно разбить первичный ключ, чтобы некоторые из неключевых полей зависели от одной из этих частей – получаю 2 части, 'Код продажи' и 'Код товара'. Далее создаю 2 новые таблицы, в каждой из которых первичным ключом станет одна из полученных частей составного ключа. Также в таблицу войдут поля, зависящие от этих частей (неключевые). Получены следующие таблицы:

Товары

Код товара

Вид товара

Тип товара

Размер товара

Цена товара

Дата начала сотрудничества

Код производителя

Название

Страна

Представитель в РФ

Адрес представителя

Телефон представителя

Продажи

Код продажи

Дата продажи

Код сотрудника

ФИО сотрудника

Пол сотрудника

Паспортные данные

Адрес сотрудника

Телефон сотрудника

Дата найма

Теперь удаляю из исходной таблицы поля, перемещённые в другие таблицы, кроме внешних ключей, исходная таблица примет вид:

Продажа товаров

 
Код продажи

Код товара

Количество

 

Товары

Код товара

Вид товара

Тип товара

Размер товара

Цена товара

Дата начала сотрудничества

Код производителя

Название

Страна

Представитель в РФ

Адрес представителя

Телефон представителя

1

 
 


Продажи

Код продажи

Дата продажи

Код сотрудника

ФИО сотрудника

Пол сотрудника

Паспортные данные

Адрес сотрудника

Телефон сотрудника

Дата найма

1

 


Таблица 'Товары' (новая таблица, где первичный ключ – 'Код товара'), таблица 'Продажи' (новая таблица, где первичный ключ – 'Код продажи') и таблица 'Продажа товаров' находятся во 2НФ, т.к. в них все неключевые поля полностью зависят от первичного ключа. Следовательно, БД находится во 2НФ. Несмотря на это, всё ещё имеет место избыточность данных. Так, при изменении телефона представителя фирмы-производителя, нужно будет редактировать несколько записей (их будет меньше, чем при 1НФ). Необходимо привести БД к 3НФ.

3.3. 3НФ

          Таблица находится в 3НФ, если она соответствует 2НФ и все её неключевые поля зависят только от первичного ключа.

          Т.к. таблица 'Продажа товаров' находится во 2НФ и имеет лишь одно неключевое поле, то оно находится и в 3НФ. Таблица 'Продажи' не находится в 3НФ, т.к. сведения о сотрудниках зависят от поля 'Код сотрудника' и от поля 'Код продажи'. Таблица 'Товары' также не находится в 3НФ, т.к. сведения о производителях зависят от поля 'Код производителя' и от поля 'Код товара'. Значит, вся БД не находится в 3НФ. Приведу две эти таблицы к 3НФ.

          Определяю все неключевые поля, от которых зависят другие неключевые поля. Этими полями являются 'Код сотрудника' и 'Код производителя'. Далее создаю 2 новые таблицы, для которых 'Код сотрудника' и 'Код производителя' – это первичные ключи. Также в таблицы входят зависящие от них неключевые поля. А из исходных таблиц удаляются поля, перемещённые в другие таблицы, кроме внешних ключей. Таким образом, в 3НФ БД имеет вид пяти таблиц: 'Продажа товаров', 'Продажи', 'Товары', 'Сотрудники', 'Производители'.

          Полученные 5 таблиц представляют собой схему БД, приведённую в приложении.

          Теперь в БД устранена избыточность данных, что позволит избавиться от различных аномалий их изменения. Так, при изменении телефона представителя фирмы-производителя, нужно будет отредактировать всего одну запись.

4.Практическая часть

4.1.Таблицы

Таблицы представляют собой основную структурную единицу БД. В них хранится вся информация. В проектируемой БД 5 таблиц: 'Продажа товаров', 'Продажи', 'Товары', 'Сотрудники', 'Производители'. Приведу порядок их создания.

В окне БД выбираю вкладку Таблицы → в диалоговом окне Новая таблица выбираю  Конструктор → определяю структуру таблицы (указываю имена полей и тип данных) → создаю в каждой таблице ключевое поле → сохраняю и закрываю таблицу.

Тип данных – это характеристика поля, определяющая, какие данные могут сохраняться в таблице. В проектируемой БД я использовала следующие типы данных:

1.Текстовый, т.е. в полях с таким типом я могу использовать различные печатные символы, буквы, цифры. Это поля с адресами, телефонами, именами, кодами.

2.Числовой, т.е. поля данного типа содержат различные числовые значения. В моей базе это поле 'Количество', т.к. его значения я буду использовать при вычислениях.