Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по SQL.DOC
Скачиваний:
205
Добавлен:
01.05.2014
Размер:
1.16 Mб
Скачать

1.6. Сетевая и иерархическая модели данных

В основе сетевой схемы (модели) находится сеть из объектов и взаимосвязей (отношений) между ними.

В основе иерархической схемы (модели) находится дерево из объектов и взаимосвязей (отношений) между ними.

Сетевые и иерархические модели удобны в тех случаях, когда реальные объекты связаны аналогично сети или дереву. Например, структура предприятия (учреждения) подобна дереву с корнем - руководителем предприятия.

Сетевые и иерархические базы данных используют списковые структуры. По этой причине они занимают меньше места в памяти ЭВМ, чем реляционные базы данных. Однако обращение по индексу обеспечивает реляционным базам большее быстродействие. По приведенным соображениям в настоящее время применяют все три вида баз данных, но реляционные базы заметно опередили остальные в последних комерческих пакетах.

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

В процессе проектирования базы данных выполняют декомпозицию первичного отношения, которое содержит все выявленные при обсуждении проекта атрибуты. Необходимость декомпозиции на совокупность отношений диктуется тем, что если ее не выполнять, то приходится хранить в таблицах многократно повторяющиеся одинаковые значения. Первичную и промежуточные формы выражения исходного отношения классифицируют на пять, так называемых, нормальных форм.

1.7. Case - методы проектирования баз данных

CASE - методы (Computer-Aided Software Engineering - методы) проектирования баз данных основаны на понятиях “сущность” (‘entity’) и взаимосвязь (‘relationship’). CASE - методы используют графическую форму отражения взаимосвязей объектов и незначительно различаются изобразительными средствами. Известны модель Chen’а, модель IEM (Information Engineering Metod), модель SSADM (Structured Systems Analysis Design Metod), модель IDEF1X и т.п..

CASE-методы широко используют ER-диаграммы (Entity - Relationship диаграммы) и потому нередко называются ER-методами, ER - технологией проектирования, методами диаграмм “сущность - связь”, “сущность - взаимосвязь”.

1.8. Понятия “сущность” и “взаимосвязь”

Понятия “сущность” и “взаимосвязь” не имеют четкого определения в рассматриваемой области знаний. Рекомендуется называть “сущностью” объект, сведения о котором должны храниться в базе данных. Общепризнано, что “сущность” задается существительным, например, ЧЕЛОВЕК, СТУДЕНТ, САМОЛЕТ, КОМПЬЮТЕР.

Свойства сущности называют атрибутами. В реляционной модели данных сущность - это имя отношения, а атрибуты - имена элементов кортежей.

Ключ сущности - совокупность атрибутов, значения которых однозначно характеризуют экземпляр сущности.

Взаимосвязью, или просто связью, называют отношение между сущностями.

Взаимосвязи рекомендуется сопоставлять глагол или глагол с обстоятельствами,

например, СОСТОИТ ИЗ, ПОКУПАЮТ, ПОКУПАЮТ ЗИМОЙ и т.п.

Сущность и взаимосвязь образуют естественные конструкции при описании отношений между объектами. Например,

МАГАЗИН <ПРОДАЕТ> КОМПЬТЕР

КОМЬЮТЕР <ИМЕЕТ> СТОИМОСТЬ .

Взаимосвязь характеризуется арностью и степенью. Если взаимосвязь объединяет k - сущностей, то она называется k - арной. Двух-арную взаимосвязь называют бинарной.

Степень взаимосвязи определяется видом соответствия между экземплярамисущностей. Если экземпляру одной сущности может соответствовать один и только один экземпляр другой сущности, то степень взаимосвязи 1 : 1 (один к одному).

Если экземпляру одной сущности может соответствовать не обязательно один, а именно, или один, или больше одного или ни одного экземпляра другой сущности, то степень взаимосвязи 1 : M (один ко многим). Эта же взаимосвязь, прочитанная в обратном направлении, имеет степень M : 1 (много к одному).

Наконец, возможен случай степени взаимосвязи M : N (многие ко многим). Эту взаимосвязь нередко исключают путем создания фиктивной сущности и двух взаимосвязей степеней M : 1 и 1 : N .

Степень взаимосвязи используется потому, что в ней заключен характер функциональной зависимости между атрибутами: однозначная функция, многозначная функция, отсутствие функциональной зависимости.

Каждую из двух точек соединения сущностей и взаимосвязи характеризуют классом принадлежности сущности к данной взаимосвязи. Если все экземпляры сущности участвуют во взаимосвязи, то класс принадлежности сущности называют обязательным. Если отдельные экземпляры сущности могут не участвовать во взаимосвязи, то класс принадлежности сущности будет необязательным.

Рис. иллюстрирует определение класса принадлежности; точки соответствуют экземплярам сущностей.

необязательный обязательный необязательный необязательный

Рис.

1.9. ER - диаграммы в модели Chen’а

Сущность и взаимосвязь изображают графически.

В модели Chen’а применяют трехдольный нагруженный граф. В вершине первого вида, которую рисуют в форме прямоугольника, указывают сущность; в вершинах второго вида в форме овалов - атрибуты сущности; в вершине третьего вида в форме ромбов - взаимосвязь. Ключ сущности отмечают двойным овалом. Дуги графа помечают “1” или “не 1” (“буквой”).

Прямоугольники сущностей могут иметь дополнительный прямоугольник в точке присоединения взаимосвязи для отражения того свойства сущности, что класс ее принадлежности взаимосвязи является обязательным.

Пример.

На рис. вместо двойных овалов использован символ (*) для отметки ключей.

