Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
метода к типовому v.3_.doc
Скачиваний:
5
Добавлен:
11.11.2019
Размер:
2.18 Mб
Скачать

3.2.4Нормализация базы данных с использованием модели er-диаграмм.

Построение ER-диаграммы

ER-диаграмма строится по описанию предметной области. Рекомендуется определить сначала сущности, напомним, у нас они следующие:

  1. Студенты;

  2. Виды занятия;

  3. Предметы;

  4. Преподаватели;

  5. Группы;

  6. Должности.

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

Шаг 1. Известно: "Студент обязательно обучается только в одной группе. О группе известен код специальности, по которой группа обучается". Это значит, что нужно связать сущности Студенты и Группы связью Учиться. Получили схему (рис. 3.13):

Рис. 3.13

Теперь определим кардинальность и модальность связи с обеих концов. Строго говоря, как связь читается, так и проставляется модальность и кардинальность. Опираясь на предметную область можно прочитать связь слева направо: "Студент должен Учиться в одной Группе", значит, модальность связи со стороны сущности Студенты "обязательно", а кардинальность со стороны сущности Группы "Один" (то есть со стороны, противоположной сущности Студенты). Попробуем прочитать связь с оборотной стороны. У нас ничего не получиться: не хватает сведений. После консультации с заказчиком (преподавателем) установили, что в группе обучаются много студентов, но может и не обучаться нисколько студентов, например, если группу расформировали, или группа только что создана, но набора в нее еще не было. Итак, связь справа налево читается так: "В Группе могут Учиться несколько Студентов", значит, модальность связи со стороны сущности Группы "необязательно", а кардинальность со стороны сущности Студенты "Много". Итак, получим ER-диаграмму, представленную на рис. 3.14.

Рис. 3.14

Шаг 2. Из предметной области известно о дисциплине: наименование, семестры, в которых преподается, количество различных видов занятий для каждого семестра. У нас имеются сущности Дисциплины и ВидыЗанятий, свяжем их. Определим кардинальность и модальность связи. Рассуждаем: по дисциплине обязательно есть хотя бы один вид занятий (хотя бы зачет или экзамен), но видов занятий может быть и много, например, домашние задания и зачет. Значит, модальность связи со стороны сущности Дисциплины "обязательно", кардинальность связи со стороны сущности ВидыЗанятий "Много". С другой стороны, вид занятий, например, домашнее задание, обязательно проводится хотя бы по одному предмету, и естественно проводится по многим предметам. Значит, модальность связи со стороны сущности ВидыЗанятий "обязательно", кардинальность со стороны сущности Дисциплины "Много".

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

Итак, на этом шаге получили диаграмму, показанную на рис. 3.15.

Рис. 3.15

Шаг 3. Аналогичным образом будем рассуждать относительно преподавателей. Из предметной области о преподавателях известно: фамилия преподавателя, должность и ученая степень. Понятно, что нам нужно связать сущности Преподаватели и Должности. Преподаватель обязательно занимает должность. После консультации с заказчиком было установлено, что преподаватель может занимать только одну должность. Касательно должности известно, что должность необязательно кто-нибудь занимает, например, должность вакантна, и одну должность могут занимать несколько преподавателей, например, в университете много доцентов. Получим ER-диаграмму, представленную на рис. 3.16.

Рис. 3.16

Шаг 4. Известно: "Для каждого студента ведется электронный журнал, в котором занесены данные о сдаче студентом всех лабораторных, домашних заданий, курсовых работ и семинарских занятий для каждого семестра". Это значит, что нам надо связать сущности Студент, Дисциплины и Виды занятия связью ПолучатьОценки. У нас получилась трехарная связь (рис. 3.17).

Рис. 3.17

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

Сначала определим модальность на каждом из трех концов связи. Студент необязательно получает оценки, например, он только что зачислен и еще ничего не сдавал. Поэтому модальность связи со стороны сущности Студенты "необязательно". По дисциплине необязательно могут быть получены оценки, например, дисциплину только что ввели. Поэтому модальность связи со стороны сущности Дисциплины "необязательно". По каждому виду занятий обязательно должны быть получены оценки. Значит, модальность связи со стороны сущности ВидыЗанятий "обязательно". См. рис. 3.18.

Теперь определим кардинальность. Студенты получают оценки по многим дисциплинам. Кардинальность со стороны сущности Дисциплины "Много". Студенты получают оценки по многим видам занятий. Кардинальность со стороны сущности ВидыЗанятий "Много". По одной дисциплине оценки получат много студентов. Кардинальность со стороны сущности Студенты "Много".

Итак, получили ER-диаграмму, представленную на рис. 3.18.

Рис. 3.18

Обратите внимание, что здесь приведен только фрагмент ER-диаграммы для связи, рассматриваемой на шаге 4. На самом деле сущности Дисциплины и Студенты в ER-диаграмме у нас уже имеются, мы их включили туда на шагах 2 и 1, поэтому они не должны дублироваться. Такая ошибка очень распространена. Если какая-либо сущность, входящая в связь, уже есть на ER-диаграмме, ее дублировать не нужно, нужно использовать в рассматриваемой связи старую сущность. Всю ER-диаграмму можно посмотреть на рис. 3.20.

