Пусть некая фирма занимается оптовой торговлей, например кондитерскими изделиями. Покупателями (клиентами) фирмы являются различные кафе, рестораны, клубы и т.п. Для учета и анализа заказов в фирме создается БД, содержащая следующие поля:
| Имя поля | Тип поля | Примечание |
| Номер заказа | Число | |
| Дата поставки | Дата | ДД.ММ.ГГ |
| Код клиента | Число | Можно текст |
| Наименование клиента | Текст | |
| Адрес клиента (город, улица, дом) | Текст | |
| Код продукта | Число | Можно текст |
| Наименование продукта | Текст | |
| Количество | Число | кг |
| Цена | Число | Руб./кг |
| Стоимость | Число | Руб. |
Каждая строка этой таблицы содержит информацию о конкретном заказе.
Правило №1
выполняется частично – повторяющихся групп нет, но есть составное поле Адрес клиента (город, улица, дом).
| Имя поля | Тип поля | Примечание |
| Номер заказа | Число | |
| Дата поставки | Дата | ДД.ММ.ГГ |
| Код клиента | Число | Можно текст |
| Наименование клиента | Текст | |
| Адрес клиента (город) | Текст | |
| Адрес клиента (улица, дом) | Текст | |
| Код продукта | Число | Можно текст |
| Наименование продукта | Текст | |
| Количество | Число | кг |
| Цена | Число | Руб./кг |
| Стоимость | Число | Руб. |
Правило №2
выполняется – первичным ключом таблицы является Номер заказа (если нумерация заказов сквозная, но можно использовать составной ключ Номер заказа – Дата поставки).
Правило №3
не выполняется – в таблице присутствуют поля, которые непосредственно не связаны с первичным ключом таблицы.
| Имя поля | Тип поля | Примечание |
| Номер заказа | Число | |
| Дата поставки | Дата | ДД.ММ.ГГ |
| Код клиента | Число | Можно текст |
| Наименование клиента | Текст | |
| Адрес клиента (город) | Текст | |
| Адрес клиента (улица, дом) | Текст | |
| Код продукта | Число | Можно текст |
| Наименование продукта | Текст | |
| Количество | Число | кг |
| Цена | Число | Руб./кг |
| Стоимость | Число | Руб. |
Значение Адреса клиента не зависит от ключа нашей таблицы – номера заказа, а зависит от значения кода клиента. То же самое относится к полю Наименование клиента. Поэтому эти поля нужно удалить из таблицы и включить их в таблицу-классификатор, содержащей сведения о клиентах.
Аналогично, Наименование продукта и его Цена зависят от кода продукта, но не зависят от номера заказа. Поэтому их следует поместить в другую таблицу – классификатор (справочник продуктов).
Таблица ЗАКАЗЫ
| Имя поля | Тип поля | Примечание |
| Номер заказа | Число | |
| Дата поставки | Дата | ДД.ММ.ГГ |
| Код клиента | Число | Можно текст |
| Код продукта | Число | Можно текст |
| Количество | Число | кг |
| Стоимость | Число | Руб. |
Таблица КЛИЕНТ
| Имя поля | Тип поля | Примечание |
| Код клиента | Число | Можно текст |
| Наименование клиента | Текст | |
| Адрес клиента (город) | Текст | |
| Адрес клиента (улица, дом) | Текст |
Таблица ПРОДУКТЫ
| Имя поля | Тип поля | Примечание |
| Код продукта | Число | Можно текст |
| Наименование продукта | Текст | |
| Цена | Число | Руб./кг |
Правило №4 – поля должны быть независимы. Поле Стоимость – это произведение цены на количество, а поэтому это поле вообще не следует включать в таблицы и хранить его значение: система просто вычислит стоимость заказа при необходимости.
Таблица ЗАКАЗЫ
| Имя поля | Тип поля | Примечание |
| Номер заказа | Число | |
| Дата поставки | Дата | ДД.ММ.ГГ |
| Код клиента | Число | Можно текст |
| Код продукта | Число | Можно текст |
| Количество | Число | кг |
Таблица КЛИЕНТ
| Имя поля | Тип поля | Примечание |
| Код клиента | Число | Можно текст |
| Наименование клиента | Текст | |
| Адрес клиента (город) | Текст | |
| Адрес клиента (улица, дом) | Текст |
Таблица ПРОДУКТЫ
| Имя поля | Тип поля | Примечание |
| Код продукта | Число | Можно текст |
| Наименование продукта | Текст | |
| Цена | Число | Руб./кг |
Теперь обратим внимание на то, что фактически в нашей задаче учета заказов введено ограничение – одновременно фирма-покупатель в одном заказе может оформить покупку только одного наименования продукта: если нужно заказать продуктов больше, необходимо оформить несколько отдельных заказов, а это, конечно, не удобно.
Если же снять это ограничение, то получается, что количество различных наименований продуктов в одном заказе в общем случае может быть различным, т.е. поля Код продукта и Количество являются повторяющейся группой. Фактически для каждого заказа количество этих полей должно быть различным. Но в реляционной БД количество полей в таблице фиксированно, и по Правилу №1 в таблице не должно быть повторяющихся полей.
Задача решается просто – для повторяющихся групп заводится отдельная таблица, причем для каждого элемента группы отводится одна запись со своим ключом. В нашем случае эта таблица будет содержать сведения о содержимом каждого заказа, т.е какие продукты нужно поставить заказчику одновременно в определенную дату. Например, если в заказе с номером 127 заказано три продукта, то в этой таблице СОДЕРЖИМОЕ появится три записи с одним номером заказа 127, при этом в каждой из этих записей будет различный код продукта и соответствующее заказанное количество этого продукта.
Таким образом, из таблицы ЗАКАЗЫ выделяется еще одна таблица СОДЕРЖИМОЕ, в которой будут следующие поля: Номер заказа, Код продукта, Количество.
В итоге после нормализации исходных данных мы получили четыре таблицы:
Таблица ЗАКАЗЫ
| Имя поля | Тип поля | Примечание |
| Номер заказа | Число | |
| Дата поставки | Дата | ДД.ММ.ГГ |
| Код клиента | Число | Можно текст |
Таблица СОДЕРЖИМОЕ ЗАКАЗА
| Имя поля | Тип поля | Примечание |
| Номер заказа | Число | |
| Дата поставки | Дата | ДД.ММ.ГГ |
| Код продукта | Число | Можно текст |
| Количество | Число | кг |
Таблица КЛИЕНТ
| Имя поля | Тип поля | Примечание |
| Код клиента | Число | Можно текст |
| Наименование клиента | Текст | |
| Адрес клиента (город) | Текст | |
| Адрес клиента (улица, дом) | Текст |
Таблица ПРОДУКТЫ
| Имя поля | Тип поля | Примечание |
| Код продукта | Число | Можно текст |
| Наименование продукта | Текст | |
| Цена | Число | Руб./кг |
Задача
Создать базу данных Поликлиника, которая должна содержать сведения о посещении пациентами поликлиники своего участкового врача. Вся необходимая информация приведена в таблице.
| ФИО пациента | Дата рождения | Адрес | Номер участка | ФИО врача | Дата посещения | Диагноз |
| Лосев О.И. | 20.04.65 | Лесная ул., 34-17 | Петрова К.В. | 11.10.2004 | Грипп | |
| Орлова Т.Н. | 15.09.70 | Парковая ул., 12-4-56 | Антонова Т.Р. | 11.10.2004 | ОРВИ | |
| Быкова Н.Ф. | 13.12.77 | Мира пр., 23-78 | Титов Н.А. | 12.10.2004 | Стенокардия | |
| Дуров С.С. | 19.05.60 | Лесная ул. 36-12 | Петрова К.В. | 13.10.2004 | Гастрит | |
| Орлова Т.Н. | 15.09.70 | Парковая ул., 12-4-56 | Антонова Т.Р. | 14.10.2004 | Гастрит |
Таблица ПАЦИЕНТ Таблица ВРАЧ
| Имя поля | Имя поля | |
| Код пациента | Код врача | |
| Фамилия | Фамилия | |
| Имя | Имя | |
| Отчество | Отчество | |
| Дата рождения | ||
| Код улицы | ||
| Дом | ||
| Квартира | ||
| Код участка |
Таблица УЧАСТОК Таблица УЛИЦЫ Таблица ДИАГНОЗЫ
| Имя поля | Имя поля | Имя поля | ||
| Код участка | Код улицы | Код диагноза | ||
| Код врача | Название улицы | Наименование диагноза |
Таблица СВЕДЕНИЯ О ПОСЕЩЕНИИ ВРАЧА
| Имя поля |
| Код пациента |
| Код участка |
| Дата посещения |
| Код диагноза |
| Самостоятельная работаТема «Базы данных» Вариант № 1 Вопросы 1. Что такое База данных? 2. Основная идея реляционного подхода. Задача Создать базу данных Видеотека, которая должна содержать сведения о конкретной кассете. Примерный набор атрибутов для каждой кассеты: 1) Номер кассеты, 2) Название видеоматериала, 3) Год создания, 4) Страна, 5) Рубрика (исторический фильм, фантастика и т.д.), 6) Фамилия режиссера, 7) Фамилия исполнителя главной роли, 8) Уровень (отлично, хорошо, средне и т.д.), 9) Краткое содержание, 10) Длительность, 11) Где находится и т.д. | Самостоятельная работаТема «Базы данных» Вариант № 2 Вопросы 1. Что такое реляционная База данных? 2. Основные понятия реляционной базы данных: запись, поле, ключ. Задача Создать базу данных Аудиотека, которая должна содержать сведения о конкретном диске. Примерный набор атрибутов для каждого диска: 1) Номер диска, 2) Название диска, 3) Год выпуска, 4) Название произведений, 5) Страна, 6) Автор музыки и слов, 7) Фамилия исполнителя или название группы, 8) Уровень (отлично, хорошо, средне и т.д.), 9) Длительность, 10) Где находится и т.д. |
Самостоятельная работаТема «Базы данных»
Вариант № 1
Вопросы
| Самостоятельная работаТема «Базы данных»
Вариант № 2
Вопросы
|






