Допустим, у меня есть таблица customers
со следующими полями и записями:
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
Есть несколько других таблиц, таких как orders
, rewards
, receipts
, которые имеют внешние ключи 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 в моей функции слияния или риску потери целостности .
Должен быть лучший способ сделать это.