В моей доменной модели у меня есть агрегат, корень агрегата, конечно же, имеет глобально уникальную идентичность, в то время как другие сущности этого агрегата имеют только локальную идентичность, которая относится к корневому объекту.
Пока все хорошо. Теперь я пытаюсь разработать базу данных, которая будет хранить данные этого агрегата.
Мое первое предположение состоит в том, чтобы спроектировать его с той же идеей локальных идентификаторов, что означает, что все первичные ключи других таблиц сущностей будут включать корневой ключ сущности (несколько ключей столбцов).
Вариант 1:
Также обратите внимание, что из-за того, что у меня много вложенных дочерних объектов, в моей последней таблице я получаю 4 столбца PK.
Еще один способ сделать это - использовать один ключ столбца в каждой таблице, как это
Вариант 2:
Я не уверен, какой из них использовать. Хотя мне нравится, что вариант 1 лучше согласован с логикой домена, он кажется более сложным, и я не уверен, что могу столкнуться с некоторыми проблемами с производительностью.
Вариант 2 кажется более простым, но менее согласованным с доменом. Для меня это означает, что дочерняя сущность может изменить своего родителя, изменив значение FK, но это невозможно с точки зрения бизнес-логики.
Что я должен рассмотреть, чтобы решить, какой вариант использовать? Вы видите другие варианты?