Добавить комментарий

Изображение пользователя st.

Продолжим понемногу

Введение реестра не усложнит запросы, зато появится возможность делать ранее труднодоступные, например "выбрать все сущности в системе независимо от их типа, созданные позже даты". Или то же самое, но по заданному множеству типов.

Поля с деньгами надо определять с 4 знаками после запятой, чтобы уменьшить погрешности вычислений. "Стандартный" тип money это numeric(18,4).

Тип ключей bigint не обоснован. Если планируются массивы с миллиардами записей, то имеет смысл его использовать, но только для ключей этих таблиц. В остальных - обычный целочисленный int (до 2 млрд. с хвостиком) и smallint (до 32768), а то и tinyint (byte, до 255 значений). В частности, ключ типа varchar меняется на tinyint. Опять сошлюсь на главу "Первичный и прочие ключи" из книжки, чтобы не копировать текст оттуда.

И вот что меня беспокоит: я нигде не вижу собственно счета. Что его заменяет, контракт? Но тогда имеет место смешение документооборота и бухгалтерии, что не есть хорошо. Бухгалтерии не в налоговом смысле, а в смысле абстрактной механики учета с использованием регистров и проводок. Вот смотрите, есть старенькая статья, где в разрезы проводок (и баланса) можно вставить по-моему все описанные у вас размерности. Эта схема решит ваши учетные потребности, сверху вы накрутите сколько угодно типов документов, но механика не изменится. В каждый момент времени есть полная история операций и баланс по ним, который можно стереть и восстановить заново из операций (баланс служит для предвычислений, фактически, для кэша в техническом смысле слова).