Смекни!
smekni.com

Построение модели DFD и реализация в СУБД Visual FoxPro (стр. 4 из 7)

Контекстная диаграмма приведена на рисунке 2.16.1, а её детализация на рисунке 2.16.2.


Рис. 2.16.1.Контекстная диаграмма


Рис. 2.16.2.Детализированная диаграмма потоков данных


Словарь данных

@ИМЯ = ДАННЫЕ О ПРЕПОДАВАТЕЛЯХ

@ТИП = дискретный поток

@БНФ = ФИО + Год рождения + Учёная степень + Адрес

@ИМЯ = ДАННЫЕ О ГРУППЕ

@ТИП = дискретный поток

@БНФ = Название группы + Имя куратора + ДАННЫЕ О ПРЕПОДАВАТЕЛЯХ + Должность + Оклад

@ИМЯ = ПОИСК КУРАТОРА

@ТИП = дискретный поток

@БНФ = Название группы

@ИМЯ = ИНФОРМАЦИЯ О КУРАТОРЕ

@ТИП = дискретный поток

@БНФ = ДАННЫЕ О ГРУППЕ

@ИМЯ = ИНФОРМАЦИЯ О ПРЕПОДАВАТЕЛЯХ

@ТИП = внутренний поток

@БНФ = ДАННЫЕ О ПРЕПОДАВАТЕЛЯХ

@ИМЯ = ИНФОРМАЦИЯ О ГРУППЕ

@ТИП = внутренний поток

@БНФ = Название группы + Имя куратора + Должность + Оклад + ID_Преподавателя

@ИМЯ = НАЙТИ ПРЕПОДАВАТЕЛЯ

@ТИП = внутренний поток

@БНФ = ДАННЫЕ О ПРЕПОДАВАТЕЛЯХ

@ИМЯ = РЕЗУЛЬТАТ ПОИСКА ПРЕПОДАВАТЕЛЯ

@ТИП = внутренний поток

@БНФ = ID_Преподавателя

@ИМЯ = ПОИСК ИНФОРМАЦИИ О КУРАТОРЕ

@ТИП = внутренний поток

@БНФ = ПОИСК КУРАТОРА

@ИМЯ = ДАННЫЕ О ГРУППАХ И ПРЕПОДАВАТЕЛЯХ

@ТИП = внутренний поток

@БНФ = ДАННЫЕ О ГРУППЕ


Спецификация процессов

Спецификация процесса A0.1

@ВХОД = ДАННЫЕ О ГРУППЕ

@ВХОД = РЕЗУЛЬТАТ ПОИСКА ПРЕПОДАВАТЕЛЯ

@ВЫХОД = НАЙТИ ПРЕПОДАВАТЕЛЯ

@ВЫХОД = ДАННЫЕ О ГРУППЕ

@СПЕЦПРОЦ A0.1 ПРОВЕРИТЬ НАЛИЧИЕ ПРЕПОДАВАТЕЛЯ

НАЙТИ ПРЕПОДАВАТЕЛЯ = ДАННЫЕ О ПРЕПОДАВАТЕЛЯХ из ДАННЫЕ О ГРУППЕ

ЕСЛИ РЕЗУЛЬТАТ ПОИСКА ПРЕПОДАВАТЕЛЯ не равен NULL ТО

ДАННЫЕ О ГРУППЕ = ДАННЫЕ О ГРУППЕ

КОНЕЦ ЕСЛИ

Спецификация процесса A0.2

@ВХОД = ДАННЫЕ О ГРУППЕ

@ВЫХОД = ИНФОРМАЦИЯ О ГРУППЕ

@СПЕЦПРОЦ A0.2 ФОРМИРОВАТЬ ИНФОРМАЦИЮ О ГРУППЕ

ЕСЛИ добавить ИНФОРМАЦИЮ О ГРУППЕ ТО

ИНФОРМАЦИЯ О ГРУППЕ = ДАННЫЕ О ГРУППЕ

КОНЕЦ ЕСЛИ

ЕСЛИ изменить ИНФОРМАЦИЮ О ГРУППЕ ТО

ВЫПОЛНИТЬ редактировать ИНФОРМАЦИЮ О ГРУППЕ

КОНЕЦ ЕСЛИ

ЕСЛИ удалить ИНФОРМАЦИЮ О ГРУППЕ ТО

ВЫПОЛНИТЬ удалить ИНФОРМАЦИЮ О ГРУППЕ

КОНЕЦ ЕСЛИ

Спецификация процесса A0.3

@ВХОД = ДАННЫЕ О ПРЕПОДАВАТЕЛЯХ

