Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие СУБД 2011.pdf
Скачиваний:
68
Добавлен:
10.06.2015
Размер:
2.75 Mб
Скачать

29

Задание

Разработайте ER-модель для будущей базы данных:

1.База данных поликлиники. Учёту подлежат: больные (ФИО, домашний адрес), лечащий персонал (ФИО, специальность), дата посещения больным врача и поставленный диагноз.

2.База данных футбольных матчей. Учёту подлежат: спортивный клуб, игроки команд (ФИО), дата матча, игравшие команды, забитые мячи, авторы голов.

3.Бюро по туризму. Учёту подлежат: клиенты фирмы (ФИО, домашний адрес), список курортов с ценами и продолжительностью путёвок, даты поездок клиентов на курорт.

4.Магазин видеофильмов. Учёту подлежат: название фильма, жанр, год выхода, киностудия, режиссёр, цена, носитель (DVD/Видеокассета), число экземпляров.

5.Домашняя фонотека. Учёту подлежат: исполнитель, страна к которой принадлежит исполнитель, название альбома, год выхода альбома, музыкальный жанр альбома, наименование и продолжительность музыкальных композиций входящих в альбом, формат хранения (CD, mp3, …).

6.Склад автомобильных запчастей. Учёту подлежат: название детали, производитель, цена, в какой марке автомобиля применяется, поставщик детали.

7.Метеостанция. Учёту подлежат: названия станций, их географические координаты, персонал станций (ФИО, должность), каждая метеостанция ежечасно сохраняет данные о температуре окружающей среды.

8.Библиотека. Учёту подлежат: жанр книги, авторы книги, название книги, количество экземпляров, место хранения книги, читатель (ФИО и адрес), дата получения читателем, дата возврата книги.

9.Склад телевизоров. Учёту подлежат: поставщик, производитель телевизора, модель телевизора, дата поставки телевизора, дата списания телевизора со склада, не менее 5 характеристик телевизора (производитель, диагональ, вес, и т.п.), цена телевизора от поставщика, отпускная цена телевизора, количество телевизоров.

10.Автовокзал. Учёту подлежат: автобусы (марка, дата выпуска и государственный регистрационный номер), водители (ФИО, дата рождения, водительская категория, какой автобус закреплён), расписание движения автобусов (наименование населённого пункта, день и время отправления, день и время прибытия, стоимость билета, автобус выполняющий рейс).

Примечания

1)Выполненное задание сдаётся в письменном (распечатанном) виде и заверяется подписью преподавателя.

2)При построении ER-модели рекомендуется воспользоваться услугами специализированных редакторов. Например: ER/Studio входящего в по-

ставку Embarcadero RAD Studio или Microsoft Visio.

Ставропольский государственный университет, кафедра КБ

30

V. Нормализация данных

Вид занятия – лабораторное занятие. Время занятия – 2 часа.

Программное обеспечение – среда Microsoft Access.

Процесс нормализации был впервые предложен Э. Ф. Коддом в 1972 году, он преследует две цели:

1.Исключение избыточности данных.

2.Обеспечение наибольшей гибкости структуры таблиц на случай будущих изменений.

Нормализация осуществляется за счёт нескольких последовательных этапов, каждый из которых соответствует некоторой нормальной форме, обладающей известными свойствами. Различают 5 нормальных форм (normal forms), то есть мы можем говорить о 5-ти этапах нормализации. Кроме того, существует промежуточная форма нормализации, получившая название нормальной формы Бойса-Кодда (НФБК)2, она расположена между 3-й и 4-й нормальными формами.

Первая нормальная форма (1NF)

Первая нормальная форма представляет собой основу реляционной модели данных.

Приведённая к 1NF таблица не может содержать повторяющихся групп, кроме того, каждое поле таблицы должно быть неделимым.

