
2.3 Концептуальная модель
Ниже на рисунке (рис. 1) представлена концептуальная модель решаемой задачи.
Рис.1 схема базы данных
3. Реализация базы данных
3.1 Создание базы «Меню кафе»
Все элементы базы данных: таблицы, запросы, формы и другие хранятся в отдельных файлах и имеют различные расширения. При создании приложения используется проект, в котором хранится информация об используемых файлах, а также подключенных модулях и библиотеках. Посредством этой информации файл проекта объединяет элементы приложения FoxPro и группирует их по типам в менеджере проекта, используя при этом их расширение. Информация о проекте хранится в специальной таблице, которая, в отличие от обычных таблиц FoxPro, имеет расширение *.pjx. Memo-поля таблицы содержат наименование элемента проекта, его описание и другие текстовые атрибуты. Файл с Memo-полями таблицы имеет расширение PJT. Использование файла проекта значительно облегчает работу с проектом и упрощает разработку приложения.
3.2 Создание таблиц
Таблицы являются основной частью базы данных. Они содержат всю необходимую информацию об информационных объектах и их реквизитах. При дальнейшей работе с базой данных данные будут добавляться в таблицы, удаляться из них и редактироваться по мере необходимости. Все эти действия можно осуществлять при помощи специально созданных форм. Информация, содержащаяся в таблицах, также может быть использована для составления отчетов.
Таблица состоит из столбцов и строк, в которых хранится информация одного типа.
В Visual FoxPro таблицы можно создавать двумя способами, при помощи конструктора таблиц и при помощи мастера, выбирая в окне создания таблицы «New Table» кнопки «Table Wizard» (мастер таблиц) и «New Table» (конструктор таблиц) соответственно.
В базе данных «Меню кафе» все таблицы были созданы при помощи конструктора таблиц (рис 3.1). На вкладке «Fields» задаём свойства полей таблицы: имя, тип, размер, индексное поле.
На вкладке «Index» определяем тип индексных полей (Рис.3.1.). Связь «Primary» позволяет создает уникальный индекс, который используется для связывания таблиц и определения условий целостности данных. Поля, входящие в первичный ключ, не должны допускать ввода пустых или повторяющихся значений
Связь «Regular» создает индекс, в котором для каждой записи таблицы хранится значение индексного выражения. Если несколько записей имеют одинаковое значение индексного выражения, то каждое значение хранится отдельно и содержит ссылку на связанную с ней запись.
Для всех главных таблиц определяем первичные ключи по полям которое будет однозначно определять таблицы, такими полями будут поля со словом “cod”. Для связи главной и дочерних таблиц в дочерних таблицах установим внешний ключ типы «Regular». В таком случае у нас есть одна главная (albums) и три подчиненных (artists, styles и tracks) таблицы (рис 3.2).
Рис. 3.2 Схема связей
В обоих случаях у нас будет осуществляться отношение «один-ко-многим», т.е. одной записи родительской таблицы могут соответствовать несколько записей из дочерней.
Необходимо обеспечить ссылочную целостность. Главное требование ссылочной целостности заключается в том, чтобы записи дочерних таблиц имели ссылки на записи в родительской таблице. Для этого кликом по связи вызываем диалоговое окно «Referential Integrity» (рис.3.2), где устанавливаем правила на добавление, удаление и изменение записи в дочерней таблице. В окне «Referential Integrity» справа указаны имена главной и дочерней таблиц, слева – поля по которым они связанны.
На вкладках «Update» и «Delete» выбираем «Cascade», что означает, что при изменении/удалении значений полей первичного ключа или ключа-кандидата в родительской таблице автоматически осуществляется изменение/удаление всех соответствующих значений в дочерней таблице — каскадное изменение/удаление. Вкладка «Insert» содержит правила для добавления записей применимых со стороны дочерней таблицы, здесь выбираем «Restrict», т.е. запрещается добавление записи к дочерней таблице, если в родительской таблице отсутствует запись, значение первичного ключа или ключа-кандидата которой не совпадает со значением внешнего ключа добавляемой записи.