@ВЫХОД = ИНФОРМАЦИЯ О ПРЕПОДАВАТЕЛЯХ

@СПЕЦПРОЦ A0.3 ФОРМИРОВАТЬ ИНФОРМАЦИЮ О ПРЕПОДАВАТЕЛЯХ

ЕСЛИ добавить ИНФОРМАЦИЮ О ПРЕПОДАВАТЕЛЯХ ТО

ИНФОРМАЦИЯ О ПРЕПОДАВАТЕЛЯХ = ДАННЫЕ О ПРЕПОДАВАТЕЛЯХ

КОНЕЦ ЕСЛИ

ЕСЛИ изменить ИНФОРМАЦИЮ О ПРЕПОДАВАТЕЛЯХ ТО

ВЫПОЛНИТЬ редактировать ИНФОРМАЦИЮ О ПРЕПОДАВАТЕЛЯХ

КОНЕЦ ЕСЛИ

ЕСЛИ удалить ИНФОРМАЦИЮ О ПРЕПОДАВАТЕЛЯХ ТО

ВЫПОЛНИТЬ удалить ИНФОРМАЦИЮ О ПРЕПОДАВАТЕЛЯХ

КОНЕЦ ЕСЛИ

Спецификация процесса A0.4

@ВХОД = ПОИСК КУРАТОРА

@ВХОД = ДАННЫЕ О ГРУППАХ И ПРЕПОДАВАТЕЛЯХ

@ВЫХОД = ПОИСК ИНФОРМАЦИИ О КУРАТОРЕ

@ВЫХОД = ИНФОРМАЦИЯ О КУРАТОРЕ

@СПЕЦПРОЦ A0.4 ПОИСК КУРАТОРА

ПОИСК ИНФОРМАЦИИ О КУРАТОРЕ = ПОИСК КУРАТОРА

ВЫПОЛНИТЬ Поиск в БД ИНФОРМАЦИИ О КУРАТОРЕ

ИНФОРМАЦИЯ О КУРАТОРЕ = найденные в БД ДАННЫЕ О ГРУППАХ И ПРЕПОДАВАТЕЛЯХ


Проектирование структуры базы данных

Выделим две сущности: Группы и Преподаватели.

Связь между этими сущностями имеет тип «многие к одному» так как каждый преподаватель может быть куратором в нескольких группах и в каждой группе может быть только один куратор.

Сущность «Преподаватели» имеет атрибуты: ФИО, Год рождения, учёная степень, Адрес. Ни один из этих атрибутов не уникален для каждого конкретного преподавателя. К тому же для разных преподавателей могут совпадать сразу совокупность значений таких атрибутов, как ФИО, год рождения и Учёная степень. Поэтому выделим отдельный атрибут ID_Преподавателя, однозначно идентифицирующий каждый экземпляр сущности «Преподаватели». От атрибутов, не входящих в состав уникального идентификатора, функционально не зависят другие атрибуты.

Сущность «Группа» имеет атрибуты: Название группы, Имя куратора, Должность, Оклад, ID_Преподавателя (являющегося куратором данной группы). Так как название группы уникально, то это атрибут будет являться уникальным идентификатором для сущности «Группы». Все остальные атрибуты функционально зависят от уникального идентификатора.

· «Имя куратора». В каждой студенческой группе только один куратор.

· «Должность». У каждого куратора, а значит и группы, может быть только одна должность.

· «Оклад». У каждой должности только один оклад.

· «ID_Преподавателя». В каждой группе только один куратор, а значит и один преподаватель является куратором в данной группе.

Так как несколько должностей могут иметь один и тот же оклад, но каждая должность может иметь только один оклад, то атрибут «Оклад» функционально зависит от атрибута «Должность», не входящего в состав уникального идентификатора. Атрибут «Должность» также не может рассматриваться в качестве альтернативного ключа, ибо нет функциональной зависимости ключевого атрибута «Название группы» от атрибута «Должность», то есть одна и та же должность куратора может быть в разных группах, а альтернативный ключ должен идентифицировать каждую запись, а не набор записей. Отсюда следует, что данная структура не находится в третьей нормальной форме. Для приведения её в третью нормальную форму необходимо выделить отдельную сущность «Должности» и атрибуты «Должность» и «Оклад» выделить для этой сущности.

Определим степени связей между сущностями.

Связь между сущностью «Группы» и «Преподаватели» имеет тип «Многие к одному», так как каждый преподаватель может быть куратором в нескольких группах, а у каждой группы может быть только один куратор.

