как мы удаляем строку из родительской таблицы, когда дочерняя таблица связана с пареной таблицей с помощью внешнего ключа - PullRequest
2 голосов
/ 26 августа 2010

Привет, все, что я получаю, когда я пытаюсь удалить строку из родительской таблицы, на самом деле я создал 2 таблицы custmer и account.i сделать идентификатор cutomer (первичный ключ) в идентификаторе клиента и идентификатор клиента (внешний ключ) в учетной записи После создания я заполнил данные внутри обеих таблиц. в этот момент, когда я пытаюсь удалить строку из первой таблицы (клиент), он выдает сообщение об ошибке, что его нельзя удалить, потому что он ссылается как внешний ключ, что-то вроде этого ......... ... но пока мы удаляем строку из таблицы учетных записей, это полностью удаляет удачу. ....... Я хочу работать так, если я удаляю строку из родительской таблицы (клиент), то в дочерней таблице эта строка, которая имеет тот же идентификатор клиента (таблица счетов), удаляется автоматически ....... .....

Ответы [ 2 ]

4 голосов
/ 26 августа 2010

следите за каскадом удаляет! пользователь случайно нажмет на значок приложения в маленькой корзине и удалит клиента, а затем все каскады будут удалять все следы этого клиента, заказы, счета, платежи, историю и т. д. из вашей базы данных. После того, как пользователь позвонит вам, чтобы сообщить вам об их маленькой ошибке, вам придется восстановить резервную копию и попытаться вернуть информацию обратно в базу данных.

Я бы посмотрел на "мягкие удаления", когда вы меняете только статус клиента с "активный" на "неактивный". строки не удаляются, сохраняя все данные внешнего ключа. Это позволяет отчетам запускать данные, поскольку они все еще существуют, а также легко отменять действия.

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

1 голос
/ 26 августа 2010

Вам необходимо установить внешний ключ с помощью on delete cascade для достижения этого.

Для SQL Server 2008 см. Статью Каскадные ограничения ссылочной целостности

Редактировать Просто добавив несколько избыточных предупреждений о работоспособности, вы должны знать, что добавление on delete cascade будет означать, что при удалении строки из родительской таблицы связанные строки из дочерней таблицы будут удалены. Однако, поскольку именно такое поведение вы заявляете, что хотите, я не вижу, что это будет проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...