1.10. ER-диаграммы в модели IDEF1X

В модели IDEF1X, которая используется в программном пакете ERwin/ERX2.1, не рисуют ромбы, а название взаимосвязи надписывают над дугой.

Кроме того не пишут “1”, а случай “не 1” изображают жирной точкой.

В вершинах графа, по-прежнему сопоставляемых сущностям, указывают сущность и ее атрибуты, причем прямоугольник делят на две части: область ключа выше разделительной линии и область данных ниже разделительной линии. Ключевые атрибуты записывают в области ключа.

В случае ввода диаграммы при помощи пакета ERwin атрибут сущности можно помечать как внешний ключ (foreign key) с указанием родительской сущности. Внешний ключ (foreign key) - атрибут, значения которого не могут бытьне из значений атрибута родительской сущности. Часто имена родительского и дочернего атрибутов одинаковы, хотя это и не обязательно. Кстати, при вводе данных следует сначала ввести значения в родительскую таблицу и только затем в атрибут, помеченный как внешний ключ.

В зависимости от использования внешних ключей сущности подразделяют на зависимые и независимые. Независимые сущности не имеют внешних ключей и изображаются обычным прямоугольником, а зависимые - прямоугольником со скругленными углами, от которого протягивается линия взаимосвязи с родительской сущностью. Взаимосвязь может быть идентифицирующей (identifying relationship) и неидентифицируюшей (non-identifying relationship) в зависимости от того, в какой области находится внешний ключ: в области ключа для идентифицирующей взаимосвязи и в области данных для неидентифицирующей взаимосвязи. В случае неидентифицирующей взаимосвязи соединительную линию между сущностями изображают пунктиром.

Пример.

Если сущность желательно разделить на категории, то в цепи связи между сущностями изображают дискриминатор, показанный на рис. .

Лекция 2.

Переход от ER-диаграммы к реляционной (табличной) модели

Реальным объектам и их взаимодействиям можно сопоставить бесконечное число ER-диаграмм. Можно ввести одну, единственную сущность со всеми атрибутами и сопоставить ей одну таблицу с теми столбцами, имена которых встречаются в атрибутах сущности. Такой вариант построения базы фактически игнорирует ER-диаграмму и практически не используется, так как имеет низкую эффективность уже в базах среднего объема (сотни записей). Единая таблица используется ниже только для иллюстрации рассуждений.

Единственная сущность и одна таблица - это первая нормальная форма представления базы данных. С целью сокращения объема хранимой информации и для ускорения поиска данных выполняют декомпозицию единственной сущности (отношения). Известны описываемые ниже формальные правила декомпозиции сущностей (отношений).

“Лобовое” преобразование ER-диаграммы в реляционную (табличную) модель базы данных состоит в том, что каждой сущности сопоставляется таблица, а взаимосвязи учитываются путем копирования ключа одной таблицы в другую (взаимосвязанную) таблицу. Такой способ применен в пакете ERwin. Недостаток этого способа преобразования заключается в том, что в таблицах часто возникает дублирование данных, а также “пустоты”.

Г.Джексоном сформулированы широко известные в данной области знаний правила для перехода от ER-диаграмм к табличной модели, позволяющие получить минимальное число таблиц, не содержащих “пустот” и дублированных данных. Однако, как будет видно из приведенных далее примеров, общее число столбцов всех таблиц после преобразования нередко увеличивается за счет дублирования ключей. Как следствие этого явления в некоторых ситуациях размер базы после преобразования увеличивается. Поэтому следует критически отнестись к рассматриваемым ниже преобразованиям.

Эти же правила можно использовать для преобразования ER -диаграмм.

Правило 1. Если степень взаимосвязи 1: 1 и классы принадлежности обеих сущностей обязательны, то для представления взаимосвязи и обеих сущностей достаточно одного отношения (одной таблицы), в схему которого включают все атрибуты обеих сущностей. Ключом отношения может быть ключ любой сущности.

Этим правилом можно пользоваться для объединения двух сущностей.

Пример. Каждый студент имеет зачетную книжку и только одну.

ER - диаграмма имеет следующий вид.

-------------------- --------------------------------------

! СТУДЕНТ! ! ЗАЧЕТНАЯ КНИЖКА !

! -----------------! имеет !-------------------------------------!

! * Фамилия !--------------------------- ! * Номер !

! * Имя ! 1 1 !-------------------------------------!

! * Отчество ! ! Дата выдачи !

! -----------------! ! !

! Дом. адрес ! ! !

-------------------- ---------------------------------------

Согласно правилу 1 составим следующее отношение (таблицу).

ОТНОШЕНИЕ: СПИСОК

-----------------------------------------------------------------------------------------------------------------

! *Фамилия ! *Имя ! *Отчество ! Дом. адрес ! Номер ! Дата выдачи !

!----------------------------------------------------------------------------------------------------------------!

! ФФ1 ИИ1 ОО1 Да1 НН1 Дв1 !

! ФФ2 ИИ1 ОО2 Да2 НН2 Дв1 !

! ФФ2 ИИ2 ОО2 Да2 НН3 Дв1 !

! ФФ3 ИИ3 ОО3 Да3 НН4 Дв1 !

-----------------------------------------------------------------------------------------------------------------

Примечание. В примере использован смешанный синтаксис для отображения диаграммы, ключей и степеней взаимосвязей. Ключи помечены и звездочкой и расположением в зоне ключа. Кроме того здесь и далее в примерах конкретные данные закодированы буквенными обозначениями.

