Смекни!
smekni.com

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

7.К одной кафедре относится несколько групп.

8.Название кафедры уникально.

9.Студент имеет ФИО, год рождения, адрес. Кафедра название и зав. кафедрой.

а.Постройте функциональную модель для заданной предметной области с помощью методологии DFD:

· идентифицировать систему

· определить сущности

· определить потоки данных между сущностями и системой

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

в.Структуру спроектированной базы данных реализуйте с помощью любой СУБД. Приложение должно содержать следующие объекты: формы, отчеты и меню.

Построение функциональной модели

Систему назовём «Систему учёта студентов».

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

Сущности предметной области:

· Студенты

· Группы

Определим потоки данных между сущностями и системой.

Функциональная модель представлена при помощи диаграмм потоков данных (DFD).

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


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


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


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

@ИМЯ = ДАННЫЕ О СТУДЕНТЕ

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

@БНФ = Номер зачётки + Название группы + ФИО + Год рождения + Адрес

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

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

@БНФ = Название группы + Название кафедры + Зав. кафедрой

@ИМЯ = ПОИСК СТУДЕНТА

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

@БНФ = Номер зачётки

@ИМЯ = СВЕДЕНИЯ О СТУДЕНТЕ И ГРУППЕ

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

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

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

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

@БНФ = ДАННЫЕ О СТУДЕНТЕ

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

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

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

@ИМЯ = НАЙТИ ГРУППУ

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

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

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

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

@БНФ = НАЙТИ ГРУППУ

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

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

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

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

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

@БНФ = СВЕДЕНИЯ О СТУДЕНТЕ И ГРУППЕ


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

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

@ВХОД = ДАННЫЕ О СТУДЕНТЕ

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

@ВЫХОД = ДАННЫЕ О СТУДЕНТЕ

@ВЫХОД = НАЙТИ ГРУППУ

@СПЕЦПРОЦ A0.1 ПРОВЕРИТЬ НАЛИЧИЕ ГРУППЫ

НАЙТИ ГРУППУ = Название группы из ДАННЫХ О СТУДЕНТЕ

ЕСЛИ РЕЗУЛЬТАТ ПОИСКА ГРУППЫ не равен NULL ТО

ДАННЫЕ О СТУДЕНТЕ = ДАННЫЕ О СТУДЕНТЕ

КОНЕЦ ЕСЛИ

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

@ВХОД = ДАННЫЕ О СТУДЕНТЕ

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

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

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

ИНФОРМАЦИЯ О СТУДЕНТЕ = ДАННЫЕ О СТУДЕНТЕ

КОНЕЦ ЕСЛИ

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

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

КОНЕЦ ЕСЛИ

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

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

КОНЕЦ ЕСЛИ

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

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

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

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

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

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

КОНЕЦ ЕСЛИ

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

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

КОНЕЦ ЕСЛИ

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

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

КОНЕЦ ЕСЛИ

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

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

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

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

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

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

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

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

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


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

Выделим три сущности: Студент, Кафедра и Группа.

Связь Студент – Группа имеет тип «Многие к одному» так как в одной группе могут учиться несколько студентов, но каждый студент учится только в одной группе. Связь Группа – Кафедра имеет тип «Многие к одному» так как к одной кафедре относится несколько групп и каждая группа относится к одной кафедре.

Рис. 2.17.3.Структура связей между сущностями

Сущность «Студент» имеет атрибуты: «Номер зачётки», «ФИО», «Год рождения», «Адрес», «Название группы».

Сущность «Группа» имеет атрибуты «Название группы», «Название кафедры».

Сущность «Кафедра» имеет атрибуты «Название кафедры», «Зав кафедрой».

Сущности «Студент» и «Группа» связаны по полю «Название группы», значение которого для сущности «Группа» уникально и является её первичным ключом.

Сущности «Группа» и «кафедра» связаны по полю «Название кафедры», значение которого для сущности «Кафедра» уникально и является её первичным ключом.

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

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

Опишем структуру каждой таблицы.

Таблица «Студент» (student)

Наименование поля Тип данных Ограничения
Номер зачётки (ID_zach) Целое число Первичный ключ
Название группы (name_group) Строка (15) NOT NULLВнешний ключ
ФИО (FIO) Строка (30) NOT NULL
Год рождения (Year_birth) Дата
Адрес (Address) Строка (30)

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

Наименование поля Тип данных Ограничения
Название группы (name_group) Строка (15) Первичный ключ
Название кафедры(name_Pulpit) Строка (15) NOT NULLВнешний ключ

Таблица «Кафедра» (Pulpit)

Наименование поля Тип данных Ограничения
Название кафедры (name_Pulpit) Строка (15) Первичный ключ
Зав кафедрой (Zav_Pulpit) Строка (30) NOT NULL

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

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

Аналогично создадим две другие таблицы Groups.dbfи Pulpit.dbf. Для таблицы Groups.dbfопределим индексы первичного и внешнего ключа и назовём их PK_Groups и FK_Pulpit, а в выражении для первичного ключа проставим название поля первичного ключа name_group, для внешнего ключа – название поля внешнего ключа name_Pulpit. Для таблицы Pulpit.dbf определим индекс для первичного ключа PK_Pulpit, выражение – «name_Pulpit».

Создадим отношения между таблицами. Для этого в окне конструктора базы данных щёлкаем мышью на имени индекса PK_Groups таблицы Groups и переносим к индексу FK_Groups таблицы Student. Также создадим отношение между таблицами Pulpit и Groups, для чего перенесём поле PK_Pulpit из таблицы Pulpit к полю FK_Pulpit таблицы Groups.

Полученная схема базы данных представлена на рисунке 2.17.5.

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

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