In-Portal Developers Guide

This is a wiki-based Developers Guide for In-Portal Open Source CMS. The purpose of this guide is to provide advanced users, web developers and programmers with documentation on how to expand, customize and improve the functionality and the code the In-Portal software. Please consider contributing to our documentation writing effort.

K4:Работа с базой данных

From In-Portal Developers Guide

(Difference between revisions)
Jump to: navigation, search
m (категория)
Current revision (08:12, 25 August 2015) (view source)
(Добавление колонок в таблицу)
 
(3 intermediate revisions not shown.)
Line 53: Line 53:
== Добавление колонок в таблицу ==
== Добавление колонок в таблицу ==
При добавлении колонок в таблицы следует придерживаться следующих правил в указании опций колонок исходя из содержания будущей колонки:
При добавлении колонок в таблицы следует придерживаться следующих правил в указании опций колонок исходя из содержания будущей колонки:
-
* сумма (деньги) - тип '''<code>DECIMAL(10,2)</code>''' и '''<code>NOT NULL</code>'''
+
* сумма (деньги) - тип '''<code>DECIMAL(20,2)</code>''' и '''<code>NOT NULL</code>'''
* дата (timestamp) - тип '''<code>INT(11)</code>''' и '''<code>NULL</code>'''
* дата (timestamp) - тип '''<code>INT(11)</code>''' и '''<code>NULL</code>'''
-
* короткий текст (имя/фамилия) - '''<code>VARCHAR(255)</code>''' и '''<code>NOT NULL</code>'''
+
* короткий текст (имя/фамилия, до 8KB) - '''<code>VARCHAR(255)</code>''' и '''<code>NOT NULL</code>'''
-
* текст средней длинны (описание, от 255 байт и до 64KB) - '''<code>TEXT</code>''' и '''<code>NULL</code>'''
+
* текст средней длинны (описание, от 8KB байт и до 64KB) - '''<code>TEXT</code>''' и '''<code>NULL</code>'''
* длинный текст (описание, от 64KB и до 4MB) - '''<code>LONGTEXT</code>''' и '''<code>NULL</code>'''
* длинный текст (описание, от 64KB и до 4MB) - '''<code>LONGTEXT</code>''' и '''<code>NULL</code>'''
Line 68: Line 68:
{{InfoBox|В каждой таблице должен быть '''основной ключ''' (primary key). Этот ключ всегда должен состоять из '''одной цифровой колонки''' и не должен быть <code>UNSIGNED</code>.}}
{{InfoBox|В каждой таблице должен быть '''основной ключ''' (primary key). Этот ключ всегда должен состоять из '''одной цифровой колонки''' и не должен быть <code>UNSIGNED</code>.}}
 +
 +
=== Значение по умолчанию ===
 +
Значение по умолчанию должно явно указано в декларации поля добавлением <code>DEFAULT ...</code> части в SQL.
=== Использование слова NULL ===
=== Использование слова NULL ===

Current revision

База данных База данных
Статьи в этой категории

Contents

При работе с базой данных следует использовать экземпляр класса kDBConnection доступный через атрибут Conn почти у каждого класса. В общем случае это выглядит так:

$result = $this->Conn->MethodName($params);

Вместо MethodName можно использовать методы описанные далее. Универсальная проверка на присутствие данных в ответе на запрос может выглядеть так:

if ($result) {
	// код будет выполнен только в случае удачного
	// завершения запроса и при наличии данных
}
Image:Infobox Icon.gif При изменении данных в базе в ручную не забывайте изменять данные в связанных таблицах, иначе может нарушится целостность данных (data integrity) в базе.

Выборка данных из базы

название метода описание метода
GetOne (mixed) Возвращает первое поля первого ряда из запроса.
GetRow (array) Возвращает первый ряд запроса.
GetCol (array) Возвращает первую колонку из запроса.
Query (array) Выбирает все записи из базы под данному sql запросу.

При неудачной выборке будет возвращён false или пустой массив.

Обработка результатов запроса

название метода описание метода
getInsertID (int) Получить ID (из колонки autoincrement типа) от последней вставленной записи.
getAffectedRows (int) Вернуть количество рядов, которые изменил/выбрал запрос.
qstr (string) Экранировать строку для вставки в sql запрос (также ставит апострофы вокруг строки).
TableFound (boolean) Узнать есть-ли таблица в базе данных.

Изменение данных в базе

название метода описание метода
doInsert Вставит данные из ассоциативного массива.
doUpdate Обновить данные из ассоциативного массива.

Добавление колонок в таблицу

При добавлении колонок в таблицы следует придерживаться следующих правил в указании опций колонок исходя из содержания будущей колонки:

  • сумма (деньги) - тип DECIMAL(20,2) и NOT NULL
  • дата (timestamp) - тип INT(11) и NULL
  • короткий текст (имя/фамилия, до 8KB) - VARCHAR(255) и NOT NULL
  • текст средней длинны (описание, от 8KB байт и до 64KB) - TEXT и NULL
  • длинный текст (описание, от 64KB и до 4MB) - LONGTEXT и NULL

В следующих случаях нужно всегда ставить INDEX на колонку:

  • колонка содержит дату;
  • колонка содержит статус записи, напр. Active/Disabled;
  • колонка указывает на то, что запись основная, т.е. IsPrimary;
  • по колонке будет делаться сортировка и колонка цифровая, напр. Order, Priority;
  • по колонке может быть сделать JOIN;
  • колонка является ForeignKey.
Image:Infobox Icon.gif В каждой таблице должен быть основной ключ (primary key). Этот ключ всегда должен состоять из одной цифровой колонки и не должен быть UNSIGNED.

Значение по умолчанию

Значение по умолчанию должно явно указано в декларации поля добавлением DEFAULT ... части в SQL.

Использование слова NULL

Если, и только если, требуется знать факт отсутствия значения в колонке, то её надо создавать, как NULL. Во всех остальных случаях колонка должна быть NOT NULL.
Image:Infobox Icon.gif Все колонки типов TINYTEXT, TEXT, LONGTEXT должны быть NULL без DEFAULT значения (требование в MySQL5).

Использование слова UNSIGNED

Если присутствует 100% уверенность в том, что в колонке не может быть отрицательных значений, то колонку нужно делать UNSIGNED. Колонки, где храниться timestamp нельзя делать UNSIGNED в тех случаях, когда

  • в колонке с датой может быть дата меньше 1 января 1970 года;
  • в колонке находиться только время (без даты).

См. также