Правило 2. Если степень взаимосвязи 1: 1, класс принадлежности первой сущности обязателен, а класс принадлежности второй сущности необязателен, то для представления взаимосвязи необходимы два отношения (две таблицы), ключами которых являются ключи сущностей. Схема первого отношения содержит атрибуты первой сущности и ключ второй сущности, то есть сущности с необязательным классом принадлежности. Схема второго отношения содержит атрибуты второй сущности.

Пример. Студент может иметь проездную карточку, а может и не иметь.

ER - диаграмма имеет следующий вид.

----------------------------------------------- -------------------

! ПРОЕЗДНАЯ КАРТОЧКА ! ! СТУДЕНТ !

! --------------------------------------------! принадлежит !------------------!

! * Номер !---------------------------! * Фамилия !

!---------------------------------------------! 1 1 ! * Имя !

! Цена ! ! * Отчество !

! ! !------------------!

! ! ! Дом.адрес !

------------------------------------------------ --------------------

Если сопоставить диаграмме одну таблицу, то в ней будут “пустоты”:

ОТНОШЕНИЕ: КАРТОЧКА

--------------------------------------------------------------------------------------------------------

! *Фамилия ! *Имя ! *Отчество ! Дом. адрес ! Номер ! Цена !

!--------------------------------------------------------------------------------------------------------

! ФФ1 ИИ1 ОО1 Да1 НН1 ЦЦ1 !

! ФФ2 ИИ1 ОО2 Да2 ------- ------ !

! ФФ2 ИИ2 ОО2 Да2 ------- ------ !

! ФФ3 ИИ3 ОО3 Да3 НН2 ЦЦ1 !

--------------------------------------------------------------------------------------------------------

Согласно правилу 2 составим два следующих отношения.

ОТНОШЕНИЕ 1: КАРТОЧКА

----------------------------------------------------------------------------

! * Номер ! Цена ! Фамилия ! Имя ! Отчество !

!--------------------------------------------------------------------------!

! НН1 ЦЦ1 ФФ1 ИИ1 ОО1 !

! НН2 ЦЦ1 ФФ3 ИИ3 ОО3 !

----------------------------------------------------------------------------

ОТНОШЕНИЕ 2: СТУДЕНТ

----------------------------------------------------------------------------

! *Фамилия ! *Имя ! *Отчество ! Дом. адрес !

!---------------------------------------------------------------------------

! ФФ1 ИИ1 ОО1 Да1 !

! ФФ2 ИИ1 ОО2 Да2 !

! ФФ2 ИИ2 ОО2 Да2 !

! ФФ3 ИИ3 ОО3 Да3 !

----------------------------------------------------------------------------

Правило 3. Если степень взаимосвязи 1: 1 и классы принадлежности обеих сущностей необязательны, то для представления взаимосвязи необходимы три отношения (три таблицы). Схема первого отношения состоит из атрибутов первой сущности, второго - из атрибутов второй сущности, а третьего - из ключей обеих сущностей.

Пример. Студент женат на студентке, а может быть и не женат; студентка может быть замужем,а может и не быть замужем.

ER - диаграмма имеет следующий вид.

----------------------------- ----------------------------

! СТУДЕНТ ! ! СТУДЕНТКА !

! ---------------------------! женат на !----------------------------!

! * ФИО_НТ !--------------------------! * ФИО_КА !

! -------------------------- 1 1 !----------------------------!

! Дом.адрес_НТ ! ! Дом.адрес_КА !

---------------------------- -----------------------------

Если сопоставить диаграмме одну таблицу, то в ней будут “пустоты”:

ОТНОШЕНИЕ: БРАК

-----------------------------------------------------------------------------------------------

! *ФИО_НТ ! Дом. адрес_НТ ! *ФИО_КА ! Дом. адрес_КА !

!---------------------------------------------------------------------------------------------!

! ФИО1 Да1 --------- -------- !

! ФИО2 Да2 --------- -------- !

! ФИО3 Да3 ФИО4 Да3 !

! --------- ------- ФИО1 Да4 !

! --------- ------- ФИО5 Да5 !

! --------- ------- ФИО5 Да5 !

-----------------------------------------------------------------------------------------------

Согласно правилу 3 составим три следующих отношения.

ОТНОШЕНИЕ 1: СТУДЕНТ ОТНОШЕНИЕ 2: СТУДЕНТКА

------------------------------------------------ ------------------------------------------------

! *ФИО_НТ ! Дом. адрес_НТ ! ! *ФИО_КА ! Дом. адрес_КА !

!-----------------------------------------------! !----------------------------------------------!

! ФИО1 Да1 ! ! ФИО4 Да3 !

! ФИО2 Да2 ! ! ФИО5 Да4 !

! ФИО3 Да3 ! ! ФИО6 Да5 !

----------------------------------------------- ! ФИО7 Да5 !

------------------------------------------------

ОТНОШЕНИЕ 3: БРАК

---------------------------------------------------------

! *ФИО_НТ ! *ФИО_КА !

!--------------------------------------------------------!

! ФИО3 ФИО4 !

---------------------------------------------------------

Правило 4. Если степень взаимосвязи 1: M и классы принадлежности обеих сущностей обязательны, то для представления взаимосвязи необходимы два отношения (две таблицы). Схема первого отношения содержит атрибуты первой сущности, схема второго - атрибуты второй сущности и ключ первой сущности.

Пример. Группа состоит из студентов, причем студент обязательно закреплен за группой.

ER - диаграмма имеет следующий вид.

----------------------------- ----------------------------

! ГРУППА ! ! СТУДЕНТ !

! --------------------------! состоит из !----------------------------!

