База данных
Правила и рекомендации при работе с базой данных
Поля таблицы
- Любые поля ДОЛЖНЫ быть иметь название состоящее только их маленьких латинских букв, цифр и знака "_". Другие символы не допускаются.
- Таблица всегда, за редкими исключениями, ДОЛЖНА иметь поле id с типом
int unsigned NOT NULL AUTO_INCREMENT - Числовые поля предназначенное для связи между таблицами
3.1. всегда ДОЛЖНЫ иметь окончание "_id". Например user_id
3.2. РЕКОМЕНДУЕТСЯ располагать их по порядку в начале таблицы
3.3. всегда ДОЛЖНЫ иметь простые индексы и foreign key ключи - Поля имеющие булево значение
4.1. ДОЛЖНЫ иметь название начинающееся с приставки "is_" и окончания "_sw". Например is_active_sw.
4.2. ДОЛЖНЫ иметь тип поляenum('Y', 'N')
4.3. ДОЛЖНЫ иметь значение по умолчанию. Например DEFAULT 'Y', или 'N' в зависимости от задачи
4.4. РЕКОМЕНДУЕТСЯ чтоб бы было установлено NOT NULL. Без этого поле будет иметь не 2, а 3 значения, что не всегда правильно - Поля имеющие дробное числовое значение ДОЛЖНЫ иметь тип
DECIMAL - В таблицы РЕКОМЕНДУЕТСЯ добавлять поля
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. РЕКОМЕНДУЕТСЯ располагать их по порядку в конце таблицы - Если в таблице требуется хранить признак удаленности записи, то для этого ДОЛЖНО использоваться поле
is_deleted_sw enum('Y', 'N') NOT NULL DEFAULT 'N' - Если в таблице требуется хранить признак активности записи, то для этого РЕКОМЕНДУЕТСЯ использоваться поле
is_active_sw enum('Y', 'N') NOT NULL DEFAULT 'Y'
Индексы таблицы
- Простые индексы для поля РЕКОМЕНДУЕТСЯ называть таким образом, чтобы название полностью совпадало с названием поля.
- Индексы, которые состоят из нескольких полей РЕКОМЕНДУЕТСЯ называть таким образом, их чтобы название состояло из названий полей разделенных знаком "_". Например user_id_role_id.
Foreign key таблицы
- Индексы со связанной таблицей всегда ДОЛЖНЫ иметь продуманные
ON UPDATEиON DELETE
Названия
- Названия таблиц относящиеся к модулю всегда ДОЛЖНЫ начинаться с префикса
mod_и далее должно идти название модуля. Напримерmod_orders. - Таблицы содержащие файлы должны заканчиваться
_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;