Для уменьшения нагрузки на БД и упрощения доступа к часто запращиваемым данным, которые опять же требуют определённых ресурсов и итераций для просчёта, в модуле используются дополнительные 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;