! * Номер !-------------------------- ! * ФИО !

! --------------------------! 1 M !----------------------------!

! Кафедра ! ! Дом.адрес !

! Факультет ! ! !

---------------------------- -----------------------------

Если сопоставить диаграмме одну таблицу, то в ней будут многократные повторения:

ОТНОШЕНИЕ: СПИСОК

-----------------------------------------------------------------------------------------------

! Номер ! Кафедра ! Факультет ! *ФИО ! Дом. адрес !

!---------------------------------------------------------------------------------------------!

! НН1 КК1 ФФ1 ФИО1 Да1 !

! НН1 КК1 ФФ1 ФИО2 Да2 !

! НН1 КК1 ФФ1 ФИО3 Да3 !

! НН2 КК2 ФФ1 ФИО4 Да4 !

! НН2 КК2 ФФ1 ФИО5 Да5 !

! НН2 КК2 ФФ1 ФИО6 Да5 !

-----------------------------------------------------------------------------------------------

Согласно правилу 4 составим два следующих отношения.

ОТНОШЕНИЕ 1: ГРУППА ОТНОШЕНИЕ 2: СТУДЕНТ

--------------------------------------------------------- --------------------------------------------------

! *Номер ! Кафедра ! Факультет ! ! *ФИО ! Дом. адрес ! Номер !

!--------------------------------------------------------! !-------------------------------------------------!

! НН1 КК1 ФФ1 ! ! ФИО1 Да1 ! НН1 !

! НН2 КК2 ФФ1 ! ! ФИО2 Да2 ! НН1

--------------------------------------------------------- ! ФИО3 Да3 ! НН1

! ФИО4 Да4 ! НН2 !

! ФИО5 Да5 ! НН2 !

! ФИО6 Да5 ! НН2 !

---------------------------------------------------

Лекция 3.

Правило 5. Если степень взаимосвязи 1: M и класс принадлежности второй сущности необязателен, то независимо от класса принадлежности первой сущности для представления взаимосвязи необходимы три отношения (три таблицы). Схемы первого и второго отношений содержат атрибуты соответствующих сущностей, а в схему третьего отношения включаются ключи обеих сущностей.

Пример. Студент имеет одного, более одного или ни одного ребенка.

ER - диаграмма имеет следующий вид.

----------------------------- ----------------------------

! СТУДЕНТ ! ! РЕБЕНОК !

! ---------------------------! имеет !----------------------------!

! *ФИО_С !--------------------------! * ФИО_Р !

! --------------------------! 1 M !----------------------------!

! Дом. адрес ! ! Год рождения !

---------------------------- -----------------------------

Если сопоставить диаграмме одну таблицу, то в ней будут пустые места:

ОТНОШЕНИЕ: ДЕТИ

-------------------------------------------------------------------------------------

! *ФИО_С ! Дом. адрес ! *ФИО_Р ! Год рождения !

!------------------------------------------------------------------------------------!

! ФИО1 Да1 ---------- Гр1 !

! ФИО2 Да2 ---------- Гр1 !

! ФИО3 Да3 ФИО7 Гр2 !

! ФИО3 Да3 ФИО8 Гр3 !

! ФИО4 Да4 ФИО9 Гр3 !

! ФИО5 Да5 ---------- Гр1 !

! ФИО6 Да5 ---------- Гр4 !

-----------------------------------------------------------------------------------------------

Согласно правилу 5 составим три следующих отношения.

ОТНОШЕНИЕ: СТУДЕНТ ОТНОШЕНИЕ: РЕБЕНОК

-------------------------------------- ------------------------------------------------

! *ФИО_С ! Дом. адрес ! ! *ФИО_Р ! Год рождения !

!-------------------------------------! !----------------------------------------------!

! ФИО1 Да1 ! ! ФИО7 Гр2 !

! ФИО2 Да2 ! ! ФИО8 Гр3 !

! ФИО3 Да3 ! ! ФИО9 Гр3 !

! ФИО4 Да4 ! ------------------------------------------------

! ФИО5 Да5 !

! ФИО6 Да5 !

--------------------------------------

ОТНОШЕНИЕ: ДЕТИ

--------------------------------------

! *ФИО_С ! *ФИО_Р !

!-------------------------------------!

! ФИО3 ФИО7 !

! ФИО3 ФИО8 !

! ФИО4 ФИО9 !

--------------------------------------

В этом примере видно, что после преобразования по правилу 5 исчезли пустые места, но объем записей ( в числе символов) явно увеличился.

Правило 6. Если степень взаимосвязи равна M: N, то независимо от классов принадлежностей сущностей для представления взаимосвязи необходимы три отношения (три таблицы). Схемы первого и второго отношений содержат атрибуты соответствующих сущностей, а в схему третьего отношения включаются ключи обеих сущностей.

Пример. Студент посещает или не посещает лекции; одну лекцию посещает не один студент.

ER - диаграмма имеет следующий вид.

----------------------------- ----------------------------

! СТУДЕНТ ! ! ЛЕКЦИЯ !

! ---------------------------! имеет !----------------------------!

! *ФИО !-------------------------! * Дисциплина !

! -------------------------- ! M N !----------------------------!

! Дом. адрес ! ! Объем часов !

---------------------------- -----------------------------

Если сопоставить диаграмме одну таблицу, то в ней будут пустые места и дублирование:

ОТНОШЕНИЕ: ПОСЕЩАЕМОСТЬ

----------------------------------------------------------------------------------------------

! *ФИО ! Дом. адрес ! *Дисциплина ! Объем часов !

!---------------------------------------------------------------------------------------------!

