Определение:
Пусть X, Y, Z - три атрибута некоторого отношения. При этом X --> Y и Y --> Z, но обратное соответствие отсутствует, т.е. Z -/-> Y и Y -/->X. Тогда Z транзитивно зависит от X. Пусть имеется отношение ХРАНЕНИЕ (ФИРМА, СКЛАД, ОБЪЕМ), которое содержит информацию о фирмах, получающих товары со складов, и объемах этих складов. Ключевой атрибут - "фирма". Если каждая фирма может получать товар только с одного склада, то в данном отношении имеются следующие функциональные зависимости:
фирма -> склад
склад -> объем
При этом возникают аномалии:
если в данный момент ни одна фирма не получает товар со склада, то в базу данных нельзя ввести данные о его объеме (т.к. не определен ключевой атрибут)
если объем склада изменяется, необходим просмотр всего отношения и изменение кортежей для всех фирм, связанных с данным складом.
Для устранения этих аномалий необходимо декомпозировать исходное отношение на два:
ХРАНЕНИЕ (ФИРМА, СКЛАД)
ОБЪЕМ_СКЛАДА (СКЛАД, ОБЪЕМ)
Определение третьей нормальной формы:
Отношение находится в 3НФ, если оно находится во 2НФ и каждый неключевой атрибут нетранзитивно зависит от первичного ключа.
1. Анализ композиционной модели данных с целью выявления и устранения избыточных функциональных и транзитивных зависимостей.
2. Выделение по композиционной модели простых и составных ключей из элементов, из которых направлена хотя бы одна ассоциация типа 1, а также составных ключей из элементов, связанных отображением М:М, либо одиночной ассоциацией типа М.
3. Определение множеств атрибутов для каждого ключа (элементы, к которым направлены ассоциации типа 1, выходящие из ключа).
4. Минимизация числа построенных отношений исключением отношений, являющихся подмножествами (проекциями) других отношений, объединением отношений с одинаковыми ключами.
6.5. Интерактивные и перекрестные запросы
При использовании стандартных СУБД достаточно часто, если не всегда, пользователь сам определяет критерий выборки, по которому осуществляется поиск. Запросы с интерактивным вводом значений параметров выборки являются более гибкими, т.к. не требуют доработки запроса в режиме конструктора при изменении параметров.
Ниже запрос, в котором считается число врачей указанной специальности. В качестве условия отбора записей указано предложение [Введите специальность врача]. При выполнении такого запроса с параметром Access сначала предлагает ввести специальность врача во всплывающем окне, результат выборки распространяется только на записи, соответствующие введенному значению параметра (рис. 13).
Рис. 13. Пример выполнения запроса с параметрами
Теперь создадим запрос с двумя запрашиваемыми параметрами и сделаем его интерактивным. Для этого нам необходимо создать форму с элементами управления, в которых будут выбираться эти параметры.
Откройте вкладку Создание на панели инструментов и нажмите на кнопку Конструктор форм.
Перенесите на форму элемент управления Поле со списком (проследите за тем чтобы режим мастеров был включен).
Откроется диалоговое окно где нужно будет выбрать параметр Будет введен фиксированный набор значений и в следующем окне перечислить все специальности врачей, которые у нас имеются (лор, терапевт и тп.). Назовите этот элемент управления на форме «Специальность».
Добавьте поле для ввода на форму и назовите её «Стаж». Сохраните и закройте форму.
Вызовите конструктор запроса, в котором будут выбираться поля ФИО, Специальность и Стаж из таблицы Врачи.
В качестве условий отбора в поле Специальность укажите при помощи построителя выражений ссылку на поле со списком с аналогичным названием в форме которую мы только что создали. А в параметре Стаж ссылка должна быть на поле для ввода Стаж на форме. Перед последним параметром поставьте знак больше или равно, это значит что будет происходить отбор врачей, чей стаж не меньше введенного.
Теперь остается связать форму и запрос. Для этого откройте нашу форму и добавьте на неё кнопку (мастера должны быть выключены). Откройте свойства кнопки и в разделе События найдите пункт Нажатие кнопки. В построителе выберите Макросы. В открывшемся окне выберите макрокоманду Открыть запрос, где в качестве запроса должен быть указан тот, что мы только что сделали. Закройте окно макрокоманды и сохраните изменения.
Теперь проверьте как работает наш интерактивный запрос. Для этого откройте форму в режиме просмотра, введите параметры и нажмите кнопку с макрокомандой. На рисунке 14 представлен пример интерактивного запроса с двумя запрашиваемыми параметрами.
18
Для поддержки диалогового ввода параметра целесообразно разработать пользовательское окно ввода параметра с визуализацией списка возможных значений параметра.
Порядок создания пользовательского окна ввода:
Разработать специальную форму ([Forms]![Товар1]!) с элементом управления типа ПОЛЕ СО СПИСКОМ (указав тип источника данных и источник). В дальнейшем потребуется имя данного элемента управления (например, ([Forms]![Товар1]![Name]).
Разработать параметрический запрос (например, Запрос2), в котором в качестве условия отбора нужного параметра указать имя элемента ввода параметра из формы – [Forms]![Товар]![Name].
19
Нормальная форма — свойство отношения в реляционной модели данных, характеризующее его с точки зрения избыточности, потенциально приводящей к логически ошибочным результатам выборки или изменения данных. Нормальная форма определяется как совокупность требований, которым должно удовлетворять отношение.
3.2.3. Создание кнопок управления
Кнопки являются удобным средством выполнения действий. Когда пользователь щелкает кнопку, не только выполняется соответствующее действие, но и на экране видно, как кнопка нажимается и отпускается.
Чтобы определить действие для кнопки в форме, следует написать макрос или процедуру обработки события и вложить ее в свойство кнопки Нажатие кнопки. На кнопку в форме можно поместить текст или рисунок; на кнопку на странице доступа к данным можно поместить только рисунок. Имеется возможность создать кнопку самостоятельно или с помощью мастера.
