Разработка приложений в системе клиент/сервер Oracle7, страница 4

SELECT orderid, SUM(quanitty*unitperice)

 FROM item. Stock

 WHERE item.stockid=stock.id

GROUP BY orderid

 ORDER BY orderid

ORDERID       SUM(QUANTITY*UNITPRICE)

-------------    ---------------------------------------

1 265.87

2 82.14

.

.

.

Как можно видеть, второй запрос намного эффективнее, чем первый, так как для вычислений на сервере и передачи данных по сети он использует комбинацию операторов SQL, SQL- функции Oracle7(SUM) и оператора GROUP BY.

Этот простой пример показывает, как в среде клиент/сервер для уменьшения сетевого трафика можно использовать SQL и SQL-функцки, что для создания хорошего клиентного приложения базы данных разработчики должны быть зна­комы с SQL. (Подробнее о SLQ и SQL-функциях рассказывается в главе 5 и приложении А.)

Что такое сервер базы данных?

Каждая версия сервера базы данных Oracle поддерживает связь по сети с клиен­тами с помощью SQL*Net. Однако Oracle7 —это первая версия сервера Oracle. имеющая собственные средства для обеспечения работы клиент/сервер, уменьшаю­щие сетевой ввод-вывод между клиентными приложениями и серверами. В следу­ющих разделах рассматриваются средства Oracle7, которые разработчики могут с успехом использовать в системах клиент/сервер.

Ограничения целостности

Все клиентные приложения должны придерживаться совокупности заранее оп­ределенных правил целостности данных и правил функционирования, обеспечивающих  допустимость данных базы. (Эти вопросы подробнее рассматриваются в главе 2.) Разработчики приложений могут ввести простое правило обеспечения целостности  двумя способами:

·  Позволяя приложению выполнять проверку целостности

·  Используя ограничения целостности Oracle7.

Выполнение проверки целостности приложением Предположим, напри­мер, что вы хотите, чтобы все транзакции вставляли новые заказы таким образом, чтобы идентификатор заказчика в каждом заказе совпадал с допустимым иденти­фикатором заказчика в таблице CUSTOMER. Это называется простой ссылочной целостностью. Один из способов введения правила ссылочной целостности состоит в том. что приложение само должно выполнять проверку целостности. Во-первых. транзакции приложения могут опрашивать базу данных, чтобы убедиться в нали­чии заказчика в таблице CUSTOMER. Если запрос находит заказчика, он должен затем на время выполнения транзакции блокировать соответствующую строку. обеспечивая тем самым сохранение заказчика до включение нового заказа. Нако­нец. транзакция может благополучно вставлять новую строку, используя прове­ренный идентификатор заказчика и завершая транзакцию для снятия с таблицы CUSTOMER блокировки. Приведем анонимный блок PL/SQL, демонстрирующий код клиентной стороны с обеспечением ссылочной целостности:

DECLARE

flag INTEGER;

 BEGIN

SELECT id INTO flag

FROM customer

WHERE id = 3

FOR UPDATE OF id;

IF SQL%FOUND THEN

INSERT INTO orders

VALUES (5, 3, SYSDATE, null, null, ‘F');

-другие операции приложения

 COMMIT;

END IF;

END;

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

Использование ограничений целостности Oracle7По нескольким причи­нам лучшим способом задания правил ссылочной целостности является использо­вание ограничений ссылочной целостности 0гас1е7. С этой целью вы можете легко задать ограничения целостности вместе с определением таблицы. Так как для задания правил ссылочной целостности разработчикам ненужно создавать, тести­ровать и отлаживать сложную логику целостности данных, они смогут работать более продуктивно. Во-вторых, ограничение ссылочной целостности — это цент­рализованный метод задания правила ссылочной целостности. Таким образом, Oracle7 вынуждает все приложения придерживаться одного и того же правила целостности. (Если проверку целостности выполняет приложение, разработчикам в каждом приложении приходится создавать, тестировать и отлаживать одну и ту же логику целостности, данных.) Наконец, так как Oracle7 вводит ограничения целостности без создания сетевого ввода-вывода, производительность системы клиент/сервер не страдает из-за дополнительного сетевого доступа. Подробнее обограничениях целостности и целостности данных рассказывается в главе 2. которая знакомит вас с некоторыми типами ограничений, и главе 15, где поясняется, как задавать ограничения ссылочной целостности для таблиц базы данных 0гас1е7.