Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Eine Einschränkung, die es nur einer von zwei Tabellen erlaubt, auf eine Basistabelle zu verweisen

CHECK-Einschränkungen mit UDFs (was die Antwort von Oded ist) lassen sich nicht gut skalieren und haben eine schlechte Parallelität. Siehe diese:

  • Skalare UDFs, die in CHECK-Einschränkungen eingeschlossen sind, sind sehr langsam und können bei mehrzeiligen Aktualisierungen fehlschlagen
  • Tony Rogerson

Also:

  • erstelle eine neue Tabelle, sagen wir TableA2XY
  • Dies hat den PK von TableA und eine char(1)-Spalte mit einem CHECK, um nur X oder Y zuzulassen. Und auch eine eindeutige Einschränkung für den PK von A.
  • tableX und tableY haben eine neue char(1)-Spalte mit einem Häkchen, um nur X bzw. Y zuzulassen
  • tableX und tableY haben ihre FK zu TableA2XY in beiden Spalten

Dies ist der Superkey- oder Subtype-Ansatz

  • alle DRI-basiert
  • keine Auslöser
  • keine UDFs mit Tabellenzugriff in CHECK-Einschränkungen.