! ФИО1 Да1 ---------- ---------- !

! ФИО2 Да2 ---------- ---------- !

! ФИО3 Да3 Ди1 Об1 !

! ФИО3 Да3 Ди2 Об2 !

! ФИО4 Да4 Ди1 Об1 !

! ФИО5 Да5 Ди1 Об1 !

! ФИО5 Да5 Ди2 Об2 !

-----------------------------------------------------------------------------------------------

Согласно правилу 6 составим три следующих отношения.

ОТНОШЕНИЕ: СТУДЕНТ ОТНОШЕНИЕ: ЛЕКЦИИ

-------------------------------------- ---------------------------------------------------------

! *ФИО ! Дом. адрес ! ! *Дисциплина ! Объем часов !

!-------------------------------------! !--------------------------------------------------------!

! ФИО1 Да1 ! ! Ди1 Об1 !

! ФИО2 Да2 ! ! Ди2 Об2 !

! ФИО3 Да3 ! ---------------------------------------------------------

! ФИО4 Да4 !

! ФИО5 Да5 !

! ФИО6 Да5 !

--------------------------------------

ОТНОШЕНИЕ: ПОСЕЩАЕМОСТЬ

------------------------------------------------

! *ФИО ! *Дисциплина !

!----------------------------------------------!

! ФИО3 Ди1 !

! ФИО3 Ди2 !

! ФИО4 Ди1 !

! ФИО5 Ди1 !

! ФИО5 Ди2 !

------------------------------------------------

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

Правило 7. K-арной взаимосвязи необходимо сопоставить (k+1 ) отношения ((k+1) таблиц), по одному для каждой сущности, в схему которых включаются атрибуты соответствующих сущностей, и дополнительное отношение, схема которого содержит ключи всех сущностей.

Пример. Женатые студент и студентка имеют или не имеют детей.

ER - диаграмма имеет следующий вид.

----------------------------- ----------------------------

! СТУДЕНТ ! ! СТУДЕНТКА !

! ---------------------------! женаты !----------------------------!

! *ФИО_НТ !---------.------------------------! * ФИО_КА !

! --------------------------! 1 ! и имеют 1 !----------------------------!

! Адрес_НТ ! ! детей ! Адрес_КА !

---------------------------- ! M -------------------------------

----------------------------

! РЕБЕНОК !

!---------------------------!

! * ФИО_ОК !

!---------------------------!

! Год рожд. !

-----------------------------

Если сопоставить диаграмме одну таблицу, то в ней будут пустые места:

ОТНОШЕНИЕ: ДЕТИ

-----------------------------------------------------------------------------------------------------------------

! *ФИО_НТ ! Адрес_НТ ! *ФИО_КА ! Адрес_КА ! *ФИО_ОК ! Год рожд. !

!----------------------------------------------------------------------------------------------------------------!

! ФИО1 Ад1 ----------- ------ ---------- ------ !

! ФИО2 Ад2 ---------- ------ ---------- ------ !

! ФИО3 Ад3 ФИО4 Ад3 ФИО8 Гр1 !

! ФИО3 Ад3 ФИО4 Ад3 ФИО9 Гр2 !

! --------- ------ ФИО5 Ад4 --------- ------ !

! ФИО10 Ад6 ФИО6 Ад5 --------- ------ !

! --------- ------ ФИО7 Ад5 --------- ------ !

------------------------------------------------------------------------------------------------------------------

Согласно правилу 7 составим четыре следующих отношения.

ОТНОШЕНИЕ 1: СТУДЕНТ ОТНОШЕНИЕ 2: СТУДЕНТКА

-------------------------------------- --------------------------------------

! *ФИО_НТ ! Адрес_НТ ! ! *ФИО_КА ! Адрес_КА !

!-------------------------------------! !-------------------------------------!

! ФИО1 Ад1 ! ! ФИО4 Ад3 !

! ФИО2 Ад2 ! ! ФИО5 Ад4 !

! ФИО3 Ад3 ! ! ФИО6 Ад5 !

! ФИО10 Ад6 ! ! ФИО7 Ад5 !

-------------------------------------- ---------------------------------------

ОТНОШЕНИЕ: ДЕТИ ОТНОШЕНИЕ: ИМЕЮТ ДЕТЕЙ

-------------------------------------- ---------------------------------------------------------

! *ФИО_ОК ! Год рожд. ! ! *ФИО_НТ ! *ФИО_КА ! *ФИО_ОК !

!-------------------------------------! !--------------------------------------------------------!

! ФИО8 Гр1 ! ! ФИО3 ФИО4 ФИО8 !

! ФИО9 Гр2 ! ! ФИО3 ФИО4 ФИО9 !

--------------------------------------- ---------------------------------------------------------

РОЛЕВЫЕ ОТНОШЕНИЯ

В последнем примере некорректна общая таблица. Дело в том, что указанный ключ из трех атрибутов не определяет однозначно строку таблицы (пустое значение не может идентифицировать строку).

В рассмотренном примере лучше использовать, так называемые ролевые отношения. И СТУДЕНТА, и СТУДЕНТКУ, и РЕБЕНКА лучше объединить в сущность ЧЕЛОВЕК, а СТУДЕНТА, СТУДЕНТКУ и РЕБЕНКА характеризовать их ролью.

Изобразим другую ER-диаграмму применив дискриминатор.

-----------------------------

! ЧЕЛОВЕК !

! ---------------------------!

! *ФИО !

! Адрес !

! Роль !

----------------------------

!

!

----------------------------------------------------------------------------

! ! !

! ! !

----------------------------- ---------------------------- ----------------------------

