Свои представления вместо чужих, путь второй: клиент, перемещающийся по схеме базы
(Окончание, начало в №49)
Данная статья предлагает другое возможное решение проблем, сформулированных в предыдущей работе. Напомним, что речь идёт об отказе настраивать сложное чужое приложение. В данной статье для этого отказа автор предлагает быстрый способ заполнения базы данных с помощью специального клиента, написанного один раз и навсегда для всех схем баз данных, и заинтересован во мнениях, комментариях и возможной реализации излагаемых предложений. Идея состоит в том, что:
- в каждый момент времени на экране клиента представлена только одна таблица1
- по щелчку на поле, ссылающемся на другую таблицу, экран клиента отображает другую таблицу. Будем называть этот переход эстафетным переходом2
- таблица в клиенте дополняется виртуальными полями (не существующими в таблице базы), которые являются виртуальными ссылками на таблицы, ссылающиеся на данную таблицу настоящими внешними ключами (виртуальных полей столько, сколько таблиц ссылается на данную). По щелчку на виртуальном поле экран клиента отображает другую таблицу, представленную данным виртуальным полем (таким образом, клиент вынужден загрузить схему базы данных из её системных таблиц, чтобы знать, какие таблицы ссылаются на данную). Будем называть этот переход м ножественным переходом3.
В клиенте можно редактировать и удалять записи, добавлять новые4. А нажатие кнопки "Choice" на некоторой записи после эстафетного перехода возвращает к отображению предыдущей таблицы и копированию первичного ключа выбранной записи в ссылающееся поле предыдущей записи. Такой подход позволяет обойтись вообще без программиста - пользователь просто путешествует по базе данных, в которой ничего не запрограммировано5. Для удобства пользователя:
- сразу после эстафетного перехода отображается только одна запись, на которую ссылались. Нажатие кнопки "All" в меню программы-клиента отображает все записи таблицы, в которой находится данная запись, начиная с данной записи6 (можно сделать скроллинг вверх, посмотрев, какие записи находятся до данной);
- сразу после множественного перехода отображаются только те записи, которые ссылались. Нажатие кнопки "All" в меню программы-клиента отображает все записи таблицы, в которой находятся данные записи, причём последние будут выделены цветом.
Таблица может быть отображена одним из трёх способов: с подстановкой значения из другой таблицы вместо ссылающегося поля в теле или в заголовке таблицы (заголовке гиперкуба7), а при наличии ссылки из таблицы на саму себя - с демонстрацией её как таблицы или как дерева (способ указывается в системной таблице8).
Весь период времени работы программы-клиента является одной длинной транзакцией. При выходе из программы она спросит, сохранить или откатить изменения, сделанные в течение её работы. Кроме того, каждый экран программы является точкой останова (savepoint) СУБД: нажимая кнопку "Back", пользователь не только возвращается на предыдущий экран, но и откатывает все изменения, сделанные в последнем экране9. Также для его удобства программе-клиенту желательно:
- протоколировать все действия, совершаемые пользователем в экране - и иметь кнопку "Next", чтобы выполнить их ещё раз, если пользователь откатил транзакцию кнопкой "Back";
- иметь кнопку "Commit", закрепляющую транзакцию в текущем состоянии.
Пользователь создаст свою схему базы быстрее, чем настроит чужое ПО. А программировать для заполнения схемы вообще не нужно.
P.S.
Невидимость некоторых записей для оператора SELECT достигается введением в таблицу поля перечислимого (целого) типа и изложена подробно в разделе "Right for each record" презентации10. Невидимость некоторых колонок таблицы для оператора SELECT достигается выражением вида "REVOKE select ON TABLE tab/@fld TO username".
Все предложения являются общественным достоянием.
Дмитрий ТЮРИН,
главный специалист департамента
ЦАБС "АСБ Беларусбанк",
член группы внедрения SAP R/3
1 Таблица отображается со
скроллингом, колонка первичного
ключа не демонстрируется. В
системной таблице СУБД указана
таблица, отображаемая сразу после
загрузки программы-клиента - клиент
считывает её название из системной
таблицы и запрашивает именно её
2 Термин берёт своё происхождение со слайда #8 презентации sql50.euro.ru/sql5.17.0.pdf (далее подразумевается эта же презентация)
3 Термин берёт своё происхождение со слайда #7 презентации
4 Таким образом, программа-клиент должна иметь в своём меню кнопки "Add" и "Del"
5 Поле представления (view) A ссылается на ту же самую колонку некой таблицы C, на которую ссылается поле таблицы B, вошедшее в представление
6 Слайд #45 презентации рассказывает подробнее о необходимой SQL-конструкции
select * from ... order by ... downward ... ;
7 Подробнее об отображении таблицы в виде гипер-куба в отдельном документе html60.euro.ru/site/html60/ru/cube_ru.htm
8 Способ отображения указывается для каждой таблицы в системной таблице СУБД. Если таблица должна быть представлена как дерево, и она имеет несколько полей, ссылающихся на неё саму, то поле, которое должно быть использовано для построения дерева, также указывается в системной таблице
9 Программа-клиент расставляет точки останова в СУБД перед переходом к каждому следующему экрану. Кнопка "Choice" не откатывает транзакцию, т.е. не откатывает изменения, сделанные в окне (как сделанные сразу, так и сделанные после нажатия кнопки "All")
10 Слайды # 161-163 презентации
Горячие темы