SQL Server двусторонний каскад? - PullRequest
4 голосов
/ 30 ноября 2011

Я пытаюсь собрать базу данных в SQL Server Management Studio 2008, которая будет управлять данными без необходимости программной обработки данных, но у меня сейчас есть некоторые проблемы.

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

|Person|   |Customer|   |Transaction|
|------|   |--------|   |-----------|
|  ID  |-\ |   ID   |-\ |    ID     |
|      |  \| person |  \|  Customer |
|      |   |        |   |           |

Из двух ссылок идентификаторы - это PK, а второстепенные элементы (человек / клиент) - это FK. Проблема, с которой я сталкиваюсь при таком соглашении, заключается в том, что человек должен быть сохранен, если он совершил транзакцию, и поэтому его идентификатор клиента отображается в таблице транзакций.

Я не на 100% уверен в том, какой подход выбрать. Будет ли «Удалить правило - каскад» между человеком-клиентом с «Удалить правило - без действий» между клиентом - транзакцией создать желаемый эффект?

В этом вопросе будут очень признательны за любой подход или лучший подход.

Ответы [ 2 ]

2 голосов
/ 30 ноября 2011

Я думаю, да, предложение

ON DELETE CASCADE

во внешнем ключе Customer.Person и предложение

ON DELETE NO ACTION

во внешнем ключе Transaction.Customer будет иметь желаемый эффект.

Тогда любая попытка удалить Персона приведет к удалению соответствующей строки Клиента, если только нет связанных Транзакций.Это вызовет ошибку, и команда DELETE будет отменена.

0 голосов
/ 30 ноября 2011

У вас может быть просто триггер удаления в таблице лиц, который останавливает удаление, если у удаляемого человека есть какие-либо записи в таблице транзакций.

...