Шаг 5. Последнее, что мы не разобрали в предметной области: "Один и тот же предмет может вестись у разных групп разными преподавателями (в том числе и один вид работ по предмету у разных групп может вестись разными преподавателями). Один предмет в разных семестрах у одной группы могут вести разные преподаватели". Понятно, что в связь КтоУКогоЧтоВедет нужно включить сущности Дисциплины, ВидыЗанятий, Группы, Преподаватели.

Определим модальность. Дисциплина необязательно кем-то у кого-то ведется, например, ее только что ввели и еще не распределили. Модальность со стороны сущности Дисциплины "необязательно". Преподаватель обязательно что-то ведет. Модальность со стороны сущности Преподаватели "обязательно". У группы обязательно ведутся дисциплины. Модальность со стороны сущности Группы "обязательно". По каждому виду занятий есть преподаватель. Модальность со стороны сущности ВидыЗанятий "обязательно". Определим кардинальность. Преподаются много видов занятий по многим дисциплинам многими преподавателями у многих групп. Кардинальность везде "Много". Получили ER-диаграмму, показанную на рис. 3.19.

Рис. 3.19

Соединим фрагменты ER-диаграммы, полученной на шагах 1-5. Стоит повторить еще раз, что если сущность участвует в разных связях, ее дублировать не надо. Получили ER-диаграмму, представленную на рис. 3.20.

Рис. 3.20

Шаг 6. На нашей диаграмме имеется трехарная и четырехарная связи. Разобьем их. Покажем на примере трехсторонней связи. Суть такова. Мы заменим одну трехарную связь промежуточной сущностью Оценки, которую свяжем бинарной идентифицирующей связью с каждой из сущностей, входящих в трехарную связь, Дисциплины, ВидыЗанятий, Студенты (рис. 3.21). Обратите внимание, что первичным ключом сущности Оценки является КодДисц, КодВидЗан, КодСтуд, Семестр, НомерВидЗан. Атрибуты КодДисц, КодВидЗан, КодСтуд попали в состав первичного ключа, так как все три связи идентифицирующие. Определимся с модальностью. Модальности со сторон сущностей Дисциплины, ВидыЗанятий, Студенты остаются те же; определим модальность связей со стороны сущности Оценки. Сделать это просто, если оперировать конкретной оценкой в зачетной книжке или журнале преподавателя. Тогда понятно, что конкретная оценка должна быть получена конкретным студентом обязательно за определенной занятие по определенной дисциплине. Значит, модальность всех трех связей со стороны сущности Оценка "обязательно".

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

Таким образом получили следующую ER-диаграмму трехарной связи ПолучатьОценки (рис. 3.21).

Рис. 3.21

Аналогичным образом разобьем четырехарную связь Преподавать. Получим диаграмму, представленную на рис. 3.22.

Рис. 3.22

Подробное описание нормализации каждой связи.

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

Шаг 1. Связь Учиться. Кардинальность связи "один-ко-многим", модальность при М-связной сущности "обязательно". По правилу 4 нужно 2 отношения, по одному на каждую сущность, причем первичный ключ сущности Группы войдет как внешний ключ в отношение Студенты. Получим отношения:

Группы(НомГруппы, КодСпец)

Студенты(КодСтуд, ФИОСтуд, НомГруппы)

Шаг 2. Связь Проводиться. Кардинальность связи "многие-ко-многим", модальность ни на что не влияет. По правилу 6 нужно 2 отношения, по одному на каждую сущность и одно отношение связи ВидыЗанятийДисциплины, причем первичные ключи сущностей войдут в состав первичного ключа отношения ВидыЗанятийДисциплины будут внешними ключами в этом отношении. Получим отношения:

Дисциплины(КодДисц, НазвДисц)

ВидыЗанятий(КодВидЗан, НазвВидЗан)

ВидыЗанятийДисциплины(КодДисц, КодВидЗан, Семестр, Колво)

Шаг 3. Связь Занимать. Кардинальность связи "один-ко-многим", модальность при М-связной сущности "обязательно". По правилу 4 нужно 2 отношения, по одному на каждую сущность, причем первичный ключ сущности Должности войдет как внешний ключ в отношение Преподаватели. Получим следующие отношения:

Должности(КодДолж, НазвДолж)

Преподаватели(КодПреп, ФИОПреп, КодДолж, УчСт)

Шаг 4. Семейство связей Получать. Кардинальность всех связей "один-ко-многим", модальность при М-связной сущности "обязательно". По правилу 4 нужно по 2 отношения на связь: по одному на каждую сущность, причем первичный ключ односвязной сущности войдет как внешний ключ в отношение Оценки. Поскольку отношения Дисциплины, ВидыЗанятий, Студенты уже существуют и их состав на этом шаге не изменится, к набору отношений добавим всего одно:

Оценки(КодДисц, КодВидЗан, КодСтуд, НомерВидЗан, Семестр, Оценка)

Шаг 5. Семейство связей Преподавать.

Аналогично шагу 4 добавиться только одно отношение:

КтоУКогоЧтоВедет(КодПреп, КодДисц, КодВидЗан, НомГруппы, Семестр,)

Итак, получили следующие отношения:

Группы(НомГруппы, КодСпец)

Студенты(КодСтуд, ФИОСтуд, НомГруппы)

Дисциплины(КодДисц, НазвДисц)

ВидыЗанятий(КодВидЗан, НазвВидЗан)

ВидыЗанятийДисциплины(КодДисц, КодВидЗан, Семестр, Колво)

Должности(КодДолж, НазвДолж)

Преподаватели(КодПреп, ФИОПреп, КодДолж, УчСт)

Оценки(КодДисц, КодВидЗан, КодСтуд, НомерВидЗан, Семестр, Оценка)

КтоУКогоЧтоВедет(КодПреп, КодДисц, КодВидЗан, НомГруппы, Семестр)

Сводная таблица отношений и атрибутов нормализованной базы данных с указанием ключей отношений

Таблица 3.7

Сводная таблица атрибутов и отношений базы данных Учет оценок студентов после нормализации методом ER-диаграмм

Отношение

Имя атрибута

Описание

Группы

НомГруппы

Номер группы

КодСпец

Код специальности по классификатору

Студенты

КодСтуд

Номер зачетной книжки студента

ФИОСтуд

Фамилия, Имя, Отчество студента

НомГруппы

Номер группы, в которой обучается студент

Дисциплины

КодДисц

Уникальный код дисциплины

НазвДисц

Наименование дисциплины

ВидыЗанятий

КодВидЗан

Уникальный код вида занятия

НазвВидЗан

Наименование вида занятия

ВидыЗанятийДисциплины

КодДисц

Уникальный код дисциплины

КодВидЗан

Уникальный код вида занятия

Семестр

Номер семестра

Колво

Количество вида занятия определенной дисциплины за определенный семестр

Должности

КодДолж

Должность преподавателя

НазвДолж

Наименование должности преподавателя

Преподаватели

КодПреп

Уникальный код преподавателя

ФИОПреп

Фамилия, Имя, Отчество преподавателя

КодДолж

Должность преподавателя

УчСт

Ученая степень преподавателя

Оценки

КодСтуд

Номер зачетной книжки студента

КодДисц

Уникальный код дисциплины

КодВидЗан

Уникальный код вида занятия

НомерВидЗан

Номер определенного вида занятия, по которому студент получил оценку

Семестр

Номер семестра

Оценка

Значение оценки

КтоУКогоЧтоВедет

КодДисц

Уникальный код дисциплины

КодПреп

Уникальный код преподавателя

КодВидЗан

Уникальный код вида занятия

НомГруппы

Название группы

Семестр

Номер семестра

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

Сравнив таблицы 3.3 и 3.7 получили, что набор и состав отношений, полученный методом декомпозиции и методом ER-диаграмм одинаков. К тому же проверка методом табло показала, что функциональные зависимости при нормализации потеряны не были.

Денормализация. Рассмотрим отношение Оценки. В ней хранятся все оценки студентов. Для быстроты обработки можно разделить ее на две: ОценкиТекущие, куда будут заноситься оценки за текущий семестр и ОценкиАрхив, где будут храниться оценки за прошедшие семестры. Как только семестр заканчивается, кортежи из отношения ОценкиТекущие переносятся в отношение ОценкиАрхив.

Больше декомпозиция не нужна. Но допустим, мы храним все анкетные данные студента. Тогда целесообразно разделить отношение Студенты на два: ПаспортныеСведенияСтудента, где будут храниться атрибуты типа МестоЖительства, НомерПаспорта, СемейноеПоложение, ВоеннаяОбязанность и пр., и отношение СтудентВУниверситете, где будут храниться атрибуты, относящиеся к учебе студента.

Таким образом, после денормализации получили следующие отношения:

Группы(НомГруппы, КодСпец)

Студенты(КодСтуд, ФИОСтуд, НомГруппы)

Дисциплины(КодДисц, НазвДисц)

ВидыЗанятий(КодВидЗан, НазвВидЗан)

ВидыЗанятийДисциплины(КодДисц, КодВидЗан, Семестр, Колво)

Должности(КодДолж, НазвДолж)

Преподаватели(КодПреп, ФИОПреп, КодДолж, УчСт)

ОценкиТекущие(КодДисц, КодВидЗан, КодСтуд, НомерВидЗан, Семестр, Оценка)

ОценкиАрхив(КодДисц, КодВидЗан, КодСтуд, НомерВидЗан, Семестр, Оценка)

КтоУКогоЧтоВедет(КодПреп, КодДисц, КодВидЗан, НомГруппы, Семестр)