Общая структура
===============

Основываясь на анализе требований, мы решили использовать для хранения данных
нашего приложения следующие таблицы:

 * `tbl_user` хранит пользовательскую информацию, включая имя пользователя и пароль;
 * `tbl_post` хранит информацию о записях блога:
	 - `title`: необходимо, заголовок записи;
	 - `content`: необходимо, содержимое записи в
[формате Markdown](http://daringfireball.net/projects/markdown/syntax);
	 - `status`: необходимо, статус записи. Может принимать значения:
		 * 1: запись находится в черновом варианте и читателям не видна;
		 * 2: запись опубликована;
		 * 3: запись с истёкшим сроком действия: не публикуется в общем списке, но
		  всё ещё доступна отдельно.
	 - `tags`: опционально. Список разделённых запятой тэгов, относящих запись к
той или иной категории;
 * `tbl_comment` хранит информацию о комментариях. Каждый комментарий
ассоциируется с некоторой записью и содержит следующие поля:
	 - `author`: необходимо, имя автора;
	 - `email`: необходимо, email автора;
	 - `url`: опционально, адрес веб-сайта автора;
	 - `content`: необходимо, текст комментария в текстовом формате;
	 - `status`: необходимо, статус комментария, показывающий, утвержден ли
комментарий (значение 2) или нет (значение 1);
 * `tbl_tag` хранит информацию о тегах записей и их количестве. Используется для
построения облака тегов. Таблица содержит следующие поля:
 	 - `name`: необходимо, уникальное имя тега;
 	 - `frequency`: необходимо, количество использований тега в записях.
 * `tbl_lookup` хранит информацию о текстовых синонимах целочисленных данных (кодов).
    Коды используются при разработке, синонимы непосредственно показываются
    пользователям. К примеру, мы используем целое число 1 для обозначения
    чернового статуса записи и строку `Черновик`, которую мы показываем пользователям.
    Таблица содержит следующие поля:
 	 - `name`: текстовое представление данных, отображаемое пользователю;
 	 - `code`: целочисленное представление данных;
 	 - `type`: тип данных;
 	 - `position`: порядковый номер для данных одного типа.

Следующая диаграмма сущность-связь (ER) показывает структуру таблиц и
связей между ними.

![Диаграмма сущность-связь БД системы управления блогом](schema.png)


> Info|Информация: Мы называем все таблицы и их поля в нижнем регистре так как
> различные СУБД воспринимают регистр по-разному.
>
> Также мы используем префикс `tbl_`. Сделано это по двум причинам.
> Во-первых, префикс позволяет хранить данные нескольких приложений в одной БД,
> что часто приходится делать в условиях виртуального хостинга. Во-вторых,
> использование префиксов уменьшает вероятность совпадения имён таблиц
> с зарезервированными ключевыми словами СУБД.

SQL, соответствующий ER-диаграмме выше, вы можете найти в
[демо-блоге](http://www.yiiframework.com/demos/blog/). В установленной копии
фреймворка они находятся в файле `/wwwroot/yii/demos/blog/protected/data/schema.sqlite.sql`.


Мы разделили разработку нашего приложения на несколько основных этапов:

 * Этап 1: создание прототипа системы управления блогом. Он должен содержать
большую часть требуемой функциональности;
 * Этап 2: управление записями: создание, удаление, отображение
записей списком, отображение отдельной записи;
 * Этап 3: управление комментариями: создание, обновление,
удаление, показ списком и утверждение комментариев к записям;
 * Этап 4: реализация портлетов: меню пользователя, формы
входа, облака тегов и недавних комментариев;
 * Этап 5: финальная оптимизация и развертывание.