Временный он потому что он действует пока открыта страница в браузере или пока есть соединение в самим сокетом.
нормализация - это серебряная пуля и панацея. Один из ключевых принципов архитектуры.
И не надо ставить денормализацию на одну доску с ней. Это не принцип проектирования баз данных, а компромисс, который никогда не закладывается исходно, а добавляется сильно позже, когда (если) возникают проблемы с производительностью.
Чем схема плоха, я наглядно показал в своем ответе - при нормальной схеме - когда номер счетчика уходит в условие, где он и должен быть - сразу пропадает ВЕСЬ этот говнокод, и делается простой запрос апдейт.
UPDATE `list`
SET count1 = CASE WHEN id = ? AND ? = 1 THEN count1 - ? ELSE count1 END,
count2 = CASE WHEN id = ? AND ? = 2 THEN count2 - ? ELSE count2 END,
count3 = CASE WHEN id = ? AND ? = 3 THEN count3 - ? ELSE count3 END
WHERE id = ?
UPDATE `list`
SET count1 = CASE WHEN id = :id_part1 AND :id_part2 = 1 THEN count1 - :count ELSE count1 END,
count2 = CASE WHEN id = :id_part1 AND :id_part2 = 2 THEN count2 - :count ELSE count2 END,
count3 = CASE WHEN id = :id_part1 AND :id_part2 = 3 THEN count3 - :count ELSE count3 END
WHERE id = :id_part1
const COLUMNS = [
1 => 'column1',
2 => 'column2',
3 => 'column3',
];
$column = COLUMNS[$id[1]];
UPDATE `list` SET $column = $column - :count WHERE `id` = :id_part1
$column = 'count' . (int)$columnNumber;
const COLUMNS = [
1 => 'column1',
2 => 'column2',
3 => 'column3',
];
if (!isset(COLUMNS[$id])) {
throw new \InvalidColumnException();
}
$column = COLUMNS[$id];
Я не админ, так понимаю лежит сервер БД
Type character(N) is a hangover from the days of punched cards.
Don't use it. It has weird semantics concerning trailing spaces,
which are almost never the behavior you actually want, and cause
interoperability issues with type text. (Text is Postgres' native
string type, meaning that unlabeled string constants will tend to
get resolved to that.)
contract_address character(42) NOT NULL,
buyer_address character(42) NOT NULL,
seller_address character(42) NOT NULL,
По поводу памяти это экономия на спичках использовать VARCHAR или за этим следят?
varchar и text - по факту одно и то же, а char(n) как следует из документации самый медленный