| 1 | ### |
|---|
| 2 | # $Date$ |
|---|
| 3 | # $Author$ |
|---|
| 4 | # $Revision$ |
|---|
| 5 | # $URL$ |
|---|
| 6 | ### |
|---|
| 7 | |
|---|
| 8 | ### |
|---|
| 9 | # |
|---|
| 10 | # схема хранилища MySQL |
|---|
| 11 | # |
|---|
| 12 | ### |
|---|
| 13 | |
|---|
| 14 | SET NAMES utf8; |
|---|
| 15 | |
|---|
| 16 | CREATE DATABASE IF NOT EXISTS `avalon` DEFAULT CHARACTER SET utf8; |
|---|
| 17 | |
|---|
| 18 | USE `avalon`; |
|---|
| 19 | |
|---|
| 20 | CREATE TABLE `broken` |
|---|
| 21 | ( |
|---|
| 22 | `id_message` INT NOT NULL COMMENT 'id топика/сообщения', |
|---|
| 23 | `is_topic` TINYINT(1) NOT NULL COMMENT 'флаг того, что это топик, а не сообщение', |
|---|
| 24 | |
|---|
| 25 | PRIMARY KEY (`id_message`) |
|---|
| 26 | |
|---|
| 27 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='список поломанных топиков/сообщений'; |
|---|
| 28 | |
|---|
| 29 | CREATE TABLE `forum` |
|---|
| 30 | ( |
|---|
| 31 | `id` INT NOT NULL COMMENT 'id', |
|---|
| 32 | `id_group` INT NOT NULL COMMENT 'id группы форумов', |
|---|
| 33 | `short_name` VARCHAR(64) NOT NULL COMMENT 'короткое имя форума', |
|---|
| 34 | `name` VARCHAR(128) NOT NULL COMMENT 'полное имя форума', |
|---|
| 35 | `rated` INT NOT NULL COMMENT 'оценивается ли форум', |
|---|
| 36 | `in_top` INT NOT NULL COMMENT 'участвует ли оценки этого форума в топе', |
|---|
| 37 | `rate_limit` INT NOT NULL COMMENT 'лимит оценки в форуме', |
|---|
| 38 | |
|---|
| 39 | PRIMARY KEY (`id`) |
|---|
| 40 | |
|---|
| 41 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='список форумов'; |
|---|
| 42 | |
|---|
| 43 | CREATE TABLE `group` |
|---|
| 44 | ( |
|---|
| 45 | `id` INT NOT NULL COMMENT 'id', |
|---|
| 46 | `name` VARCHAR(100) NOT NULL COMMENT 'наименование группы', |
|---|
| 47 | `sort_order` INT NOT NULL COMMENT 'порядок сортировки', |
|---|
| 48 | |
|---|
| 49 | PRIMARY KEY (`id`) |
|---|
| 50 | |
|---|
| 51 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='список групп форумов'; |
|---|
| 52 | |
|---|
| 53 | CREATE TABLE `message` |
|---|
| 54 | ( |
|---|
| 55 | `id` INT NOT NULL COMMENT 'id сообщения', |
|---|
| 56 | `id_topic` INT NOT NULL COMMENT 'id темы', |
|---|
| 57 | `id_parent` INT NOT NULL COMMENT 'id родительского сообщения', |
|---|
| 58 | `id_user` INT NOT NULL COMMENT 'id автора', |
|---|
| 59 | `id_forum` INT NOT NULL COMMENT 'id форума', |
|---|
| 60 | `subject` VARCHAR(128) NOT NULL COMMENT 'тема сообщения', |
|---|
| 61 | `message_name` VARCHAR(160) NOT NULL COMMENT 'имя сообщения', |
|---|
| 62 | `user_nick` VARCHAR(100) NOT NULL COMMENT 'имя автора сообщения', |
|---|
| 63 | `message` LONGBLOB NOT NULL COMMENT 'текст сообщения', |
|---|
| 64 | `id_article` INT NOT NULL COMMENT 'id статьи, если сообщение является статьей или 0', |
|---|
| 65 | `message_date` DATETIME NOT NULL COMMENT 'дата создания сообщения', |
|---|
| 66 | `update_date` DATETIME NOT NULL COMMENT 'дата обновления сообщения или 0', |
|---|
| 67 | `user_role` VARCHAR(50) NOT NULL COMMENT 'статус автора сообщения', |
|---|
| 68 | `user_title` VARCHAR(100) NOT NULL COMMENT 'повязка пользователя', |
|---|
| 69 | `user_title_color` INT NOT NULL COMMENT 'цвет повязки пользователя', |
|---|
| 70 | `last_moderated` DATETIME NOT NULL COMMENT 'дата последнего переноса сообщения', |
|---|
| 71 | `closed` TINYINT(1) NOT NULL COMMENT 'флаг закрытия темы', |
|---|
| 72 | `has_child` TINYINT(1) NOT NULL COMMENT 'флаг наличия дочерних сообщений', |
|---|
| 73 | `compressed` TINYINT(1) NOT NULL COMMENT 'флаг сжатия тела сообщения', |
|---|
| 74 | |
|---|
| 75 | PRIMARY KEY (`id`), |
|---|
| 76 | |
|---|
| 77 | KEY `ix_id_topic` (`id_topic`), |
|---|
| 78 | KEY `ix_id_parent` (`id_parent`), |
|---|
| 79 | KEY `ix_id_user` (`id_user`), |
|---|
| 80 | KEY `ix_id_forum` (`id_forum`), |
|---|
| 81 | KEY `ix_message_date` (`message_date`) |
|---|
| 82 | |
|---|
| 83 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='сообщения'; |
|---|
| 84 | |
|---|
| 85 | CREATE TABLE `message2send` |
|---|
| 86 | ( |
|---|
| 87 | `id` INT NOT NULL COMMENT 'id сообщения (локальный)', |
|---|
| 88 | `id_parent` INT NOT NULL COMMENT 'id родителя', |
|---|
| 89 | `id_forum` INT NOT NULL COMMENT 'id форума', |
|---|
| 90 | `subject` VARCHAR(128) NOT NULL COMMENT 'тема', |
|---|
| 91 | `message` LONGTEXT NOT NULL COMMENT 'текст сообщения', |
|---|
| 92 | `date` DATETIME NOT NULL COMMENT 'дата и время занесения', |
|---|
| 93 | `draft` TINYINT(1) NOT NULL COMMENT 'флаг черновика', |
|---|
| 94 | |
|---|
| 95 | PRIMARY KEY (`id`) |
|---|
| 96 | |
|---|
| 97 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='сообщения к отправке'; |
|---|
| 98 | |
|---|
| 99 | CREATE TABLE `message_topic` |
|---|
| 100 | ( |
|---|
| 101 | `id_message` INT NOT NULL COMMENT 'id сообщения', |
|---|
| 102 | `id_forum` INT NOT NULL COMMENT 'id форума', |
|---|
| 103 | `message_date` DATETIME NOT NULL COMMENT 'дата создания сообщения', |
|---|
| 104 | |
|---|
| 105 | PRIMARY KEY (`id_message`), |
|---|
| 106 | |
|---|
| 107 | KEY `ix_id_forum` (`id_forum`), |
|---|
| 108 | |
|---|
| 109 | CONSTRAINT `fk_message_topic_message` FOREIGN KEY (`id_message`) REFERENCES `message` (`id`) ON DELETE CASCADE ON UPDATE CASCADE |
|---|
| 110 | |
|---|
| 111 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='список топиков'; |
|---|
| 112 | |
|---|
| 113 | CREATE TABLE `moderate` |
|---|
| 114 | ( |
|---|
| 115 | `id_message` INT NOT NULL COMMENT 'id сообщения', |
|---|
| 116 | `id_topic` INT NOT NULL COMMENT 'id топика', |
|---|
| 117 | `id_user` INT NOT NULL COMMENT 'id пользователя', |
|---|
| 118 | `id_forum` INT NOT NULL COMMENT 'id форума', |
|---|
| 119 | `created` DATETIME NOT NULL COMMENT 'дата', |
|---|
| 120 | |
|---|
| 121 | PRIMARY KEY (`id_message`,`id_user`) |
|---|
| 122 | |
|---|
| 123 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='таблица бомбочек'; |
|---|
| 124 | |
|---|
| 125 | CREATE TABLE `moderate2send` |
|---|
| 126 | ( |
|---|
| 127 | `id` INT NOT NULL COMMENT 'id (локальный)', |
|---|
| 128 | `id_message` INT NOT NULL COMMENT 'id сообщения', |
|---|
| 129 | `action` VARCHAR(32) NOT NULL COMMENT 'действие {MoveMessage, DeleteMessage, DeleteThread, DeleteErrorMessage, SplitThread, CloseTopic, OpenTopic}', |
|---|
| 130 | `id_forum` INT NOT NULL COMMENT 'id форума для перемещения', |
|---|
| 131 | `description` LONGTEXT NOT NULL COMMENT 'описание', |
|---|
| 132 | `as_moderator` TINYINT(1) NOT NULL COMMENT 'флаг "как модератор"', |
|---|
| 133 | `date` DATETIME NOT NULL COMMENT 'дата добавления', |
|---|
| 134 | |
|---|
| 135 | PRIMARY KEY (`id`) |
|---|
| 136 | |
|---|
| 137 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='модерилки к отправке'; |
|---|
| 138 | |
|---|
| 139 | CREATE TABLE `rating` |
|---|
| 140 | ( |
|---|
| 141 | `id_message` INT NOT NULL COMMENT 'id сообщения', |
|---|
| 142 | `id_topic` INT NOT NULL COMMENT 'id топика', |
|---|
| 143 | `id_user` INT NOT NULL COMMENT 'id пользователя', |
|---|
| 144 | `user_rating` INT NOT NULL COMMENT 'рейтинг пользователя', |
|---|
| 145 | `rate` INT NOT NULL COMMENT 'оценка', |
|---|
| 146 | `rate_date` DATETIME NOT NULL COMMENT 'дата', |
|---|
| 147 | |
|---|
| 148 | PRIMARY KEY (`id_message`,`id_user`) |
|---|
| 149 | |
|---|
| 150 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='таблица рейтинга'; |
|---|
| 151 | |
|---|
| 152 | |
|---|
| 153 | CREATE TABLE `rating2send` |
|---|
| 154 | ( |
|---|
| 155 | `id` INT NOT NULL COMMENT 'id (локальный)', |
|---|
| 156 | `id_message` INT NOT NULL COMMENT 'id сообщения', |
|---|
| 157 | `rate` INT NOT NULL COMMENT 'рейтинг', |
|---|
| 158 | `date` DATETIME NOT NULL COMMENT 'дата добавления', |
|---|
| 159 | |
|---|
| 160 | PRIMARY KEY (`id`) |
|---|
| 161 | |
|---|
| 162 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='рейтинг к отправке'; |
|---|
| 163 | |
|---|
| 164 | CREATE TABLE `row_version` |
|---|
| 165 | ( |
|---|
| 166 | `key` VARCHAR(100) NOT NULL COMMENT 'ключ версии', |
|---|
| 167 | `value` VARCHAR(100) NOT NULL COMMENT 'значение версии', |
|---|
| 168 | |
|---|
| 169 | PRIMARY KEY (`key`) |
|---|
| 170 | |
|---|
| 171 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='версии данных'; |
|---|
| 172 | |
|---|
| 173 | CREATE TABLE `subscribed` |
|---|
| 174 | ( |
|---|
| 175 | `id_forum` INT NOT NULL COMMENT 'id форума', |
|---|
| 176 | `is_first` TINYINT(1) NOT NULL COMMENT 'была ли раньше подписка на форум true - нет, false - да', |
|---|
| 177 | |
|---|
| 178 | PRIMARY KEY (`id_forum`) |
|---|
| 179 | |
|---|
| 180 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='список форумов, на которые подписан пользователь'; |
|---|
| 181 | |
|---|
| 182 | CREATE TABLE `unread` |
|---|
| 183 | ( |
|---|
| 184 | `id_message` INT NOT NULL COMMENT 'id непрочитанного сообщения', |
|---|
| 185 | `id_parent` INT NOT NULL COMMENT 'id родительского сообщения', |
|---|
| 186 | `id_forum` INT NOT NULL COMMENT 'id форума', |
|---|
| 187 | `id_topic` INT NOT NULL COMMENT 'id топика', |
|---|
| 188 | `id_parent_user` INT NOT NULL COMMENT 'id пользователя, которому идет ответ', |
|---|
| 189 | `message_date` DATETIME NOT NULL COMMENT 'дата отправки сообщения', |
|---|
| 190 | |
|---|
| 191 | PRIMARY KEY (`id_message`) |
|---|
| 192 | |
|---|
| 193 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='список непрочитанных сообщений'; |
|---|
| 194 | |
|---|
| 195 | CREATE TABLE `user` |
|---|
| 196 | ( |
|---|
| 197 | `id` INT NOT NULL COMMENT 'id пользователя', |
|---|
| 198 | `name` VARCHAR(60) NOT NULL COMMENT 'логин пользователя', |
|---|
| 199 | `nick` VARCHAR(100) NOT NULL COMMENT 'псевдоним пользователя', |
|---|
| 200 | `real_name` VARCHAR(80) NOT NULL COMMENT 'реальное имя пользователя', |
|---|
| 201 | `email` VARCHAR(60) NOT NULL COMMENT 'публичный email пользователя', |
|---|
| 202 | `homepage` VARCHAR(120) NOT NULL COMMENT 'домашняя страница', |
|---|
| 203 | `specialization` VARCHAR(100) NOT NULL COMMENT 'специализация', |
|---|
| 204 | `where_from` VARCHAR(100) NOT NULL COMMENT 'откуда', |
|---|
| 205 | `origin` VARCHAR(258) NOT NULL COMMENT 'подпись', |
|---|
| 206 | |
|---|
| 207 | PRIMARY KEY (`id`), |
|---|
| 208 | |
|---|
| 209 | KEY `ix_name` (`name`) |
|---|
| 210 | |
|---|
| 211 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='список пользователей'; |
|---|
| 212 | |
|---|
| 213 | CREATE TABLE `version` |
|---|
| 214 | ( |
|---|
| 215 | `key` VARCHAR(100) NOT NULL COMMENT 'ключ версии', |
|---|
| 216 | `value` VARCHAR(100) NOT NULL COMMENT 'значение версии', |
|---|
| 217 | |
|---|
| 218 | PRIMARY KEY (`key`) |
|---|
| 219 | |
|---|
| 220 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='версии хранилища'; |
|---|