ЯСНО, сделай решение 2.
Логический: когда клиент меняет свой основной адрес, это не меняет адрес. Это отражено в схеме БД
Коррупция: нет никакого способа, которым вы, бд, становитесь странным, имея клиента с двумя основными адресами. Решение 1 может иметь два логических флага в true.
Простота: когда вы изменяете адрес клиента, вы можете сделать это с помощью одного обновления. Для решения 1 вы делаете 2 обновления ... возможно, в одном сложном SQL-запросе, но это два обновления!
Расширяемость: если в один прекрасный день вы хотите, чтобы адрес был «общедоступным», например, если вы не храните один и тот же точный адрес для двух людей, живущих в одном месте, вы не нарушите свою функцию «primary_address», поскольку она хранится у пользователя. Для решения 1 потребуется рефакторинг.
Совместим со всеми системами контроля версий: клиент меняет свой основной адрес? => клиент обновлен => сохранить старую версию или обновленные строки для этого клиента.
С решением 1 вы сломаете его или вам придется изменить поведение по умолчанию самостоятельно.
Редактировать : хорошо, если вы отредактируете свой вопрос после того, как мы ответили на него, наши ответы будут выглядеть глупо.
Рекомендую вам это, если вы планируете иметь более одного адреса для каждого клиента, но все же основной
client
primary_address (fk to address(id))
address
client (fk to client(id))