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