Когда какой-либо шаблон назначается на сайте в первый раз, то в базе данных MySQL для хранения редактируемых данных создается таблица. В качестве определения столбцов (column definitions) используются элементы массива $types.
Именно массив $types и определяет, какой будет таблица, другие переменные в дескрипторе, с которыми мы работали до сих пор ($titles, defaults и $params), на структуру таблицы не влияют.
В данной статье вы познакомитесь с двумя переменными, которые позволяют сделать более тонкую настройку таблицы. Это переменная $keys, с помощью которой, в таблице можно создать ключи (индексы), и переменная $options, устанавливающая различные опции для всей таблицы.
Как работают переменные $keys, $options, а также массив $types, будет легче понять, если посмотреть на sql-выражение, с помощью которого система создает таблицы для данных, например, для шаблона articles:
Код для создания таблицы для данных шаблона articles
<?php
mysql_query
("
CREATE TABLE $articles
(
`rec-id` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0,
dat1 $types[1],
dat2 $types[2],
dat3 $types[3],
`block-id` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0,
INDEX (`rec-id`),
INDEX (`block-id`),
$keys
)
$options
");
?>
Посмотрим, как применяются эти переменные $keys и $options. Допустим, у нас имеется шаблон articles с полями для имени автора, для заголовка статьи и для самой статьи. Попытаемся увеличить производительность сайта для некоторых условий (условия см. ниже кода).
articles.tdd<?php
$titles[1] = 'Автор';
$titles[2] = 'Заголовок';
$titles[3] = 'Текст статьи';
$types[1] = 'VARCHAR(255)';
$types[2] = 'VARCHAR(255)';
$types[3] = 'TEXT';
$params['multi-record'] = true;
$keys = 'INDEX(dat1), UNIQUE(dat2)';
// Обратите внимание, что используются имена стобцов, а не номера полей!
$options = 'ENGINE MyISAM';
?>
Для чего в этом примере нужна строка
$keys = "INDEX(dat1), UNIQUE(dat2)";
Допустим, нам известно, что к полю 1 (Автор) производятся pick-запросы, то есть, посетители смотрят записи, только по определенным авторам. Для ускорения выборки, это поле нужно сделать ключевым с помощью определения INDEX(dat1).
Вторая часть определения: UNIQUE(dat2), устанавливает ограничение, чтобы значения поля 2 (Заголовок) были уникальными. Теперь в блоке будет невозможно создать статью с повторяющимся заголовком.
Упрощенный список всех определений ключей (без использования имен ключей):
Индексировать, как правило, необходимо столбцы, на которые ставятся условия ON и WHERE.
Строка: $options = "ENGINE MyISAM"; из нашего примера явно назначает для таблицы движок MyISAM, который будет более предпочтительным, при условии, что у данного блока много читателей, но небольшое число авторов.
Чтобы детально рассмотреть все значения, которые могут принимать переменные $keys и $options, рекомендуем обратиться к статье CREATE TABLE Syntax из официальной документации по MySQL.
Определения ключей и опции таблицы можно всегда изменить, даже на уже созданном сайте. При этом, как и в случае с массивом $types, система автоматически изменит таблицу базы данных согласно новому определению (только если вы войдете на сайт в режиме администратора).
Определения ключей и опций таблицы можно конечно сделать и в базе данных, но тогда ухудшится переносимость шаблона.