2013-12-29 5 views
0

Я хочу настроить базу данных mysql и php-скрипт, где клиент может добавлять несколько адресов и устанавливать один адрес по умолчанию. Клиент с несколькими адресами может быть реализован следующим образом:клиент с несколькими адресами

enter image description here

Но как я должен изменить схему, чтобы сохранить адрес по умолчанию? Во-первых, я был соблазн реализовать его логическое значение, как это:

enter image description here

Но это имеет тот недостаток, что если пользователь хочет изменить свой адрес по умолчанию нужно изменить два адреса, seeting один DEFAULT_ADDRESS истина а другой - ложным. Когда что-то пойдет не так, это может привести к несогласованной базе данных, где у пользователя нет адреса по умолчанию или более одного адреса по умолчанию. Есть ли более надежный способ реализовать это?

+0

'Когда что-то пойдет не так, это может привести к несогласованной базе данных' - вам может быть полезно описать, как это может пойти не так с этим решением. – Boaz

+1

Вот почему вы используете транзакции в базе данных. Выполняется либо полное обновление, либо ни одно из них не выполняется. –

+0

@Boaz Я просто думаю, что это хрупко для аномалий. Разве это не так, почему люди нормализуют базу данных? – Adam

ответ

4

В таблице клиентов может быть поле default_address_id.

+0

Тогда может случиться так, что idcustomer и customer_idcustomer соответствующего адреса default_address_id не совпадают. – Adam

+0

В этот момент вы, вероятно, будете иметь больше беспорядка. Я не могу придумать ни одного решения, в котором вы не полагаетесь на идентификаторы, которые вы в настоящее время ожидаете изменить в какой-то момент в будущем ... –

0

Я бы пошел с решением Эрана в сочетании с некоторым запросом JOIN или добавил таблицу default_cst_addresses, содержащую customer_id, address_id, а затем ссылался на них через отношения к другим таблицам.

Смежные вопросы