Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
кур / хз / курсовая Кирилл.doc
Скачиваний:
125
Добавлен:
01.03.2016
Размер:
6.79 Mб
Скачать

1 Нормализация бд

Процесс проектирования БД представляет собой нормализацию схем отношений.

Нормализация – это разбиение таблицы на несколько новых, обладающих лучшими свойствами при добавлении, редактировании и удалении данных [1].

Для начала проектирования базы данных «Столовая» создадим 4 сущности: «Блюдо» (таблица 1), «Продукт» представленной в таблице 2, «Производитель» представленной в таблице 3 и «Поставка» представленной в таблице 4.

Атрибуты сущности «Блюдо»:

  • Код блюда;

  • Наименование блюда;

  • Тип блюда.

Атрибуты сущности «Продукт»:

  • Код продукта;

  • Наименование продукта;

  • Тип продукта;

  • Единицы измерения.

Атрибуты сущности «Производитель»:

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

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

  • Наименование производителя;

  • Адрес;

  • Наименование производимой продукции;

  • Цена производимой продукции.

Атрибуты сущности «Поставка»:

  • Код поставки;

  • Дата поставки;

  • Поставленное наименование продукции;

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

  • Количество;

  • Дата окончания срока годности.

Таблица 1 – Блюдо

Код блюда

Наименование блюда

Тип блюда

Таблица 2 – Продукт

Код продукта

Наименование продукта

Тип продукта

Единицы измерения

Таблица 3 – Производитель

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

Фамилия

Имя

Отчество

Продолжение таблицы 3

Адрес

Наименование производимой продукции

Цена производимой продукции

Таблица 4 – Поставка

Код поставки

Дата поставки

Наименование продукции

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

Количество

Отношение находится в 1 нормальной форме так как, в любом допустимом значении этого отношения каждый ее кортеж содержит только одно значение для каждого атрибута. Отношение не должно содержать повторяющихся групп данных. Исходя из правил, можно утверждать, что данные отношения находятся в 1 нормальной форме. Для того чтобы преобразовать отношение во 2 нормальную форму нужно избавиться от функциональных зависимостей.

Рассмотрим сущность «Блюдо», первичным ключом является атрибут «Код блюда» – все значения атрибута должны быть уникальными.

Поле «Наименование блюда» содержит уникальную информацию о блюде. Информация, содержащаяся в поле «Наименование блюда» достоверна только для одного блюда. Поле «Тип блюда» содержит не уникальную информацию о блюде, эта информация может совпадать с информацией другого блюда в этом же поле, другими словами может существовать более одного блюда с одинаковым типом, поэтому следует разделить сущность «Блюдо» на две сущности «Блюдо» и «Тип блюда». Однако информация, содержащаяся в поле «Тип блюда» связана с полем «Код блюда» так как содержит информацию, характеризующую конкретное блюдо, чтобы не потерять эту связь необходимо, в сущности «Тип блюда» добавить ключевое поле «Код типа блюда», а так же добавить это поле в сущность «Блюдо». Сущность «Блюдо» представлена в таблице 5, сущность «Тип блюда» представлена в таблице 6.

Таблица 5 – Сущность «Блюдо» после преобразования

Код блюда

Наименование

Код типа блюда

1

Каша манная

1

2

Борщ

2

3

Голубцы с мясом

3

4

Пюре картофельное

4

Таблица 6 – Тип блюда

Код типа блюда

Тип блюда

1

Каша

2

Суп

3

Второе блюдо

4

Гарнир

Рассмотрим сущность «Продукт», первичным ключом является атрибут «Код продукта» – все значения атрибута должны быть уникальными.

Поле «Наименование продукта» содержит уникальную информацию о продукте. Информация, содержащаяся в поле «Наименование продукта» достоверна только для одного продукта. Поле «Тип продукта» содержит не уникальную информацию о продукте, эта информация может совпадать с информацией другого продукта в этом же поле, другими словами может существовать более одного продукта с одинаковым типом, поэтому следует разделить сущность «Продукт» на две сущности «Продукт» и «Тип продукта». Однако информация, содержащаяся в поле «Тип продукта» связана с полем «Код продукта» так как содержит информацию, характеризующую конкретный продукт, чтобы не потерять эту связь необходимо, в сущности «Тип продукта» добавить ключевое поле «Код типа продукта», а так же добавить это поле в сущность «Продукт». Поле «Единицы измерения» так же содержит не уникальную информацию о продукте, поэтому её следует выделить в отдельную сущность «Единицы измерения», однако она отображает информацию о продукте, поэтому в сущность «Единицы измерения» необходимо добавить поле «Код единицы измерения», а также добавить это поле в сущность «Продукт». Сущность «Продукт» представлена в таблице 7, сущность «Тип продукта» представлена в таблице 8, сущность «Единицы измерения» представлена в таблице 9.

Таблица 7 – Сущность «Продукт» после преобразования

Код продукта

Наименование

Код типа продукта

Код единицы измерения

1

Брусника

12

1

2

Вода

2

4

3

Говядина (филе)

7

1

4

Капуста белокочанная

8

1

Таблица 8 – Тип продукта

Код типа продукта

Тип продукта

1

Другое

2

Жидкость

3

Крупа

4

Масло

Таблица 9 – Единицы измерения

Код единицы измерения

Единица измерения

1

г.

2

кг.

3

л.

4

мл.

Рассмотрим сущность «Производитель», первичным ключом является атрибут «Код производителя» – все значения атрибута должны быть уникальными.

