CONTENT MANAGEMENT SYSTEM
Blox Logo
Blox CMS — блочный метод сайтостроения
.
 
Blox Help

←→

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

Когда какой-либо шаблон назначается на сайте в первый раз, то в базе данных 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, система автоматически изменит таблицу базы данных согласно новому определению (только если вы войдете на сайт в режиме администратора).

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


См. также