Member 12612576 Ответов: 1

Как удалить дубликат там, где база данных имеет ограничения внешнего ключа


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

Что я уже пробовал:

Я не пытался я понял что для этого нужен хороший сценарий

1 Ответов

Рейтинг:
4

OriginalGriff

Проблема заключается в том, что дублированные строки включаются в другую таблицу с помощью внешнего ключа:
Пользователи

ID   Name
1    Joe
2    Mark
3    Joe

Покупки
ID   UserID   Purchase
1    1        10.00
2    1        14.00
3    2        27.43
4    3        17.00
Таким образом, столбец UserID является внешним ключом к столбцу ID в таблице Users.
В результате, если вы попытаетесь удалить второго " Джо "из пользователей (ID = 3), SQL будет жаловаться, потому что это оставит" осиротевшие " строки в таблице покупок - а это означает, что ваша база данных больше не согласована.
Вы не можете этого сделать: если у вас есть дубликаты в таблице Users, вы должны переместить все зависимые записи в таблице Purchases, чтобы все они относились к экземпляру пользователя, которого вы храните, прежде чем удалять запасные записи в таблице Users.
Это не сложно - в приведенном выше примере это просто:
UPDATE Purchases SET UserID=1 WHERE UserID=2
Затем вы можете выполнить удаление без проблем.

Вы можете настроить SQL на каскадное удаление, где он удаляет все зависимые записи для вас, но это опасно - особенно когда вы удаляете дубликат, поскольку не знаете, какие данные собираетесь удалить и важны ли они.