Я проектирую реляционную базу данных со многими сложными правилами целостности между таблицами.То, как я это делаю, - это определение самой фундаментальной таблицы и написание представлений для представления концепций более высокого уровня, которые возникают из фундаментальных таблиц.
Например, представьте себе базу данных банковского счета, я определяю конкретнуюtransaction
таблица, в которой хранятся депозиты и снятия со счета, и представление под названием balance
, суммирующее все депозиты и снятие средств с каждого счета.Существует также конкретная таблица с именем liability
, в которой регистрируются суммы, заблокированные на каждом счете, поэтому представление avaliable_balance
представляет собой баланс, заданный balance
минус сумма всех заблокированных денег для счета в таблице liability
.По мере того, как это происходит, оно становится все более сложным.
По мере роста базы данных я боюсь чего-то столь же простого, как определение того, сколько денег клиент может потратить, приводит к слишком сложному и дорогостоящему запросу.Альтернативы:
- Материализованные представления, но, насколько я понимаю, они не обновляются автоматически, и их обновление является дорогостоящей операцией, которую невозможно выполнить при каждом изменении таблицы.
- Конкретные таблицы для представлений, обновляются автоматически только с помощью триггеров
UPDATE
, INSERT
и DELETE
на основных таблицах.Но это подвержено ошибкам, дорого во время разработки и просто кажется неправильным, так как отношения и правила обновления могут быть «легко» выведены из определений представлений, и кажется, что это должно быть сделано автоматически.
Буду ли я сталкиваться с проблемами производительности при увеличении такой базы данных?Если да, как я могу решить это?Каков наилучший подход с точки зрения производительности?Есть ли альтернатива, которую я не вижу?