! СТУДЕНТ ! ! СТУДЕНТКА ! ! РЕБЕНОК !

----------------------------- ----------------------------- !---------------------------!

! Год рожд. !

! ФИО_НТ !

! ФИО_КА !

----------------------------

Видимо, в данном случае диаграмме лучше сопоставить две таблицы:

одну для сущности ЧЕЛОВЕК, а вторую для сущности РЕБЕНОК, причем во вторую добавить ключ из первой.

Лекция 4.

Проектирование реляционной (табличной) базы данных

через функциональные зависимости

При относительно небольшом количестве атрибутов (не более 20) оптимальную базу данных можно спроектировать декомпозицией универсального отношения.

Алгоритм проектирования базы данных состоит из следующих этапов.

1. Построение универсального отношения.

2. Установление функциональных зависимостей между атрибутами универсального отношения.

3. Преобразование функциональных зависимостей с целью проверки, находится ли отношение в нормальной форме Бойса-Кодда.

4. В случае отрицательного результата проверки декомпозиция отношения на два с выделением того отношения, которое не соответствует требованиям нормальной формы Бойса-Кодда и переход на пункт 3 для дальнейших преобразований отделенного отношения.

5. Сопоставление таблиц полученным отношениям.

Универсальное отношение - отношение, включающее в себя все атрибуты.

К началу преобразований универсальное отношение должно быть в первой нормальной форме.

Первой нормальной формой (НФ) называют отношение, в каждом элементе которого используется только атомарное значение, то есть отсутствует перечисление (список) значений.

В процессе преобразований универсального отношения используются функциональные зависимости (ФЗ) между атрибутами универсального отношения.

Говорят, что атрибут или агрегат атрибутов B находится в функциональной зависимости от атрибута или агрегата атрибутов A, если каждому значению A соответствует одно и то же значение B.

В краткой форме функциональную зависимость B от A записывают в виде

A --> B или B<-- A .

Возможно графическое изображение зависимости:

A > B

Функциональная зависимость устанавливается путем осмысливания каждого атрибута и их взаимозависимостей. Тонкость в том, что нужно предполагать появление возможных значений одних атрибутов и влияние этих значений на значения других атрибутов. Если у Вас есть экземпляр отношения ( экземпляр таблицы), то ни в коем случае нельзя бездумно считать функциональной зависимостью случаи одинаковых значений атрибутов в нескольких строках.

Если в функциональной зависимости (A --> B) A либо одиночный атрибут, либо A является агрегатом, но B не зависит функционально ни от одного подмножества A, то A называется детерминантом B.

Преобразования универсального отношения имеют конечной целью нормальную форму Бойса-Кодда.

Отношение находится в нормальной форме Бойса-Кодда (НФБК), если и только если каждый детерминант отношения является возможным ключом.

Правило. Если после преобразований получается совокупность функциональных зависимостей между всеми атрибутами, соответствующая НФБК, то отношение следует оставить без изменения и и сопоставить ему одну общую таблицу или несколько таблиц из соображений экономичной реализации. Если же среди функциональных зависимостей есть зависимости, в которых детерминант не является возможным ключом, то есть из-за этих зависимостей нарушается условие НФБК, то эти зависимости следует выделить в отдельное отношение. Отделенное отношение нужно преобразовывать далее к НФБК.

Например, приведенное ниже отношение ДЕТИ СТУДЕНТОВ находится в первой нормальной форме. Оно не будет в указанной форме, если родители детей будут перечислены “через запятую”.

ОТНОШЕНИЕ: ДЕТИ СТУДЕНТОВ

----------------------------------------------------------------------------------------------------------

! ФИО ! Роль ! Адрес ! Телефон ! Отец! Мать! Год рожд. !

!--------------------------------------------------------------------------------------------------------!

! ФИО1 Ро1 Ад1 Те1 ------ ------ ----- !

! ФИО2 Ро1 Ад2 Те2 ------ ------ ------ !

! ФИО3 Ро1 Ад3 Те3 ------ ------ ------ !

! ФИО4 Ро2 Ад3 Те4 ------ ------ ------ !

! ФИО5 Ро2 Ад4 ------ ------ ------ ------ !

! ФИО6 Ро2 Ад5 ------ ------ ------ ------ !

! ФИО7 Ро2 Ад5 Те5 ------ ------ ------ !

! ФИО8 Ро3 Ад3 ------ ФИО3 ФИО4 Гр1 !

! ФИО9 Ро3 Ад3 ------ ФИО3 ФИО4 Гр2 !

----------------------------------------------------------------------------------------------------------

Выделим функциональные зависимости в приведенном примере следующими ориентировочными рассуждениями.

Роль человека однозначно зависит от его фамилии:

ФИО —> Роль .

Домашний адрес студента, студентки и ребенка однозначно определяется фамилией:

ФИО —> Адрес .

Номер телефона однозначно задан адресом:

Адрес —> Телефон .

Фамилия ребенка однозначно задает его родителей и год рождения:

(ФИО, роль)—>(Отец, Мать, Год рожд.) .

Возможным ключом в исходном отношении может быть только атрибут ФИО. Поэтому среди приведенных функциональных зависимостей только в зависимости “Адрес —> Телефон” детерминант не является возможным ключом; эта зависимость подлежит отделению во второе отношение, и оно далее преобразуется в отдельную таблицу.

Правила преобразования функциональных зависимостей (ФЗ).

1. Использование свойства транзитивности.

В наборе ФЗ A --> B , B --> C , A --> C

зависимость A --> C является избыточной.

2. Выделение детерминанта.

