Перейти к содержанию

База данных

Правила и рекомендации при работе с базой данных

Поля таблицы

  1. Любые поля ДОЛЖНЫ быть иметь название состоящее только их маленьких латинских букв, цифр и знака "_". Другие символы не допускаются.
  2. Таблица всегда, за редкими исключениями, ДОЛЖНА иметь поле id с типом int unsigned NOT NULL AUTO_INCREMENT
  3. Числовые поля предназначенное для связи между таблицами
    3.1. всегда ДОЛЖНЫ иметь окончание "_id". Например user_id
    3.2. РЕКОМЕНДУЕТСЯ располагать их по порядку в начале таблицы
    3.3. всегда ДОЛЖНЫ иметь простые индексы и foreign key ключи
  4. Поля имеющие булево значение
    4.1. ДОЛЖНЫ иметь название начинающееся с приставки "is_" и окончания "_sw". Например is_active_sw.
    4.2. ДОЛЖНЫ иметь тип поля enum('Y', 'N')
    4.3. ДОЛЖНЫ иметь значение по умолчанию. Например DEFAULT 'Y', или 'N' в зависимости от задачи
    4.4. РЕКОМЕНДУЕТСЯ чтоб бы было установлено NOT NULL. Без этого поле будет иметь не 2, а 3 значения, что не всегда правильно
  5. Поля имеющие дробное числовое значение ДОЛЖНЫ иметь тип DECIMAL
  6. В таблицы РЕКОМЕНДУЕТСЯ добавлять поля
    6.1. date_created - поле содержит дату создания записи.
    6.1.1. Такие поля ДОЛЖНЫ иметь тип timestamp NOT NULL DEFAULT current_timestamp()
    6.1.2. РЕКОМЕНДУЕТСЯ располагать их по порядку в конце таблицы
    6.2. date_modify - поле содержит дату изменения записи
    6.2.1. Такие поля ДОЛЖНЫ иметь тип timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
    6.2.2. РЕКОМЕНДУЕТСЯ располагать их по порядку в конце таблицы
  7. Если в таблице требуется хранить признак удаленности записи, то для этого ДОЛЖНО использоваться поле is_deleted_sw enum('Y', 'N') NOT NULL DEFAULT 'N'
  8. Если в таблице требуется хранить признак активности записи, то для этого РЕКОМЕНДУЕТСЯ использоваться поле is_active_sw enum('Y', 'N') NOT NULL DEFAULT 'Y'

Индексы таблицы

  1. Простые индексы для поля РЕКОМЕНДУЕТСЯ называть таким образом, чтобы название полностью совпадало с названием поля.
  2. Индексы, которые состоят из нескольких полей РЕКОМЕНДУЕТСЯ называть таким образом, их чтобы название состояло из названий полей разделенных знаком "_". Например user_id_role_id.

Foreign key таблицы

  1. Индексы со связанной таблицей всегда ДОЛЖНЫ иметь продуманные ON UPDATE и ON DELETE

Названия

  1. Названия таблиц относящиеся к модулю всегда ДОЛЖНЫ начинаться с префикса mod_ и далее должно идти название модуля. Например mod_orders.
  2. Таблицы содержащие файлы должны заканчиваться _files в названии.

Таблицы с файлами

Для таблиц с файлами РЕКОМЕНДУЕТСЯ следующая структура DDL. На такую структуру рассчитан различный функционал системы, чтобы все работало автоматически.

CREATE TABLE `mod_orders_files` (
   `id` int unsigned NOT NULL AUTO_INCREMENT,
   `content` longblob,
   `refid` int unsigned NOT NULL,
   `filename` varchar(255) NOT NULL,
   `filesize` int NOT NULL,
   `hash` varchar(128) NOT NULL,
   `type` varchar(255) DEFAULT NULL,
   `fieldid` varchar(255) DEFAULT NULL,
   `thumb` longblob,
   `storage` varchar(255) DEFAULT NULL,
   PRIMARY KEY (`id`),
   KEY `refid` (`refid`),
   CONSTRAINT `fk1_mod_orders_files` FOREIGN KEY (`refid`) REFERENCES `mod_orders` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;