Установка базы данных
=====================

Мы создали каркас приложения и закончили со структурой БД. В данном разделе мы
создадим саму базу и настроим подключение к ней.

Создание базы данных
--------------------

Для создания базы данных мы используем SQLite. Поскольку поддержка баз данных в
Yii основана на [PDO](http://www.php.net/manual/en/book.pdo.php), мы можем
легко переключаться между различными СУБД (например, MySQL, PostgreSQL) без
необходимости изменять наш код.

Создаем файл базы данных `blog.db` в директории `/wwwroot/blog/protected/data`.
И каталог и файл базы данных должны иметь возможность перезаписи процессом
Web-сервера, как этого требует SQLite. Мы можем просто скопировать файл базы
данных с демонстрационной версией блога из установленной копии Yii. Он расположен
в директории `/wwwroot/yii/demos/blog/protected/data/blog.db`. Чтобы создать базу
данных вручную, можно выполнить SQL-выражения из файла
`/wwwroot/yii/demos/blog/protected/data/schema.sqlite.sql`.

> Tip|Подсказка: Чтобы выполнить SQL-выражения, необходимо использовать инструмент
> командной строки `sqlite3`, который может быть найден на
> [официальном Web-сайте SQLite](http://www.sqlite.org/download.html).


Установка подключения к базе данных
-----------------------------------

Чтобы использовать базу данных блога в нашем приложении, необходимо задать
[конфигурацию приложения](/doc/guide/ru/basics.application#application-configuration),
которая находится в PHP-файле `/wwwroot/blog/protected/config/main.php`.
Код данного файла возвращает ассоциативный массив, содержащий пары имя-значение,
каждая из которых используется для инициализации доступных для записи свойств
[экземпляра приложения](/doc/guide/ru/basics.application).

Настроим компонент приложения `db` следующим образом:

~~~
[php]
return array(
	…
	'components'=>array(
		…
		'db'=>array(
			'connectionString'=>'sqlite:/wwwroot/blog/protected/data/blog.db',
			'tablePrefix'=>'tbl_',
		),
	),
	…
);
~~~

Конфигурация выше говорит, что
[компонент приложения](/doc/guide/ru/basics.application#application-component)
`db` является экземпляром класса [CDbConnection] со свойством
`connectionString`, начальное значение которого
`sqlite:/wwwroot/blog/protected/data/blog.db` и свойством `tablePrefix`
со значением `tbl_`.

Теперь мы можем использовать подключение к базе данных `Yii::app()->db` в любом
месте нашего кода. Заметим, что выражение
`Yii::app()` возвращает экземпляр приложения, который мы создаем во входном
сценарии. За более подробным описанием методов и свойств подключения к БД,
можно обратиться к [описанию его класса|CDbConnection]. Однако, в
большинстве случаев, подключение к БД используется не непосредственно, а через
[ActiveRecord](/doc/guide/ru/database.ar).

Остановимся подробнее на свойстве `tablePrefix`, которое мы использовали при
настройке. Данное свойство задаёт префикс `tbl_` для таблиц БД. То есть,
если имя таблицы в SQL-выражении заключено в двойные фигурные скобки
(например, `{{post}}`), то компонент `db`, перед тем, как отправить запрос СУБД,
преобразует его в имя таблицы с префиксом (например, `tbl_post`). Данная возможность
особенно полезна, если в будущем мы планируем изменить префикс таблиц без изменения
кода. К примеру, если мы разрабатываем CMS, мы можем использовать данную возможность,
чтобы при установке пользователь мог выбрать подходящий ему префикс.

> Tip|Подсказка: Если вы хотите использовать для хранения данных вместо SQLite
> СУБД MySQL, вы можете создать БД `blog`, используя SQL из файла
> `/wwwroot/yii/demos/blog/protected/data/schema.mysql.sql`. После этого измените
> настройки приложения следующим образом:
>
> ~~~
> [php]
> return array(
>     …
>     'components'=>array(
>         …
>         'db'=>array(
>             'connectionString' => 'mysql:host=localhost;dbname=blog',
>             'emulatePrepare' => true,
>             'username' => 'root',
>             'password' => '',
>             'charset' => 'utf8',
>             'tablePrefix' => 'tbl_',
>         ),
>     ),
> 	…
> );
> ~~~