Дополнительные настройки таблиц данных

Когда какой-либо шаблон назначается на сайте в первый раз, то в базе данных 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
    ");
?>
  • В имени таблицы ($articles) опущен префикс.
  • Кроме столбцов для данных шаблона, система создает еще два столбца, а именно: столбец `rec-id` для идентификаторов записей и столбец `block-id` для идентификаторов блоков, а также ключи для этих столбцов.

Посмотрим, как применяются эти переменные $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 – список определений ключей

Для чего в этом примере нужна строка
$keys = "INDEX(dat1), UNIQUE(dat2)";

Допустим, нам известно, что к полю 1 (Автор) производятся pick-запросы, то есть, посетители смотрят записи, только по определенным авторам. Для ускорения выборки, это поле нужно сделать ключевым с помощью определения INDEX(dat1).

Вторая часть определения: UNIQUE(dat2), устанавливает ограничение, чтобы значения поля 2 (Заголовок) были уникальными. Теперь в блоке будет невозможно создать статью с повторяющимся заголовком.

Упрощенный список всех определений ключей (без использования имен ключей):

PRIMARY KEY (..., ...,),
INDEX (..., ...,),
UNIQUE INDEX (..., ...,),
FULLTEXT INDEX (..., ...,),
SPATIAL INDEX (..., ...,),
FOREIGN KEY (..., ...,)

Индексировать, как правило, необходимо столбцы, на которые ставятся условия ON и WHERE.

$options – список опций таблицы

Строка: $options = "ENGINE MyISAM"; из нашего примера явно назначает для таблицы движок MyISAM, который будет более предпочтительным, при условии, что у данного блока много читателей, но небольшое число авторов.


Чтобы детально рассмотреть все значения, которые могут принимать переменные $keys и $options, рекомендуем обратиться к статье CREATE TABLE Syntax из официальной документации по MySQL.

Определения ключей и опции таблицы можно всегда изменить, даже на уже созданном сайте. При этом, как и в случае с массивом $types, система автоматически изменит таблицу базы данных согласно новому определению (только если вы войдете на сайт в режиме администратора).

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


См. также