проектное решение для DELETE SQL - PullRequest
5 голосов
/ 19 ноября 2010

Есть стол с именем человека.у которого есть personid и contactid.

, если человек удален, тогда я хочу удалить человека из БД, а также и связанных с ним контактов для этого человека.

Лучше ли выполнять процедуру DELETES в ОДНОМ хранилище или мой бизнес-уровень сначала вызывает pContactDelete, а затем вызывает pPersonDelete ???????

благодаря Найл

Ответы [ 5 ]

12 голосов
/ 19 ноября 2010

Если вы используете MS SQL Server:

Возможно, вам следует использовать ON DELETE CASCADE для внешнего ключа.

ALTER TABLE Contact
ADD CONSTRAINT FK_PersonContact FOREIGN KEY (PersonId)
REFERENCES Person(PersonId) ON DELETE CASCADE

Это обеспечит удаление строки контакта при удалении строки человека. Это ограничение, которое всегда применяется базой данных.

Вы также можете установить это в SQL Management Studio в диалоговом окне «Отношения по внешнему ключу», в разделе «Спецификация INSERT и UPDATE», «Удалить правило» -> «Каскад».

Просто убедитесь, что если где-то вы кэшируете свои Contact объекты на бизнес-уровне, вы также обновляете кеш.

1 голос
/ 19 ноября 2010

Если вы используете Oracle, у вас есть несколько вариантов.

  1. Установите внешний ключ между таблицами PERSON и CONTACT для каскадного удаления.

  2. Создайте триггер ON DELETE и удалите его там.Эта опция также дает вам возможность создавать любые необходимые записи журнала аудита или записывать в любые файлы журнала и т. Д., Которые могут потребоваться при удалении чего-либо.

Поделиться и наслаждаться.

1 голос
/ 19 ноября 2010

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

1 голос
/ 19 ноября 2010

Вы можете определить каскадный эффект с помощью вашей ссылочной клавиши

0 голосов
/ 19 ноября 2010

Мой подход к этой проблеме - НЕ использовать ограничение каскадного удаления в качестве общего принципа.Каскадные удаления могут иметь причудливый эффект при наличии циклических ссылок.В производственной среде рекомендуется обрабатывать удаление дочерних ссылок с помощью одной хранимой процедуры.Нет необходимости выполнять этот вызов из бизнес-уровня, если вы не выполняете какой-либо существенной проверки перед удалением контактов

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