Связь между сущностью «Группы» и «Должности» имеет тип «Многие к одному», так как одна и та же должность куратора может быть в разных группах и у каждой группы может быть только один куратор, значит и одна должность куратора.

Диаграмма связей между сущностями представлена на рисунке 2.16.3.

Рис. 2.16.3. Диаграмма связей между сущностями

Структура спроектированной базы данных приведена на рисунке 2.16.4.

Рис. 2.16.4. Структура БД

Определим таблицы базы данных и укажем типы данных и ограничения для каждого поля.

Таблица Группы (Groups)

Наименование поля Тип данных Ограничения
Название группы (Name_group) Строка (20) Первичный ключ
Имя куратора (Name_Kurat) Строка (30) NOT NULL
Должность (Job_title) Строка (20) NOT NULLВнешний ключ
ID_Преподавателя (ID_teacher) Целое число NOT NULLВнешний ключ

Таблица Преподаватели (Teachers)

Наименование поля Тип данных Ограничения
ID_Преподавателя (ID_teacher) Целое число Первичный ключ
ФИО (FIO) Строка (30) NOT NULL
Год рождения (Year_birth) Целое число NOT NULL
Учёная степень (Degree) Строка (20)
Адрес (Address) Строка (20)

Таблица Должности (Job_titles)

Наименование поля Тип данных Ограничения
Должность (Jobtitle) Строка (20) Первичный ключ
Оклад (Salary) Целое число NOT NULL

Реализация спроектированной базы данных при помощи СУБД VisualFoxPro

Создадим проект приложения баз данных. Для чего выберем в главном меню File – New, затем выберем Project и укажем NewFile – введём имя проекта student_groups и сохраним файл проекта (student_groups.pjx). Далее откроется окно ProjectManager (диспетчер проекта) в котором перейдём на вкладку Data (Данные) и выберем пункт Databases и нажмём кнопку New… (Новая). Появится окно, в котором выберем NewDatabase (Новая база данных) и сохраним базу данных как student_groups.dbc. В появившемся окне DatabaseDesigner(Построитель базы данных) выберем из контекстного меню NewTable… (Новая таблица). Появится окно, в котором выберем NewTable (Новая таблица) и сохраним таблицу как Groups.dbf. После этого на экране появится диалоговое окно TableDesigner (Конструктор таблиц) в котором введём названия всех полей таблицы Группы (Groups), укажем их типы данных и ограничения. Создадим индексы для таблицы. Индексы нужны для определения первичного и внешнего ключей в базе данных. Для создания индекса перейдём на вкладку Indexes (Индексы). Сначала создадим индекс первичного ключа таблицы. В поле Name введём имя индекса PK_Groups, а из раскрывающегося списка Type (Тип) выберем тип индекса Primary (Первичный), затем нажмём кнопку справа от поля Expression (Выражение) и введём значение индексного выражения в окне построителя выражений «name_group», то есть укажем, что первичным ключом будет поле name_group. Теперь создадим два регулярных индекса для определения внешних ключей. Первый FK_Job_tit, тип – Regular, выражение – «Job_title» и второй FK_Teacher, тип – Regular, выражение – «ID_teacher».

Аналогично создадим две другие таблицы Teachers.dbfи Job_titles.dbf и определим индексы первичного ключа и назовём их PK_Teacher и PK_Job_tit, а в выражении проставим название поля первичного ключа.

Создадим отношения между таблицами. Для этого в окне конструктора базы данных щёлкаем мышью на имени индекса PK_Teacher таблицы Teachers и переносим к индексу FK_Teacher таблицы Groups. Также создадим отношение между таблицами Job_titles и Teachers.

Рис. 2.16.5. Схема отношений базы данных

Создадим представление, выводящее значения полей всех трёх связанных таблиц. В Диспетчере проекта перейдём на вкладку Data(Данные) – Database затем выберем базу данных student_groups, в которой выберем пункт LocalViews (Локальные Виды) и нажмём на кнопку New, затем выберем NewView (Новое представление). В появившемся окне AddTableorView (Добавить таблицу или представление) выберем поочерёдно все три таблицы и нажмем кнопку Add (Добавить). В окне ViewDesigner (Конструктор представления) появятся все три таблицы и автоматически добавятся связи, так как мы их уже задавали при построении схемы базы данных. Выберем в контекстном меню ViewSQL (Просмотр SQL) и появится окно просмотра SQL запроса для вида, в котором уже будет задана связка таблиц, поэтому добавим только какие поля мы будем выводить, для чего в разделе SELECT запроса на выборку введём список полей