Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Каскадно изтриване или използване на тригери?

КАСКАДНО ИЗТРИВАНЕ в MSSQL Server може да каскадира само към една таблица. Ако имате две таблици с релации на външен ключ към таблица с измерения, можете да изтриете каскадно само към една от тях. (Това е за предотвратяване на каскадно изтриване през множество пътища и създаване на конфликти, тъй като C++ позволява множествено наследяване, но C# позволява само единично наследяване)

Когато случаят е такъв, вие сте принудени да използвате тригери или конкретно да обработвате случая във вашия код.

Поради тази причина съм виждал много хора да избират да използват тригери във всички случаи. Дори когато има само една чужда маса. Това гарантира последователност и хората знаят какво да търсят, когато поддържат базата данни.

Ако може да се извърши каскадно изтриване на повече от една таблица, бих казал, че това би било най-предпочитаният вариант. Това ограничение обаче размътва нещата и в момента съм по-скоро в полза на задействания, притежаващи всички подобни поведения. Разходите при използването на тригери за каскадни изтривания и актуализации са незначителни по отношение на кодирането, но позволяват стандартни практики, които са наистина общи.

РЕДАКТИРАНЕ:

Може да искате да преместите „приетия отговор“ на някой друг, разбрах, че съм сгрешил относно горното.

МОЖЕТЕ да имате множество таблици с факти, които имат ON DELETE CASCADE Foreign Key Contraints към една таблица с измерения.

Това, което не можете да направите, е една таблица с факти да има ON DELETE CASCADE Foreign Key Constraints към множество таблици с измерения.

Така например...
- Таблица с размери [Person] (id INT IDENTITY, )
- Таблица с размери [Exam] (id INT IDENTITY, )
- Таблица с лица [Exam_Score] (person_id INT, exam_id INT, резултат INT)

Ако Лицето или Изпитът са изтрити, бихте искали свързаният(ите) запис(и) Exam_Score също да бъдат изтрити.

Това не е възможно при използване на ON DELETE CASCADE в MS SQL Server, поради което са необходими тригери.

(Извинявам се на Мехрдад, който се опита да ми обясни това, но напълно пропуснах идеята му.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да конвертирате цяло число (време) в HH:MM:SS::00 в SQL Server 2008?

  2. Как да конвертирате колона varchar в битова колона в SQL SERVER

  3. Анализ на MS SQL Server за тези, които го виждат за първи път

  4. SQL грешка:Неправилен синтаксис близо до ключовата дума „Потребител“

  5. Как програмно да задам низа за връзка за Entity-Framework Code-First?