Fork me on GitHub

База данных информационной системы 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 - идентификатор записи из таблицы, к которой установлена связь.