|
27 | 27 | 1. `CREATE UNIQUE INDEX ON paid_services.snapshot_package_limit USING btree (order_item_id, service_id, sort(uniq(zone_ids)))` |
28 | 28 | 1. `CREATE UNIQUE INDEX ON paid_services.snapshot_package_limit USING btree (order_item_id, service_id, zone_ids)` |
29 | 29 | 1. Кроме ошибок нехватает рекоментаций, которые можно возвращать в результате работы функции валидации: |
30 | | - 1. Для текстовых колонок `TEXT (VARCHAR)` без ограничения длины и с отсутствием ограничения `check(...)` рекомендовать делать валидацию `check(length(col) between X and Y)`. |
31 | 30 | 1. Для колонок типа `json[b]` рекомендовать делать валидацию для верхнего уровня. |
32 | 31 | 1. CASCADE использовать в миграциях опасно. |
33 | 32 | Удаление может рекурсивно пойти по FK и удалить существующие объекты БД и записи в таблицах. |
34 | 33 | Рекомендовать выстроить цепочку удаления объектов в правильной последовательности. |
35 | 34 | 1. Типы колонок |
| 35 | + 1. 🚨 Вместо устаревшего `CHAR(n) / VARCHAR(n)` нужно использовать `TEXT` с ограничением, например: `check(length(col) between 0 and 100)` |
| 36 | + 1. 🚨 Для текстовых колонок `TEXT` и `VARCHAR` без ограничения длины и с отсутствием ограничения `check(...)` необходимо делать ограничение с валидацией `check(length(col) between X and Y)` |
36 | 37 | 1. Вместо устаревшего `TIMESTAMP` (WITHOUT TIME ZONE) нужно использовать `TIMESTAMPTZ` (TIMESTAMP WITH TIME ZONE) |
37 | | - 1. Вместо устаревшего `CHAR(n) / VARCHAR(n)` нужно использовать `TEXT (VARCHAR)`. To restrict length, just enforce `CHECK` constraint! |
38 | 38 | 1. Вместо проблемного `MONEY` нужно использовать `NUMERIC` and store currency in another column |
39 | 39 | 1. Вместо устаревшего `SERIAL` нужно использовать `[BIG]INT GENERATED` |
40 | 40 | 1. Вместо `JSON` рекомендовать использовать `JSONB` |
41 | | - 1. Запретить использовать колонку с типом `varchar`. Нужно использовать тип `text` с ограничением, например: `check(length(col) between 0 and 100)` |
42 | 41 | 1. В текстовое поле нельзя записать `null` или пустую строку на выбор (когда нет ни одного ограничения типа `check` на колонку), д.б. только 1 способ. Пример проблемной миграции: `alter table {table} add {column} varchar(10);` |
43 | 42 | 5. Для колонки `updated_at` (название задать в конфиге) должен быть триггер, который устанавливает значение `now()` при создании или обновлении записи |
44 | 43 | 6. Взять идеи из |
|
0 commit comments