- •1 Описание предметной области
- •2 Моделирование потоков данных
- •2.2 Инфологическая модель базы данных
- •3 Проектирование и реализация базы данных
- •3.2 Программная реализация поставленной задачи Средства поддержания целостности данных
- •Описание запросов к базе данных
- •Простая выборка (с упорядочиванием данных);
- •Выборка с условием;
- •Выборка данных из связанных таблиц:
- •Выборка с использованием оператора простого соединения;
- •Разработка механизмов защиты данных от несанкционированного доступа
- •Интерфейс программы
- •Экранные формы
- •Описание отчетов
3.2 Программная реализация поставленной задачи Средства поддержания целостности данных
Установленные отношения между таблицами могут быть использованы для задания целостности данных. Целостность данных является одним из самых важных требований, предъявляемых к базам данных. Целостность (от англ. integrity – нетронутость, неприкосновенность, сохранность, целостность) – понимается как правильность данных в любой момент времени [10, 14].
Существует 3 группы целостности:
целостность по сущностям
целостность по ссылкам
целостность, определяемая пользователем
1. Для поддержания целостности по сущностям, необходимо обеспечить уникальность первичного ключа.
2. Для определения условий целостности данных по ссылкам в окне конструктора базы данных выбирается команда Edit Referential Integrity. В открывшемся окне конструктора условий целостности данных указываются все установленные отношения между таблицами. Таблица описания условий содержит наименование родительской и дочерней таблиц, наименования индексов, используемых для связи, а также типы действий, выполняемых при модификации данных, добавлении и удалении записей. По отношению к данному проекту были выставлены следующие условия целостности:
Рисунок 3.1. Построитель ссылочной целостности
При попытке изменения, удаления первичного ключа будет выполняться операция Restrict, т.е. изменение данных становится невозможным, так как есть связанная информация в дочерних таблицах. При вводе новых данных так же выполняется операция Restrict, так как невозможен ввод данных если нет записей в родительской таблице.
3. Для поддержания третьего вида целостности введены контроль следующих полей таблиц базы данных:
Таблица «Документ_на_вселение»:
- поле «дата_вселения=>дата_подписания», иначе выводится сообщение "Некорректная дата!"
- поле «дата_выселения=>дата_вселения», иначе выводится сообщение "Некорректная дата!"
Таблица «Студенты»:
- поле «курс <4 AND курс>0», иначе выводится сообщение «Недопустимый курс проживания в общежитии!»
Описание запросов к базе данных
Запросы предназначены для выборки нужных данных из одной или нескольких связанных таблиц [13]. Запрос может быть сформирован по образцу (QBE) или с помощью языка структурированных запросов SQL. Запросы должны быть сформулированы на естественном языке и выражены в терминах реляционной алгебры.
В данной работе используются следующее типы запросов:
Простая выборка (с упорядочиванием данных);
-Показать список всех комнат.
σ (комната.номер_комната, комната.номер_корпус,комната.кол_своб_мест,комната.кол_мест)
thisform.pageframe1.page1.grid1.recordsource = 0
SELECT комната.номер_комната, комната.номер_корпус,комната.кол_своб_мест,комната.кол_мест ;
FROM "общежитие!комната";
into cursor temp;
ORDER BY комната.номер_комната
thisform.pageframe1.page1.grid1.recordsource = "temp"
Выборка с условием;
-Вывести список комнат со свободными местами.
σ кол_своб_мест > 0(комната)
thisform.pageframe1.page1.grid1.recordsource = 0
SELECT* FROM "общежитие!комната";
into cursor temp;
WHERE комната.кол_своб_мест > 0
thisform.pageframe1.page1.grid1.recordsource = "temp"
- Показать список студентов без регистрации.
σ наличие_регистрации= "нет" (студенты)
thisform.pageframe1.page1.grid1.recordsource = 0
SELECT* FROM "общежитие!студенты";
into cursor temp;
WHERE студенты.наличие_регистрации= "нет"
thisform.pageframe1.page1.grid1.recordsource = "temp"
- Найти студентов по фамилии.
σ фамилия = ThisForm.pageframe1.page1.Combo1.value (студенты)
thisform.pageframe1.page1.grid1.recordsource = 0
SELECT студенты.фамилия, студенты.имя,студенты.отчество,;
студенты.факультет,студенты.курс;
FROM "общежитие!студенты";
into cursor temp;
WHERE студенты.фамилия = ThisForm.pageframe1.page1.Combo1.value
thisform.pageframe1.page1.grid1.recordsource = "temp"
