Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекція 9 Физическое проектирование.doc
Скачиваний:
19
Добавлен:
19.11.2019
Размер:
432.64 Кб
Скачать

3. Реализация в среде субд ingres 6.4

В некоторых СУБД, не совместимых с новым Стандартом языка SQL, отсутствует поддержка одной или более фраз PRIMARY KEY, FOREIGN KEY и DEFAULT. Аналогичным образом, многие типы СУБД не поддерживают понятия доменов. В частности, в среде целевой СУБД типа INGRES 6.4 таблица Property for Rent может быть создана с помощью следующего оператора языка SQL:

CREATE TABLE property_for_rent(

Pno VARCHAR(5) NOT NULL,

Street VARCHAR(25) NOT NULL,

Area VARCHAR(15),

City VARCHAR(15) NOT NULL,

Pcode VARCHAR(B),

Type CHAR(l) NOT NULL,

Rooms SMALLINT NOT NULL,

rent MONEY MOT NULL,

ono VARCHAR(5) NOT NULL,

sno VARCHAR(5),

bno VARCHAR(3) NOT NULL)

В данном случае все требования, предъявляемые к допустимости значений ключей, принимаемым по умолчанию значениям и доменам атрибутов, должны быть реализованы программно в самих приложениях, которые должны разрабатываться с учетом всех этих требований. Исключением из данного правила являются только ограничения для значений первичных ключей, которые могут быть реализованы с помощью организации уникальных индексов, как описывается ниже. Альтернативный вариант — определить структуру хранения этой таблицы в виде двоичного дерева или ISAM-файла (приложение Б).

4.Реализация с использованием уникальных индексов

Индекс представляет собой механизм доступа, ускоряющий выборку-данных из таблицы—он действует подобно помещенному в книгу указателю (приложение Б). Уникальным называют такой индекс, в котором двум различным кортежам таблицы запрещено иметь одинаковое индексируемое значение. Система проверяет наличие дублей непосредственно при создании индекса (если данные в таблице уже существуют) и впоследствии контролирует каждое добавляемое в таблицу значение. Многие типы реляционных СУБД поддерживают создание индексов. Уникальный индекс может использоваться для организации контроля за нарушением уникальности значений первичных и потенциальных ключей. Например, приведенный выше 'SQL-оператор создания таблицы в среде СУБД INGRES не может воспрепятствовать помещению в таблицу двух записей с одним и тем же значением первичного ключа. С целью предотвращения подобных ошибок для атрибута первичного ключа таблицы (Рnо) можно создать уникальный индекс с помощью следующего оператора языка SQL:

CREATE UNIQUE INDEX property_no_index ON property_for_rent(pno);

Аналогичным образом можно создать составной индекс для первичного ключа таблицы Viewing, состоящего из атрибутов (Rno, Pno). Вот как выглядит соответствующий SQL-оператор:

CREATE UNIQUE INDEX viewing_index ON viewing(rno, pno);

Если выбранная целевая СУБД не поддерживает определения первичных и альтернативных ключей, то их следует заменить соответствующими уникальными индексами (если это возможно).

Документирование проекта таблиц базы данных

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

Этап 4.2. Реализация бизнес-правил предприятия в среде целевой субд Цель Реализация бизнес-правил в среде целевой субд.

Обновление информации в таблицах может быть ограничено бизнес-правилами, регулирующими ручное выполнение тех операций, которые связаны с проведением данных обновлений. Способ реализации этих бизнес-правил опять-таки будет зависеть от типа выбранной целевой СУБД, поскольку одни системы для реализации требований организации предлагают больше возможностей, а другие — меньше. Как и в случае предыдущего этапа, если целевая СУБД поддерживает стандарт языка SQL2, то реализовать определенные типы требований будет совсем просто. Например, в компании DreamHome существует правило, согласно которому каждый работник может одновременно заниматься не более чем десятью сдаваемыми в аренду объектами. Это ограничение можно включить в SQL-оператор создания таблицы Ргорterty_f or_Rent с помощью следующего предложения:

CONSTRAINT staff_not_handling_too_much

CHECK (NOT EXIST (SELECT sno

FROM property_for_rent

GROUP BY sno

HAVING COUNT(*)>10))

Альтернативным методом реализации бизнес-правил является использование триггеров. Для реализации приведенного выше примера ограничения в некоторых типах целевых СУБД может быть использован следующий триггер:

CREATE TRIGGER staff_not_handling_too_much

ON property_for_rent

FOR INSERT, UPDATE

AS IF ((SELECT COUNT(*) FROM property_for_rent p, WHERE

p.sno = INSERTED.sno) > 10)

BEGIN

PRINT "Данный работник уже отвечает за 10 объектов"

ROLLBACK TRANSACTION

END

В результате создается триггер, который будет запускаться при каждой попытке вставки новой записи в таблицу Property for Rent, а также при каждой попытке обновления любой записи, уже существующей в этой таблице. В триггере выполняется проверка количества объектов, за которые отвечает данный сотрудник фирмы. Если это количество уже равно десяти, выводится соответствующее сообщение и выполнение транзакции отменяется.

В некоторых системах отсутствует поддержка реализации некоторых или всех типов бизнес-правил. В этом случае соответствующие действия должны быть реализованы непосредственно в приложениях. Например, существует очень мало (если они вообще есть) реляционных СУБД, которые позволяют реализовать ограничения по времени — допустим, такое: "В 17.30 последнего рабочего дня каждого года выполняется архивирование всех строк, относящихся к объектам, проданным в течение этого года, после чего данные записи удаляются".