В наборе ФЗ A --> B , (A, Z) --> B

вторая зависимость является избыточной.

3. Избыточное пополнение.

Функциональная зависимость (A, Z) --> (B, Z) может быть

заменена на зависимость (A, Z) --> B .

4. Объединение.

Набор A --> B, A --> C можно заменить на A --> (B, C) .

5. Распределение.

Зависимость A --> (B, C) можно заменить на набор зависимостей

A --> B, A --> C .

6. Псевдотранзитивность.

В наборе ФЗ A --> B , (B, C) --> D , (A, C) --> D последняя

зависимость (A, C) --> D является избыточной.

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

Пусть F - исходная совокупность функциональных зависимостей данного отношения. Замыканием F называется множество функциональных зависимостей, которые логически следуют из F.

Замыкание F обозначают F+ . Если F = F+ , то F - полное множество зависимостей.

Вычисление F+ , то есть замыкания F , может оказаться трудоемкой задачей. Например, пусть F={ A-->B1, A-->B2, ... , A-->Bn }. Пользуясь правилом объединения получим замыкание F+ в виде набора зависимостей с характерной закономерностью {A-->B1, A-->(B1,B2), A-->(B1,B2,B3), ... }. Если атрибутам Bi сопоставить разряд с единичным

значением, то возможные функциональные зависимости можно отобразить как возможные “единицы” в двоичном числе. Следовательно, множество F+ состоит из 2 в степени n функциональных зависимосте, и действительно, получение замыкания F+ может представить проблему при большом n.

На основе рассмотренных теоретических понятий можно дать формальное определение ключу. Атрибут или агрегат атрибутов X для отношения R с атрибутами A1, A2, ... , An и функциональными зависимостями F будет ключом, если выполняются следующие условия:

1) Зависимость X-->(A1, A2, ... ,An) принадлежит замыканию F+.

2) Ни для какого подмножества Y агрегата X зависимость Y-->(A1, A2, ... ,An) не принадлежит замыканию F+.

Пример. Пусть R=(A, B, C) и F={ A-->B, B-->C }. Атрибут A суть ключ, так как в замыкание F+ входит A-->( A, B, C) и атрибут A неделим.

Проверка декомпозиции

Результат декомпозиции проверяют на свойство соединение без потерь.

Пусть универсальное отношение, имеющее схему R=(A1, A2, ... ,An) , разложено на k отношений со схемами (R1, R2, ... ,Rk), использующих множество F функциональных зависимостей. Алгоритм проверки на свойство соединение без потерь заключается в следующем.

Строится таблица с n столбцами и k строками, причем j-ый столбец сопоставляется j-ому атрибуту Aj , а i-ая строка i-ой схеме отношения Ri . На пересечении i-ой строки и j-ого столбца записывается символ aj , если атрибут Aj входит в схему отношения Ri ; в пртивном случае записывается символ bij . После составления таблицы перебираем поочередно функциональные зависимости X-->Y из множества F . В таблице выделяем столбцы с атрибутами из агрегата X и проходим по строкам. В случае обнаружения одинаковых в пределах агрегата X строк преобразуем столбцы из агрегата Y по следующему правилу: если в столбцах из агрегата Y один из символов aj, то и другие делаем равными aj; если же ни один из символов не равен aj , то другие символы делаем одинаковыми, а именно равными одному из bij .

Если после преобразований образуется хотя бы одна строка только из aj , то свойство соединения без потерь присутствует.

Пример. Пусть R=(A, B, C, D, E) ,

R1=(A, D) , R2=(A, B) , R3=(B, E) , R4=(C, D, E) , R5=(A, E)

и множество F: A-->C , B-->C , C-->D , (D, E)-->C , (C, E)-->A .

Создаем исходную таблицу по схемам R:

A B C D E

----------------------------------------

1 a1 b12 b13 a4 b15

2 a1 a2 b23 b24 b25

3 b31 a2 b33 b34 a5

4 b41 b42 a3 a4 a5

5 a1 b52 b53 b54 a5

-----------------------------------------

Обрабатываем зависимость A-->C:

----------------------------------------

1 a1 b12 b13 a4 b15

2 a1 a2 b13 b24 b25

3 b31 a2 b33 b34 a5

4 b41 b42 a3 a4 a5

5 a1 b52 b13 b54 a5

-----------------------------------------

Обрабатываем зависимость B-->C:

----------------------------------------

1 a1 b12 b13 a4 b15

2 a1 a2 b13 b24 b25

3 b31 a2 b13 b34 a5

4 b41 b42 a3 a4 a5

5 a1 b52 b13 b54 a5

-----------------------------------------

Обрабатываем зависимость C-->D:

----------------------------------------

1 a1 b12 b13 a4 b15

2 a1 a2 b13 a4 b25

3 b31 a2 b13 a4 a5

4 b41 b42 a3 a4 a5

5 a1 b52 b13 a4 a5

-----------------------------------------

Обрабатываем зависимость (D, E)-->C:

----------------------------------------

1 a1 b12 b13 a4 b15

2 a1 a2 b13 a4 b25

3 b31 a2 a3 a4 a5

4 b41 b42 a3 a4 a5

5 a1 b52 a3 a4 a5

-----------------------------------------

Обрабатываем зависимость (C, E)-->A:

----------------------------------------

1 a1 b12 b13 a4 b15

2 a1 a2 b13 a4 b25

3 a1 a2 a3 a4 a5

4 a1 b42 a3 a4 a5

5 a1 b52 a3 a4 a5

-----------------------------------------

