Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ### Руководство по проектированию базы.
- 1) ВСЕ поля и ВСЕ названия таблиц в snake_case.
- 2) ВСЕ таблицы во множественном числе. Исключения в словах, где множ. число применить нельзя.
- 3) Когда поле должно быть bool: is_seller -> tinyint 1. Желательно добавить not null и default значение. Перед названием поля пишем приставку is_ чтобы понимать что оно bool типа просто посмотрев на него.
- 4) Поля для фильтрации, такие как: status, type и т.д. (где ограниченное фиксированное количество значений) - tinyint (4) поле с обычным индексом. ТАБЛИЦУ один-ко-многим НЕ делаем. Значения будут указаны в коде приложения. В комментарии к полю пишем возможные значения.
- 5) В каждой таблице поле id - unsigned int (10), primary, not null, auto increment
- 6) Поля-ссылки (Н: cities -> city_id (одиночная форма)) - unsigned int (10), not null (там где НУЖНО, можно убрать NOT NULL)
- 7) Наименование индексов на поля-ссылки. Н: city_id -> city_id_idx
- 8) Наименование уникальных ключей. Н: slug -> slug_idx_uniq
- 9) Наименование составных индексов. Н: slug + user_id -> slug_user_id_idx(_uniq опционально, если уникальный)
- 10) Наименование внешних ключей: table_column_id_fk. Н: Таблица addresses ссылается на cities - addresses_city_id_fk.
- 11) ON_DELETE - cascade, ON_UPDATE - restrict
- 12) В каждой таблице которая представляет собой некую сущность (persons, cities, etc.) добавляем поля:
- 13) created_at - timestamp, nullable, default CURRENT_TIMESTAMP
- 14) updated_at - timestamp, nullable, default CURRENT_TIMESTAMP и ставим опцию "On Update Current_Timestamp".
- ### Примечание
- 1) При использовании symfony/doctrine использовать в 12 пункте datetime nullable, а не timestamp
- 2) Если не использовать unsigned, то пишем int (11) в id полях.
- 3) В symfony/doctrine ОСТАВЛЯЕМ внешние ключи по умолчанию т.е. не задаем им имена. Доктрина все равно перепишет на свои при генерации таблиц с Entities.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement