База данных информационной системы Eonza
Рассмотрим как организовано хранение всей служебной информации в информационной системе Eonza. Так как Eonza, в первую очередь, является персональной системой, то мы рекомендуем для хранилища Eonza создавать отдельную базу данных. По умолчанию, имена всех системных таблиц начинаются с префикса enz_. С этого же префикса начинаются имена пользовательских таблиц без алиаса, но в этом случае указываются числовые идентификаторы, например, enz_11.
enz_db
enz_db является главной системной таблицей.
CREATE TABLE IF NOT EXISTS `enz_db` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `pass` char(32) NOT NULL, `ctime` datetime NOT NULL, `settings` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Первое поле id является автоинкрементным уникальным идентификатором. Это поле имеется во всех таблицах и далее мы будем пропускать его. Таблица enz_db состоит только из одной записи с идентификатором 1.
pass - результат функции pass_md5( 'password', true ) от случайно сгенерированного пароля. Сам пароль хранится в conf.inc.php как константа CONF_PSW.
ctime - время создания таблицы. Как правило, совпадает со временем установки системы.
settings - настройки системы в JSON формате. Здесь, в том числе, хранятся настройки Eonza.
enz_tables
В этой таблице хранится информация о существующих таблицах пользователя в информационном хранилище.
CREATE TABLE IF NOT EXISTS `enz_tables` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `_uptime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `_owner` smallint(5) unsigned NOT NULL, `title` varchar(128) NOT NULL, `comment` varchar(128) NOT NULL, `alias` varchar(24) NOT NULL, `idparent` int(10) unsigned NOT NULL, `isfolder` tinyint(3) unsigned NOT NULL, `istree` tinyint(3) unsigned NOT NULL, PRIMARY KEY (`id`), KEY `idparent` (`idparent`,`isfolder`,`title`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
_uptime - время последнего изменения записи.
_owner - идентификатор пользователя, кто создал данную запись. Следует заметить, что такие же три поля: id, _uptime, _owner автоматически создаются у каждой пользовательской таблицы.
title - заголовок таблицы.
comment - комментарий, краткое описание таблицы.
alias - алиас таблицы.
idparent - таблица enz_tables имеет иерархическую структуру, таблицы могут быть распределены по папкам. Данное поле указывает на идентификатор родительской папки. Если 0, то таблица находится на верхнем уровне.
isfolder - если 1, то данная запись содержит информацию о папке, а не о таблице.
istree - если 1, то таблица имеет иерархическую структуру. В этом случае, у таблицы имеется еще дополнительное поле _parent.
enz_columns
В таблице enz_columns содержится информация о колонках всех пользовательских таблиц. Одна запись хранит информацию об одном поле таблицы.
CREATE TABLE IF NOT EXISTS `enz_columns` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `idtable` smallint(5) unsigned NOT NULL, `idtype` tinyint(3) unsigned NOT NULL, `title` varchar(96) NOT NULL, `comment` varchar(128) NOT NULL, `sort` smallint(5) unsigned NOT NULL, `alias` varchar(24) NOT NULL, `visible` tinyint(3) unsigned NOT NULL, `align` tinyint(3) unsigned NOT NULL, `extend` varchar(250) NOT NULL, PRIMARY KEY (`id`), KEY `idtable` (`idtable`,`sort`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
idtable - идентификатор таблицы-хозяина из enz_tables.
idtype - тип поля. Список типов можно найти в файле lib/fields.php - константы FT_*.
title - заголовок поля.
comment - комментарий, краткое описание поля.
sort - поля упорядочиваются по значению этого поля в сторону увеличения.
alias - имя колонки в таблице базы данных. Если не указан, то имя колонки равно идентификатору.
visible - если 1, то колонка будет показываться при табличном режиме отображения.
align - выравнивание значения в ячейке таблицы. 1 - влево, 2 - по центру, 3 - вправо.
extend - дополнительные параметры поля. Они зависят от типа поля idtype. Параметры хранятся в JSON формате и совпадают с параметрами типов данных.
enz_sets
В таблице enz_sets хранятся все записи множеств.
CREATE TABLE IF NOT EXISTS `enz_sets` ( `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, `_owner` smallint(5) unsigned NOT NULL, `_uptime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `idset` smallint(5) unsigned NOT NULL, `iditem` tinyint(3) unsigned NOT NULL, `title` varchar(48) NOT NULL, PRIMARY KEY (`id`), KEY `idset` (`idset`,`iditem`), KEY `idsetname` (`idset`,`title`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
idset - указывает идентификатор множества, которому принадлежит данная запись. Если это значение равно 0, то данная запись содержит название самого множества. Таким образом, если мы сделаем выборку элементов с idset равным 0, то получим список множеств.
iditem - идентификатор элемента. Так как множество не может содержать больше 32 элементов, то и значение этого идентификатора может меняться только от 1 до 32.
title - наименование элемента. Если idset равен 0, то это поле содержит наименование множества.
enz_menu
Таблица enz_menu служит для хранения элементов горизонтального меню.
CREATE TABLE IF NOT EXISTS `enz_menu` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(64) NOT NULL, `sort` int(11) NOT NULL, `url` varchar(128) NOT NULL, `hint` varchar(128) NOT NULL, `idparent` int(10) unsigned NOT NULL, `isfolder` tinyint(3) unsigned NOT NULL, PRIMARY KEY (`id`), KEY `idparent` (`idparent`,`sort`,`title`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
title - текст пункта меню.
sort - число, определяющее порядок элементов меню. Элементы меню сортируются по возрастанию данного значения.
url - ссылка для перехода, при выборе данного элемента меню.
hint - подсказка, которая показывается при наведении курсора мыши.
idparent - идентификатор владельца данного элемента. Так как меню имеет древовидную структуру, то это поле указывает на хозяина элемента. Если idparent равно 0, то значит элемент меню находится на верхнем уровне.
isfolder - если 1, то текущая запись является папкой, которая содержит другие элементы меню.
enz_log
В таблицу enz_log записываются действия пользователя с таблицами базы данных. Если вы хотите вести такую запись, то включите поддержку лог-файла в настройках. Каждая запись в лог-таблице обозначает одно действие. Следует заметить, что данная таблица не хранит удаленную или измененную информацию, а служит только для отслеживания самого факта внесенных изменений.
CREATE TABLE IF NOT EXISTS `enz_log` ( `idtable` smallint(5) unsigned NOT NULL, `idrow` int(10) unsigned NOT NULL, `iduser` smallint(5) unsigned NOT NULL, `uptime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `action` set('create','edit','delete','') NOT NULL, KEY `uptime` (`uptime`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
idtable - идентификатор таблицы из enz_tables.
idrow - идентификатор записи над которой произошло действие.
iduser - идентификатор пользователя из enz_users, кто произвел изменения указанной записи.
uptime - время, когда были произведены изменения.
action - тип действия (создание, редактирование, удаление).
enz_onemany
В таблицу enz_onemany записываются значения полей Связь с таблицей у которых отмечен множественный выбор. Следует отметить, что если выбран только один элемент, то он хранится в главной таблице. В этой дополнительной таблице хранятся следующие выбранные элементы. Например, в основной таблице у элемента с id=100 в поле с idcolumn=20 были выбраны элементы с идентификаторами 10, 14, 15 из таблицы, к которой установлена связь. В этом случае, 10 хранится в основной таблице, а для хранения 14 и 15 будут добавлены две записи [idcolumn, iditem, idmulti] в таблице enz_onemany [20, 100, 14] и [ 20, 100, 15].
CREATE TABLE IF NOT EXISTS `enz_onemany` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `idcolumn` smallint(5) unsigned NOT NULL, `iditem` int(10) unsigned NOT NULL, `idmulti` int(10) unsigned NOT NULL, PRIMARY KEY (`id`), KEY `idcolumn` (`idcolumn`,`iditem`), KEY `idcolumn_2` (`idcolumn`,`idmulti`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
idcolumn - идентификатор колонки с типом Связь с таблицей из таблицы из enz_columns.
iditem - идентификатор записи основной таблицы.
idmulti - идентификатор записи из таблицы, к которой установлена связь.