Допустим, у меня есть таблица клиентов
со следующими полями и записями:
id first_name last_name email phone
------------------------------------------------------------------------
1 Michael Turley mturley@whatever.com 555-123-4567
2 John Dohe jdoe@whatever.com
3 Jack Smith jsmith@whatever.com 555-555-5555
4 Johnathan Doe 123-456-7890
Есть несколько других таблиц, например заказов
, вознаграждений
, квитанций
, у которых есть внешние ключи customer_id
, относящиеся к этой таблицы customers.id
.
Как вы можете видеть, мои пользователи, обладая безграничной мудростью, создали повторяющиеся записи для Джона Доу с несогласованным написанием и отсутствующими данными. Администратор замечает это, выбирает клиентов 2 и 4 и нажимает «Объединить». Затем им предлагается выбрать правильное значение для каждого поля и т. Д., И мой PHP определяет, что объединенная запись должна выглядеть следующим образом:
id first_name last_name email phone
------------------------------------------------------------------------
? John Doe jdoe@whatever.com 123-456-7890
Предположим, мистер Доу разместил несколько заказов, заработал вознаграждения, сгенерировал квитанции ... но некоторые из них были связаны с идентификатором 2, а некоторые - с идентификатором 4. Объединенная строка должна соответствовать всем внешним ключам в других таблицах, которые соответствуют исходным строкам.
Вот где я не знаю, что делать.Мой инстинкт таков:
DELETE FROM customers WHERE id = 4;
UPDATE customers
SET first_name = 'John',
last_name = 'Doe',
email = 'jdoe@whatever.com',
phone = '123-456-7890'
WHERE id = 2;
UPDATE orders, rewards, receipts
SET customer_id = 2
WHERE customer_id = 4;
Я думаю, что это сработает, но если позже я добавлю еще одну таблицу с внешним ключом customer_id, я должен не забыть вернуться и добавить эту таблицу во второй запрос UPDATE в моем слиянии функции или риск потери целостности.
Должен быть способ сделать это лучше.