Автор: Пользователь скрыл имя, 09 Марта 2013 в 10:59, лекция
Традиционно фиксация данных осуществляется с помощью конкретного средства общения (например, с помощью естественного языка или изображений) на конкретном носителе (например, камне или бумаге). Обычно данные (факты, явления, события, идеи или предметы) и их интерпретация (семантика) фиксируются совместно, так как естественный язык достаточно гибок для представления того и другого. Примером может служить утверждение "Стоимость авиабилета 128". Здесь "128" – данное, а "Стоимость авиабилета" – его семантика.
Глава 1. Что такое базы данных и СУБД
1.1. Данные и ЭВМ
1.2. Концепция баз данных
1.3. Архитектура СУБД
1.4. Модели данных
Глава 2. Инфологическая модель данных "Сущность-связь"
2.1. Основные понятия
2.2. Характеристика связей и язык моделирования
2.3. Классификация сущностей
2.4. О первичных и внешних ключах
2.5. Ограничения целостности
2.6. О построении инфологической модели
Глава 3. Реляционный подход
3.1. Реляционная структура данных
3.2. Реляционная база данных
3.3. Манипулирование реляционными данными
Глава 4. Введение в проектирование реляционных баз данных
4.1. Цели проектирования
4.2. Универсальное отношение
4.3. Почему проект БД может быть плохим?
4.4. О нормализации, функциональных и многозначных зависимостях
4.5. Нормальные формы
4.6. Процедура нормализации
4.7. Процедура проектирования
4.8. Различные советы и рекомендации
Глава 5. Пример проектирования базы данных "Библиотека"
5.1. Назначение и предметная область
5.2. Построение инфологической модели
5.3. Проектирование базы данных
Литература
Предметный указатель
Теперь можно дать определения высших нормальных форм. И сначала будет дано определение для последней из предложенных – 5НФ.
Таблица находится в пятой нормальной форме (5НФ) тогда и только тогда, когда в каждой ее полной декомпозиции все проекции содержат возможный ключ. Таблица, не имеющая ни одной полной декомпозиции, также находится в 5НФ. |
Четвертая нормальная форма (4НФ) является частным случаем 5НФ, когда полная декомпозиция должна быть соединением ровно двух проекций. Весьма не просто подобрать реальную таблицу, которая находилась бы в 4НФ, но не была бы в 5НФ.
Как уже говорилось, нормализация – это разбиение таблицы на несколько, обладающих лучшими свойствами при обновлении, включении и удалении данных. Теперь можно дать и другое определение: нормализация – это процесс последовательной замены таблицы ее полными декомпозициями до тех пор, пока все они не будут находиться в 5НФ. На практике же достаточно привести таблицы к НФБК и с большой гарантией считать, что они находятся в 5НФ. Разумеется, этот факт нуждается в проверке, однако пока не существует эффективного алгоритма такой проверки. Поэтому остановимся лишь на процедуре приведения таблиц к НФБК.
Эта процедура основывается на том, что единственными функциональными зависимостями в любой таблице должны быть зависимости вида K->F, где K – первичный ключ, а F – некоторое другое поле. Заметим, что это следует из определения первичного ключа таблицы, в соответствии с которым K->F всегда имеет место для всех полей данной таблицы. "Один факт в одном месте" говорит о том, что не имеют силы никакие другие функциональные зависимости. Цель нормализации состоит именно в том, чтобы избавиться от всех этих "других" функциональных зависимостей, т.е. таких, которые имеют иной вид, чем K->F.
Если воспользоваться
1. Таблица имеет составной
Заменить T(K1,K2,F), первичный ключ (К1,К2), ФЗ К2->F
на T1(K1,K2), первичный ключ (К1,К2),
и T2(K2,F), первичный ключ К2.
2. Таблица имеет первичный (
Заменить T(K,F1,F2), первичный ключ К, ФЗ F1->F2
на T1(K,F1), первичный ключ К,
и T2(F1,F2), первичный ключ F1.
Для любой заданной таблицы, повторяя применение двух рассмотренных правил, почти во всех практических ситуациях можно получить в конечном счете множество таблиц, которые находятся в "окончательной" нормальной форме и, таким образом, не содержат каких-либо функциональных зависимостей вида, отличного от K->F.
Для выполнения этих операций необходимо первоначально иметь в качестве входных данных какие-либо "большие" таблицы (например, универсальные отношения). Но нормализация ничего не говорит о том, как получить эти большие таблицы. В следующей главе будет рассмотрена процедура получения таких исходных таблиц, а здесь приведем примеры нормализации.
Пример 4.1. Применим рассмотренные правила для полной нормализации универсального отношения "Питание" (рис. 4.2).
Шаг 1. Определение первичного ключа таблицы.
Предположим, что каждое блюдо имеет уникальное название, относится к единственному виду и приготавливается по единственному рецепту, т.е. название блюда однозначно определяет его вид и рецепт. Предположим также, что название организации поставщика уникально для того города, в котором он расположен, и названия городов уникальны для каждой из стран, т.е. название поставщика и город однозначно определяют этого поставщика, а город – страну его нахождения. Наконец, предположим, что поставщик может осуществлять в один и тот же день только одну поставку каждого продукта, т.е. название продукта, название организации поставщика, город и дата поставки однозначно определяют вес и цену поставленного продукта. Тогда в качестве первичного ключа отношения "Питание" можно использовать следующий набор атрибутов:
Блюдо, Дата_Р, Продукт, Поставщик, Город, Дата_П.
Шаг 2. Выявление полей, функционально зависящих от части состваного ключа.
Поле Вид функционально
Блюдо->Вид.
Аналогичным образом можно получить зависимости:
Блюдо->Рецепт
(Блюдо, Дата_Р)->Порций
Продукт->Калорийность
(Блюдо, Продукт)->Вес
Город->Страна
(Поставщик, Город, Дата_П)->Цена
Шаг 3. Формирование новых таблиц.
Полученные функциональные зависимости опредляют состав таблиц, которые можно сформировать из данных универсального отношения:
Блюда (Блюдо, Вид)
Рецепты (Блюдо, Рецепт)
Расход (Блюдо, Дата_Р, Порций)
Продукты (Продукт, Калорийность)
Состав (Блюдо, Продукт, Вес (г))
Города (Город, Страна)
Поставки (Поставщик, Город, Дата_П, Вес (кг), Цена).
Шаг 4. Корректировка исходной таблицы.
После выделения из состава универсального отношения указанных выше таблиц, там остались лишь сведения о поставщиках, для хранения которых целесообразно создать таблицу
Поставщики (Поставщик, Город),
т.е. использовать часть исходного первичного ключа, так как остальные его части уже ничего не определяют.
Таким образом, процедура последовательной нормализации позволила получить проект, лучший, чем приведен на рис. 4.3.
Пример 4.2. Для улучшения проекта, приведенного на рис. 4.4, нужно определить первичные ключи таблиц и выявить, нет ли в таблицах полей, зависящих лишь от части этих ключей. Такое поле есть только в одной таблице. Это поле Страна в таблице Поставщики. Выделяя его вместе с ключем Город в таблицу Страны, получим проект, приведенный на рис. 3.2.
Процесс проектирования информационных систем является достаточно сложной задачей. Он начинается с построения инфологической модели данных (п. 2), т.е. идентификации сущностей. Затем необходимо выполнить следующие шаги процедуры проектирования даталогической модели.
1. Представить каждый стержень (независимую сущность) таблицей базы данных (базовой таблицей) и специфицировать первичный ключ этой базовой таблицы.
2. Представить каждую ассоциацию
(связь вида "многие-ко-многим"
или "многие-ко-многим-ко-
3. Представить каждую
4. Представить каждое обозначение, которое не рассматривалось в предыдущем пункте, как базовую таблицу с внешним ключом, идентифицирующим обозначаемую сущность. Специфицировать связанные с каждым таким внешним ключом ограничения.
5. Представить каждое свойство как поле в базовой таблице, представляющей сущность, которая непосредственно описывается этим свойством.
6. Для того чтобы исключить
в проекте непреднамеренные
7. Если в процессе нормализации было произведено разделение каких-либо таблиц, то следует модифицировать инфологическую модель базы данных и повторить перечисленные шаги.
8. Указать ограничения целостности проектируемой базы данных и дать (если это необходимо) краткое описание полученных таблиц и их полей.
На рис. 4.6 показан синтаксис
предложения, предлагаемого для
регистрации принимаемых проект
Рис. 4.6. Синтаксис описания проектных решений
Для примера приведем описания таблиц "Блюда" и "Состав":
СОЗДАТЬ ТАБЛИЦУ Блюда *( Стержневая сущность )
ПЕРВИЧНЫЙ КЛЮЧ ( БЛ )
ПОЛЯ ( БЛ Целое, Блюдо Текст 60, Вид Текст 7 )
ОГРАНИЧЕНИЯ ( 1. Значения поля Блюдо должны быть
уникальными; при нарушении
сообщения "Такое блюдо уже есть".
2. Значения поля Вид должны принадлежать
набору: Закуска, Суп, Горячее, Десерт,
Напиток; при нарушении вывод сообщения
"Можно лишь Закуска, Суп, Горячее,
Десерт, Напиток");
СОЗДАТЬ ТАБЛИЦУ Состав *( Связывает Блюда и Продукты )
ПЕРВИЧНЫЙ КЛЮЧ ( БЛ, ПР )
ВНЕШНИЙ КЛЮЧ ( БЛ ИЗ Блюда
NULL-значения НЕ ДОПУСТИМЫ
УДАЛЕНИЕ ИЗ Блюда
ОБНОВЛЕНИЕ Блюда.БЛ
ВНЕШНИЙ КЛЮЧ ( ПР ИЗ Продукты
NULL-значения НЕ ДОПУСТИМЫ
УДАЛЕНИЕ ИЗ Продукты
ОБНОВЛЕНИЕ Продукты.ПР
ПОЛЯ ( БЛ Целое, ПР Целое, Вес Целое )
ОГРАНИЧЕНИЯ ( 1. Значения
полей БЛ и ПР должны
набору значений из соответствующих полей таблиц
Блюда и Продукты; при нарушении вывод сообщения
"Такого блюда нет" или "Такого продукта нет".
2. Значение поля Вес должно лежать в пределах
от 0.1 до 500 г. );
Рассмотренный язык описания данных, основанный на языке SQL [5], позволяет дать удобное и полное описание любой сущности и, следовательно, всей базы данных. Однако такое описание, как и любое подробное описание, не отличается наглядностью. Для достижения большей иллюстративности целесообразно дополнять проект инфологической моделью, но менее громоздкой, чем рассмотренная в главе 2.
Для наиболее распространенных реляционных баз данных можно предложить язык инфологического моделирования "Таблица-связь", пример использования которого приведен на рис. 4.7. В нем все сущности изображаются одностолбцовыми таблицами с заголовками, состоящими из имени и типа сущности. Строки таблицы – это перечень атрибутов сущности, а те из них, которые составляют первичный ключ, распологаются рядом и обводятся рамкой. Связи между сущностями указываются стрелками, направленными от первичных ключей или их составляющих.
Рис. 4.7. Инфологическая модель базы данных "Питание", построенная с помощью языка "Таблицы-связи"
Векторы. Представляйте векторы по столбцам, а не по строкам. Например, диаграмму продаж товаров x, y, ... за последние годы лучше представить в виде:
ТОВАР МЕСЯЦ КОЛ-ВО
-–––– ––––––– ––––––
x ЯНВАРЬ 100
x ФЕВРАЛЬ 50
... ... ...
x ДЕКАБРЬ 360
y ЯНВАРЬ 75
y ФЕВРАЛЬ 144
... ... ...
y ДЕКАБРЬ 35
... ... ...
а не так, как показано ниже:
ТОВАР КОЛ-ВО КОЛ-ВО КОЛ-ВО
ЯНВАРЬ ФЕВРАЛЬ ... ДЕКАБРЬ
––––– ––––––– ––––––– –––––––
x 100 50 ... 360
y 75 144 ... 35
... ... ... ... ...
Одна из причин такой рекомендации заключается в том, что при этом значительно проще записываются обобщенные (параметризованные) запросы. Рассмотрите, например, как выглядит сравнение сведений из диаграммы продаж товара i в месяце с номером m со сведениями для товара j в месяце с номером n, где i, j, m и n – параметры.
Неопределенные значения. Будьте очень внимательны с неопределенными (NULL) значениями. В поведении неопределенных значений проявляется много произвола и противоречивости. В разных СУБД при выполнении различных операций (сравнение, объединение, сортировка, группирование и другие) два неопределенных значения могут быть или не быть равными друг другу. Они могут по разному влиять на результат выполнения операций по определению средних значений и нахождения количества значений. Для исключения ошибок в ряде СУБД существует возможность замены NULL-значения нулем при выполнении расчетов, объявление всех NULL-значений равными друг другу и т.п.
База данных предназначена для хранения данных о приобретенных библиотекой изданиях (монографиях, справочниках, сборниках статей и т.п.), информации о местонахождении отдельных экземпляров (переплетов) каждого издания и сведений о читателях.
Д27 |
Дейт К. Руководство
по реляционной СУБД DB2 / Пер. с англ. и предисл.
М.Р.Когаловского. – М.: Финансы и статистика,
1988. – 320 с.: ил. ББК 32.973 |
Информация о работе Основы проектирования реляционных баз данных