Строка 3 состоит только из символов aj, что говорит о том, что свойство соединения без потерь имеет место и, следовательно, декомпозиция отношения была выполнена без ошибок.

Лекция 5. Физическая организация реляционной базы данных

На физическом уровне данные хранятся в виде записей, сопоставленных кортежам отношений. Запись включает в себя поля, сопоставленные атрибутам отношения. Запись может иметь дополнительное поле заголовка, содержащее флаги и указатели. Форматом записи называют перечень имен полей с указанием длины

каждого поля.

Нередко каждому отношению сопоставляют отдельный файл.

На физическом уровне выполняются следующие типичные операции:

- добавить запись;

- удалить запись;

- модифицировать запись;

- вывести запись.

Все операции включают в себя поиск записи с заданным ключом.

При добавлении записи также следует предусматривать предварительный поиск записи с тем же ключом. В данном случае может быть обнаружена ошибка либо проектировщика СУБД (если “ключ” не оказался ключом), либо пользователя (если он повторяет занесение записи).

В случае удаления записи целесообразно только пометить ее как удаленную установкой соответствующего флага “удаления”. Этот флаг необходимо проверять при модификации или выводе записи с целью обнаружения ошибочной ссылки на удаленную запись.

В настоящее время базы данных размещаются на магнитном диске. Эта особенность должна учитываться при проектировании физической организации базы данных. Дело в том, что при обращении к диску через файловую управляющую систему данные передаются блоками, часто называемыми секторами. Типичный размер сектора 512 байтов. Файл размещается в кластерах, представляющих собой несколько подряд расположенных секторов. Кластеры применяются для слежения за использованием дискового пространства. Больший размер кластера по сравнению с сектором сокращает объем информации, необходимой для управления размещением; правда, при размещении небольших файлов имеет место существенное недоиспользование диска.

Итак, обмен с диском выполняется секторами. Если запись переходит границу сектора, то необходимы два обращения к диску. В случае записей, значительно меньших размера сектора, снижение быстродействия СУБД будет незначительным. Но в случае записей, имеющих длину больше половины сектора, быстродействие СУБД понизится в два раза.

Следовательно, размер записей целесообразно подгонять под размер сектора, то есть либо сектор должен содержать целое число записей, либо запись должна размещаться в целом числе секторов.

Подгонку размеров записи обычно можно сделать путем изменения

допустимых размеров символьных строк.

Пример.

Пусть запись о студенте имеет следующий первоначальный формат:

Число байтов

1 4 30 40

-----------------------------------------------------------------------------

| | | ФИО | Адрес |

-----------------------------------------------------------------------------

^ указатель на следующую запись

^ пол студента и флаг истинности записи

Подгоняя под размер сектора 512 байтов увеличим размер записи с 75 до 128 байтов:

Число байтов

1 4 1 42 80

-------------------------------------------------------------------------------------

| | | | ФИО | Адрес |

-------------------------------------------------------------------------------------

^ пол студента

^ указатель на следующую запись

^ флаг истинности записи

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

5.1. Организация записей в файлах

Записи в файлах могут иметь упорядоченную или неупорядоченную

организацию.

При неупорядоченной организации записей, называемой также

последовательной организацией, записи располагаются подряд. Поиск записи выполняется последовательным перебором всех записей. Удаление записи сопровождается сдвигом всех последующих записей. Очевидное невысокое быстродействие - причина того, что неупорядоченная организация записей практически не применяется.

Для упорядочения записей применяют:

- хеширование;

- индексирование.

5.2. Хешированнные файлы

Если применяется хеширование, то поля записи, соответствующие ключу отношения, объединяют в единое поле, и это поле интерпретируют как число N. Для полученного числа вычисляют хеш-функцию H(N).

Возможные хеш-функции хорошо исследованы. Их качество оценивалось по близости распределения хеш-функции к равномерному распределению в диапазоне (0, M-1), где M - число значений хеш-функции.

Приведем несколько достаточно быстрых алгоритмов для вычисления хеш-функции H(N) с хорошим равномерным распределением значений.

1. Метод квадратов.

Ключ N возводится в квадрат. Из полученного результата выделяются центральные цифры, соответствующие по разрядности числу M желаемых значений хеш-функции. Выделенное число приводится к диапазону (0, M-1).

Например. Пусть число значений M = 70, а ключ N = 255. Квадрат ключа равен 65025, центральные цифры - 02 из диапазона (0, 99). Приводим число 2 к диапазону (0, 69): 2 * ( 70 / 100 ) => 1,4 , и округляем результат до 1. Число 1 суть значение хэш-функции.

2. Деление.

Ключ делится на M или на близкое к M простое число. Остаток от деления является значением хеш-функции.

Например. Пусть число значений M = 70, а ключ N = 255. Разделим 255 на 70 и остаток, равный 45, используем как значение хэш-функции. Можно разделить 255 на простое число 67; значение хэш-функции будет равно 54.

3. Сдвиг разрядов.

Разряды ключа разбиваются на две части: старшие и младшие разряды. Обе части сдвигаются навстречу друг другу настолько, чтобы число перекрывающихся разрядов соответствовало разрядности M. Перекрывающиеся разряды складываются и результат приводится к диапазону (0, M-1).

Например. Пусть число значений M = 70, а ключ N = 17543291. Делим ключ на две части 1754 и 3291, сдвигаем навстречу друг другу на 2 разряда, что соответствует разрядности M и складываем перекрывающиеся разряды. Результат получается равным 86. Приводим число 86 к диапазону (0, 69): ( 86 * 70 ) / 100 и получаем значение хэш-функции равное 60.

Соседние файлы в предмете Базы данных