энтузиасты отвечали либо молчанием, либо
На вопрос о правилах OODB- энтузиасты отвечали либо молчанием, либо предложением внедрять их путем включения кода для их поддержки в одну или несколько функций, работающих с коллекцией. Например, для поддержки того правила, что любой служащий должен зарабатывать меньше, чем его менеджер, потребуется вставить соответствующий этому ограничению код в две функции – HIRE(EMPLOYEE) и RAISE-SAL(EMPLOYEE).
При ассоциировании правил с функциями возникают две фундаментальные проблемы. Во-первых, при добавлении новой функции, например, PENSION-CHANGE(EMPLOYEE), изменяющей размеры пенсии, необходимо или проследить, чтобы был вызван метод RAISE-SAL(EMPLOYEE), или включить в новую функцию код для поддержки правила. Нельзя гарантировать, что программист не забудет это сделать, а, следовательно, нельзя гарантировать поддержку правил. Более того, код для поддержки правила должен быть помещен, по крайней мере, в две функции: HIRE(EMPLOYEE) и RAISE-SAL(EMPLOYEE). Это потребует удвоения усилий и сильно затруднит изменение правила.
Рассмотрим следующее правило:
Если изменяется зарплата Джо, необходимо таким же образом изменить зарплату Сэма.
По схеме OODB для внедрения правила требуется добавить соответствующий код к функциям HIRE и RAISE-SAL. Предположим, что добавилось еще одно правило:
Если изменяется зарплата Сэма, необходимо таким же образом изменить зарплату Фреда.
Для внедрения этого правила понадобится добавить код к тем же функциям. К тому же второе правило связано с первым. Человеку, пишущему код для поддержки второго правила, будет нужно правильно осуществить взаимодействие двух правил, а для этого придется разбираться со всеми правилами, включенными в изменяемую функцию. Та же проблема появится при последующем удалении правил.
Наконец, была бы очень ценной возможность выдать запрос о поддерживаемых в текущий момент правилах. Если правила похоронены в функциях, простого способа реализации этой возможности нет.
С нашей точки зрения, есть только одно разумное решение: правила должны поддерживаться СУБД, но не быть привязаны ни к какой функции и ни к какой коллекции.У этого утверждения имеются два следствия. Во-первых, парадигма OODB "все выражается методами" просто не применима к правилам. Во-вторых, нельзя предоставлять непосредственный доступ к внутренним интерфейсам СУБД ниже уровня активации правил (иначе пользователи смогут обходить систему, включающую правила в нужное время).
В заключение отметим, что уже существуют продукты поставщиков систем второго поколения, отвечающие приведенному предложению. Следовательно, в вопросах, касающихся этого предложения, коммерческий реляционный рынок опередил уровень исследований OODB.
Содержание Назад Вперед