0

Я работаю над своим первым проектом с использованием CQRS, и некоторые вещи для меня не совсем понятны.CQRS - внешний ключ на базе данных для чтения

Предположим, у меня в моей модели несколько клиентов, и у каждого клиента есть список заказов.

В моей модели (поддерживаемой стандартной реляционной базой данных) у меня будет проекция со списком всех клиентов. Более того, у меня будет проекция со списком всех заказов.

В этой второй проекции имеет смысл иметь внешний ключ для ключевого стола со всеми клиентами? Или лучше ли денормализовать немедленно и сохранить в таблице заказов также все соответствующие данные клиентов?

ответ

4

Я думаю, это зависит от ваших требований.

Одна школа мысли состоит в том, чтобы денормализовать данные для всех ваших моделей взглядов, поскольку у вас будет одна таблица за просмотр. На другом конце спектра вы можете сохранить высоко нормированную базу данных для поддержки своих представлений. Вы также можете выбрать где-то посередине. В этих решениях существуют компромиссы с точки зрения скорости, размера хранилища, простоты использования и масштабируемости. Например, если у вас есть сотни очень похожих моделей взглядов, возможно, имеет смысл иметь более нормализованную модель данных. Другой пример может заключаться в том, что одно конкретное представление генерирует на порядок больше трафика, чем любое другое представление - вы, вероятно, захотите оптимизировать этот конкретный вид больше, чем другие. На самом деле не существует решения одного размера.

Как насчет этой сумасшедшей мысли - делать как;) видеть, что вы предпочитаете после работы с ними какое-то время. Одна из замечательных особенностей CQRS заключается в том, что у вас есть свобода принимать эти решения. Если вы совмещаете это с источником событий и возможностью перестраивать свои взгляды, то вы можете просто передумать позже :)