Свои представления вместо чужих, путь второй:
клиент, перемещающийся по схеме базы
Данная статья предлагает другое возможное решение проблем, сформулированных в
предыдущей работе. Напомним, что речь идет об отказе настраивать сложное чужое приложение. В данной статье для этого отказа автор предлагает быстрый способ заполнения базы данных с помощью специального клиента, написанного один раз и навсегда для всех схем баз данных. Идея состоит в том, что:
- в каждый момент времени на экране клиента представлена только одна таблица
[1]
- по щелчку на поле, ссылающемся на другую таблицу, экран клиента отображает другую таблицу. Будем называть этот переход
эстафетным переходом
[2]
- таблица в клиенте дополняется виртуальными полями (не существующими в таблице базы), которые являются виртуальными ссылками на таблицы, ссылающиеся на данную таблицу настоящими внешними ключами (виртуальных полей столько, сколько таблиц ссылается на данную). По щелчку на виртуальном поле экран клиента отображает другую таблицу, представленную данным виртуальным полем (таким образом клиент вынужден загрузить схему базы данных из ее системных таблиц чтобы знать, какие таблицы ссылаются на данную). Будем называть этот переход
множественным переходом
[3]
В клиенте можно редактировать записи, добавить новые, удалять записи
[4]. А нажатие
кнопки "Choice" на некоторой записи
после эстафетного перехода возвращает к отображению предыдущей таблицы и копированию первичного ключа выбранной записи в ссылающееся поле предыдущей записи. Такой подход позволяет
обойтись вообще без программиста - пользователь просто путешествует по базе данных, в которой ничего не запрограммировано
[5]. Для удобства пользователя:
- сразу после эстафетного перехода отображается только одна запись, на которую ссылались. Нажатие
кнопки "All" в меню программы-клиента отображает все записи таблицы, в которой находится данная запись, начиная с данной записи
[6] (можно сделать скроллинг вверх, посмотрев какие записи находятся до данной)
- сразу после множественного перехода отображаются только те записи, которые ссылались. Нажатие
кнопки "All" в меню программы-клиента отображает все записи таблицы, в которой находятся данные записи, причем последние будут выделены цветом
Таблица может быть отображена одним из трех способов: с подстановкой значения из другой таблицы вместо ссылающегося поля в
теле или в
заголовке таблицы, а при наличии ссылки из таблицы на саму себя - с демонстрацией ее как
таблицы или как
дерева (способ указывается в системной таблице
[7]).
Весь
период времени работы программы-клиента является одной длинной транзакцией. При выходе из программы она спросит, сохранить или откатить изменения, сделанные в течении ее работы. Кроме того,
каждый экран программы является точкой останова (savepoint) СУБД: нажимая
кнопку "Back", пользователь не только возвращается на предыдущий экран, но и откатывает все изменения, сделанные в последнем экране
[8]. Также для его удобства, программе-клиенту желательно:
- протоколировать все действия, совершаемые пользователем в экране - и иметь
кнопку "Next", чтобы выполнить их еще раз, если пользователь откатил транзакцию кнопкой "Back"
- иметь
кнопку "Commit", закрепляющую транзакцию в текущем состоянии
Пользователь создаст свою схему базы быстрее, чем настроит чужое ПО. А программировать для заполнения схемы вообще не нужно.
[1] Таблица отображается со скроллингом, колонка первичного ключа не демонстрируется. В системной таблице СУБД указана таблица, отображаемая сразу после загрузки программы-клиента - клиент считывает ее название из системной таблицы и запрашивает именно ее
[2] Термин берет свое происхождение со
с.9
pdf-документа
[3] Термин берет свое происхождение со
с.8
pdf-документа
[4] Таким образом программа-клиент должна иметь в своем меню кнопки "Add" и "Del"
[5] Поле представления (view) A ссылается на ту же самую колонку некой таблицы C, на которую ссылается поле таблицы B, вошедшее в представление
[6]
С.50
pdf-документа рассказывает подробнее о необходимой SQL-конструкции
select * from ... order by ... downward ... ;
[7] Способ отображения указывается для каждой таблицы в системной таблице СУБД. Если таблица должна быть представлена как дерево, и она имеет несколько полей, ссылающихся на нее саму, то поле, которое должно быть использовано для построения дерева, также указывается в системной таблице
[8] Программа-клиент расставляет точки останова в СУБД перед переходом к каждому следующему экрану. Кнопка "Choice" не откатывает транзакцию, т.е. не откатывает изменения, сделанные в окне (как сделанные сразу, так и сделанные после нажатия кнопки "All")
P.S.
Невидимость некоторых записей для оператора SELECT достигается введением в таблицу поля перечислимого (целого) типа и изложена подробно на
с.148, 187-190
pdf-документа и в отдельной
статье. Невидимость некоторых колонок таблицы для оператора SELECT достигается выражением вида "REVOKE select ON TABLE
tab/@fld TO username".
Предложения по реализации браузера, перемещающегося по схеме базы данных, вы можете видеть в следующих документах отдельного проекта:
Тюрин Дмитрий, dmitryturin@yandex.ru
Используются технологии
uCoz