Frank (no reg): Microsoft SQL Server Duplikate vermeiden

Beitrag lesen

Hallo,

vorab ... dein Problem hat nichts mit der Wahl einer bestimmten Datenbanksoftware zu tun, sondern es ist ein logisches bzw. Design Problem.

Ein Unique Constraint ist eine rein technische Angelegenheit, welche die Eindeutigkeit eines Datensatzes in seinem Gültigkeitsbereich (Tabelle) sicherstellt. Der Primary Key in einer Tabelle ist z.b. eindeutig.

Also wenn 2 Attribute aus Tabelle 1 und 2 aus Tabelle 2 in dieser Kombination schon vorhanden sind, liegt ein Duplikat vor.

Dies ist eine von dir definierte Logik, welche über die Funktion und Möglichkeiten eines Unique Constraints hinausgeht. Du benötigst demnach auch eine von dir definierte und korrespondierende Logik zur Feststellung von Duplikaten.

Eine Möglichkeit wäre:

  • im Hintergrund wird eine Schattentabelle in einer denormalisierten Form geführt (von dedlfix schon angemerkt)
  • auf dieser Tabelle könnte dann ein Unique Constraint implementiert werden
  • durch Trigger (soweit von der Datenbanksoftware unterstützt) auf den originalen normalisierten Tabellen einen Eintrag in diese Schattentabelle zu machen (alternativ kann man das natürlich auch über Stored Procedures machen)
  • sollte das Insert auf der Schattentabelle fehlschlagen, sollten die Trigger / Procedures eine Logik beinhalten die Änderungen auf den originalen Tabellen rückgängig zu machen (Transaktionen böten sich da an) und den Fehler weiter nach oben zu geben (bei dir an das ASP.Net MVC Gerassel)

Natürlich hat diese Vorgehensweise ggf nachteiligen Einfluss auf

  • Performance
  • Datenwachstum

Ciao, Frnk