Для уменьшения нагрузки на БД и упрощения доступа к часто запращиваемым данным, которые опять же требуют определённых ресурсов и итераций для просчёта, в модуле используются дополнительные MySQL таблицы.
Рассмотрим структуру каждой из них на примере SQL запросов, которые создают таблицы. Запросы можно использовать для восстановления таблиц (без данных).
В этой таблице хранятся данные форумов о количестве топиков, ответов на топики, идентификаторы последних топиков и ответов.
CREATE TABLE `Forum_Count` (
`ID` int(11) unsigned NOT NULL auto_increment,
`Subdivision_ID` int(11) unsigned NOT NULL default '0',
`Topics` int(11) unsigned NOT NULL default '0',
`Replies` int(11) unsigned NOT NULL default '0',
`Last_Topic_ID` int(10) unsigned NOT NULL default '0',
`Last_Reply_ID` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`ID`),
KEY `Subdivision_ID` (`Subdivision_ID`),
KEY `Last_Topic_ID` (`Last_Topic_ID`),
KEY `Last_Reply_ID` (`Last_Reply_ID`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
В этой таблице хранятся данные о категориях форумов. Данные из этой таблицы можно использовать при выводе всех категорий форумов.
CREATE TABLE `Forum_Groups` (
`ID` int(10) unsigned NOT NULL auto_increment,
`Subdivision_ID` int(10) unsigned default NULL,
`Name` varchar(255) NOT NULL,
`Description` text NOT NULL,
`Priority` int(10) default NULL,
PRIMARY KEY (`ID`),
KEY `Parent_ID` (`Subdivision_ID`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
В этой таблице хранятся данные соответствия корневых разделов форумов и самих форумов их разделам в системе. Таблица небольшая, но весьма информативная. Данные из этой таблицы можно использовать при выводе всех разделов форума.
CREATE TABLE `Forum_Subdivisions` (
`ID` int(10) unsigned NOT NULL auto_increment,
`Subdivision_ID` int(10) unsigned NOT NULL default '0',
`Sub_Class_ID` int(10) unsigned NOT NULL default '0',
`Type` enum('parent','forum') NOT NULL default 'parent',
`Group_ID` int(10) unsigned NOT NULL,
`Description` text NOT NULL,
PRIMARY KEY (`ID`),
KEY `Subdivision_ID` (`Subdivision_ID`),
KEY `Sub_Class_ID` (`Sub_Class_ID`),
KEY `Group_ID` (`Group_ID`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
В этой таблице хранятся данные топиков о количестве ответов на них и идентификаторы последних ответов.
CREATE TABLE `Forum_Topics` (
`ID` int(10) unsigned NOT NULL auto_increment,
`Subdivision_ID` int(10) unsigned NOT NULL default '0',
`Topic_ID` int(10) unsigned NOT NULL default '0',
`Replies` int(10) unsigned NOT NULL default '0',
`Last_Reply_ID` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`ID`),
KEY `Subdivision_ID` (`Subdivision_ID`),
KEY `Topic_ID` (`Topic_ID`),
KEY `Last_Reply_ID` (`Last_Reply_ID`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;