Что такое неделимое поле и как достичь неделимости на практике? Предположим, что мы работаем над базой данных домашней библиотеки (рис. 5.1). Взгляните на ненормализованный вариант таблицы Library. Она состоит из двух полей: Writer – автор книги и Books – название произведения. В этой таблице представлены сразу две ошибки, связанные с неделимостью поля. Наиболее грубая из них – в поле Books. Обратите внимание, что атрибут поля одновременно содержит названия двух и более произведений. Это неверно – для каждого произведения должна быть отведена отдельная строка таблицы. Вторая ошибка связана с полем Writer, где мы храним имя, отчество и фамилию писателя. В таких целях целесообразно сформировать три отдельных поля: имя, отчество и фамилия. Причин тому несколько. Представьте себе, что при вводе информации в колонку Write пользователь вместо «Лев Николаевич Толстой» ввёл «Толстой Лев Николаевич». С точки зрения человеческой логики это абсолютно одинаковые значения, но компьютер воспримет их как разные, что сразу отразиться на работе программы. Вторая причина – разделив колонку Writer на три (по смыслу уже неделимых) колонки мы значительно упростим задачу по сортировке и выборке данных средствами SQL запросов. Например, теперь мы получим возможность отобрать записи авторов без отчества, и т.п. Заметьте, что приведённая к первой нормальной форме таблица приобрела явную избыточность, но на этом этапе это не страшно.

2 Многие специалисты полагают, что НФБК следует считать не очередной нормальной формой, а лишь более строгим определением третей нормальной формы.

© Осипов Д.Л., 2011

31

Рисунок 5.1. – Создание неделимых полей

Теперь поговорим о повторяющейся группе. Повторяющаяся группа представляет собой поле, которое повторяется внутри строки, с целью хранения нескольких значений для атрибута. Допустим, что мы разрабатываем базу данных, предназначенную для хранения данных о температуре воздуха, причём измерения производятся ежедневно, каждый чётный час. На рисунке 5.2 изображена классическая ошибка начинающего программиста. Для хранения даты в таблице «temperature» используется поле TmprDate, а для хранения температуры поле Tmpr. В одном и том же поле заносится несколько значений, разделённых точкой с запятой. Несостоятельность такого подхода при проектировании таблицы не вызывает и сомнения. Представьте себе, как бы выглядела таблица температур, если бы измерения проводились каждые четверть часа, или каждую минуту… Можете поверить, что даже если повторяющихся групп не много, то они всё равно затруднят построение запросов и форматирование отчётов, поэтому посмотрим, как от них избавиться. Вернёмся к рисунку 5.2. Для того, чтобы преобразовать таблицу температур к 1NF нам потребовалось создать таблицу, состоящую из трёх столбцов – даты, времени и температуры. И здесь (как и в случае с приведением к 1NF таблицы авторов) мы получили некоторую избыточность, но зато всё логично.

Рисунок. 5.2 – Пример устранения повторяющейся группы

Ставропольский государственный университет, кафедра КБ

32

Вторая нормальная форма (2NF)

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

Приведённая ко 2NF таблица представляет собой таблицу, у которой каждое поле, не входящее в состав первичного ключа, характеризуется полной функциональной зависимостью от этого первичного ключа.

Другими словами у таблицы 2NF все не ключевые поля полностью зависят от пер-

вичного ключа или (в случае составного первичного ключа) от каждого поля пер-

вичного ключа. Таким образом любое, хранящееся в не ключевом столбце таблицы, значение однозначно определяется значением первичного ключа.

Рисунок 5.3. – Приведение таблицы к 2NF

Итак, на втором этапе приведения таблицы к реляционному виду необходимо создание первичного ключа. Рассмотрим очередной пример. А для этого предлагаю вернуться к таблице Library. Для преобразования этой таблицы ко второй нормальной форме просто дополняем её столбцом – Library_ID (рис. 5.3). В качестве первичного ключа разработчики баз данных очень часто используют поля автоинкрементного типа. В этом случае при вставке новой записи, значение её первичного ключа получает приращение на одну единицу, что гарантирует уникальность этого ключа.

Третья нормальная форма (3NF)

Этап приведения таблицы к третей нормальной форме может начинаться только после того, как таблица была приведена к 2NF.

Приведённая к 3NF таблица не имеет избыточных не ключевых полей, связанных с не ключевыми полями других таблиц.

Не надолго возвратимся к рисунку 3.3 (лабораторная работа “Ключи, организация связи между таблицами”). Представленная на рисунке таблица “Students” приведена ко 2NF, но полному соответствию 3NF мешает поле SpCod. В этом столбце содержится данные о названиях специальностей. Это поле не ключевое и содержит повторяющиеся данные. Поэтому оно должно быть вынесено в отдельную таблицу (рис. 3.8). Представленные на этом рисунке таблицы “Students” и “Spec” приведены к 3NF.

Нормальная форма Бойса-Кодда (BCNF)

Технически нормальная форма Бойса-Кодда просто усиливает таблицу, находящуюся в 3NF.

Ставропольский государственный университет, кафедра КБ