Пусть некая фирма занимается оптовой торговлей, например кондитерскими изделиями. Покупателями (клиентами) фирмы являются различные кафе, рестораны, клубы и т.п. Для учета и анализа заказов в фирме создается БД, содержащая следующие поля:
Имя поля | Тип поля | Примечание |
Номер заказа | Число | |
Дата поставки | Дата | ДД.ММ.ГГ |
Код клиента | Число | Можно текст |
Наименование клиента | Текст | |
Адрес клиента (город, улица, дом) | Текст | |
Код продукта | Число | Можно текст |
Наименование продукта | Текст | |
Количество | Число | кг |
Цена | Число | Руб./кг |
Стоимость | Число | Руб. |
Каждая строка этой таблицы содержит информацию о конкретном заказе.
Правило №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
Вопросы
|