2016-12-20 3 views
0

В Microsoft Access У меня есть три таблицы: таблица заказов, таблица клиентов и таблица продуктов. Моя таблица заказов включает как контакт с клиентом, так и информацию о продукте. Время от времени мне нужно обновить адрес клиента. При этом я хочу, чтобы новый адрес появлялся в будущих заказах. Я не хочу, чтобы Access обновлял предыдущие заказы с адресом, который первоначально не был связан с этим заказом. Я также хочу сохранить список активных и прошлых адресов в списке клиентов. Просьба сообщить о лучших способах настройки таблицы клиентов и о том, как сохранить контактную информацию клиента в таблице заказов.В контактной информации об обновлении доступа при сохранении старой записи в базе данных

ответ

3

Для этого вам необходимо вывести адрес клиента из таблицы Customer и сохранить его в отдельной таблице CustomerAddress. В этой новой таблице есть первичный ключ (конечно), внешний ключ обратно в таблицу Customer, все поля адресов, которые вы хотите сохранить в истории, и флаг Current (Да/Нет). Ваша таблица заказов затем указывает непосредственно на таблицу CustomerAddress вместо таблицы Customer (вы можете получить от Order to Customer из-за ссылки FK на CustomerAddress для Клиента). Теперь начинается ваше веселье! Вы должны поддерживать таблицу CustomerAddress таким образом, чтобы для каждого идентификатора клиента вы должны иметь только одну запись адреса, где Current is True.

Другой альтернативой является отсутствие флага текущего в таблице CustomerAddress, но вместо этого есть поле CurrentAddress в таблице Customer - это гарантирует, что только один адрес может быть текущим для Клиента. Однако вы не можете обеспечить целостность CurrentAddress и внешний ключ CustomerAddress - вы не можете установить значение CurrentAddress до тех пор, пока не добавите запись адреса, поэтому запись клиента должна существовать с помощью NULL CurrentAddress (хотя я полагаю у вас может быть фиктивная запись «Not set» CustomerAddress).

1

Простым методом является сохранение информации о текущем клиенте в заказе.

Расширенный метод должен хранить таблицу (ы) в качестве клиента временных таблиц, либо с использованием специального метода или родной, как - например - предлагают самые новые версии SQL Server. Посмотрите термин Временная база для получения дополнительной информации.

+0

Я бы выбрал первое предложение, сделанное @Skippy. С одним изменением не используйте Текущий флаг (Да/Нет), а используйте поле диапазона дат (Действительное и Действительное до даты). Причина может заключаться в том, что клиент заранее отправляет вам изменение адреса. – Rene