Поле «Наименование производителя» содержит уникальную информацию о производителе. Поле «Адрес» также содержит уникальную информацию о производителе, однако это объемная информация, которая состоит из нескольких однотипных блоков информации о стране, населённом пункте, типе адреса, адресе, номере дома, номере корпуса дома и номере квартиры, поэтому поле «Адрес» следует разделить на семь полей «Страна», «Населённый пункт», «Тип адреса», «Адрес», «Номер дома», «Номер корпуса» и «Номер квартиры». Поля «Страна» и «Тип адреса» содержат не уникальную информацию, поэтому следует выделить их в отдельные сущности «Справочник страны» и «Справочник адреса», с сохранением связи посредствам добавления ключевых полей «Код страны» и «Код адреса». Остальные поля, связанные с адресом производителя, так же не являются уникальными, однако выделение их в отдельные сущности не целесообразно, так как это усложнит работу с базой данных и увеличит скорость её работы. Поле «Тип производителя» содержит не уникальную информацию о производителе, эта информация может совпадать с информацией другого производителя в этом же поле, другими словами может существовать более одного производителя с одинаковым типом, поэтому следует выделить это поле в отдельную сущность «Тип производителя» с сохранением связи посредством добавления ключевого поля «Тип производителя». Сущность «Производитель» представлена в таблице 10, сущность «Тип производителя» представлена в таблице 11, сущность «Справочник страны» представлена в таблице 12 и сущность «Справочник адреса» представлена в таблице 13.

Таблица 10 – Сущность «Производитель» после преобразования

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

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

Наименование

Код страны

Населенный пункт

1

2

Минусинский пивоваренный завод

1

Минусинск

2

2

Т Д Кристал

1

Нижний Новгород

3

2

Бунге СНГ

1

Воронеж

4

3

Простоквашино

1

Красноярск

Продолжение таблицы 10

Код типа адреса

Адрес

Номер дома

Номер корпуса

Номер квартиры

1

Ленина

38

2

Кировский

18 А

1

Пушкина

34

2

1

Сливочная

56

Таблица 11 – Тип производителя

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

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

1

ИП

2

ОАО

3

ООО

4

ЗАО

Таблица 12 – Справочник страны

Код страны

Страна

1

Россия

2

Китай

3

Белоруссия

4

Украина

Таблица 13 – Справочник адреса

Код адреса

Адрес

1

ул.

2

т.

3

пер.

Рассмотрим сущность «Поставка», первичным ключом является атрибут «Код поставки» – все значения атрибута должны быть уникальными.

Поле «Дата поставки» содержит уникальную информацию о поставке. Информация, содержащаяся в поле «Дата поставки» достоверна только для одной поставки. Поля «Поставленное наименование продукции», «Код производителя», «Количество», «Дата окончания срока годности» содержат не уникальную информацию о поставке, поэтому следует разделить сущность «Поставка» на две сущности «Поставка» и «Детали поставки» с сохранением связи за счёт добавления в сущность «Детали поставки» поля «Код поставки». Информации хранящейся в поле «Количество» не достаточно что бы отобразить полностью всю информацию о количестве поставленного наименования продукции, помимо информации о количестве необходимо добавить информацию о единицах измерения поставки, для этого добавляем в сущность «Детали поставки» поле «Код единицы измерения» за счёт этого поля будет осуществляться связь между сущностью «Детали поставки» и «Единицы измерения». Поле «Поставленное наименование продукции» содержит не уникальную информацию, которая ко всему прочему не полноценная, так как под наименованием поставленной продукции подразумеваем продукт, произведённый под определённым брендом определённым производителем, который поставляет это наименование продукции по определённой цене, поэтому следует выделить поле «Поставленное наименование продукции» в отдельную сущность «Наименования продукции» и добавить в эту сущность поля «Код производителя», «Код продукта» и «Цена (руб.)». Следует уточнить, что один производитель может производить более одного наименования продукции. Поскольку сущность «Наименования продукции» уже содержит поле «Код производителя» это поле можно убрать из сущности «Детали поставки». Сущность «Поставка» представлена в таблице 14, сущность «Детали поставки» представлена в таблице 15, сущность «Наименование продукции» представлена в таблице 16.

Таблица 14 – Сущность «Поставка» после преобразования декомпозиции

Код поставки

Дата поставки

1

01.01.2015

2

01.02.2015

Таблица 15 – Сущность «Детали поставки»

Код поставки

Код наименования продукции

Количество

Код единицы измерения

Дата окончания срока годности

1

1

50

2

01.06.2015

1

2

100

3

01.02.2015

1

3

50

2

01.06.2015

1

4

15

2

01.06.2015

Таблица 16 – Сущность «Наименование продукции»

Код наименования продукции

Наименование продукции

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

Код продукта

Цена (в руб.)

1

Брусничка

7

1

25

1

Спаский собор

1

2

10

1

Красный бык

6

3

25

1

Капуста

7

4

15

Каждое блюдо состоит из множества продуктов, каждый продукт в этом множестве имеет некое количество, помимо этого один и тот же продукт может находиться более чем в одном блюде. Для создания связи между сущностью «Блюдо» и «Продукты», которая не будет нарушать условие, описанное выше, необходимо создать связующую сущность с указанием полей «Код блюда», «Код продукта» и «Количество». Связующая сущность «Ассоциация» представлена в таблице 17.

Таблица 17 – Сущность «Ассоциация»

Код блюда

Код продукта

Количество

1

11

90

1

6

8

1

8

4

2

3

80

Теперь следует установить связи между сущностями в соответствии с рисунком 1.1.

Рисунок 1.1 – Информационно-логическая модель

Соседние файлы в папке хз