Laden...

UNIQUE KEY Einschränkung ausnutzen?!

Erstellt von exoc.slade vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.010 Views
E
exoc.slade Themenstarter:in
31 Beiträge seit 2008
vor 13 Jahren
UNIQUE KEY Einschränkung ausnutzen?!

verwendetes Datenbanksystem: MS-SQL

Hallo,

folgendes Szenario:
Ich habe eine Datentabelle mit 6 Spalten, die von einem Tool (eine Art Logger) gefüllt wird. Auf der Tabelle liegt ein UNIQUE KEY (der natürlich dazu da ist doppelte Einträge zu verhindern).

Nun spiele ich gerade mit dem Gedanken beim INSERT im Programm gar nicht erst eine Dopplungsprüfung durchzuführen sondern diesen direkt an den DB-Server zu schicken (billgend in Kauf nehmend, dass eine Constraint-Exception ausgelöst wird).

Frage:
Ist es besser (bezogen auf Stil und auch Performance) vorher eine Abfrage auf die Tabelle zu machen um zu prüfen ob es den Eintrag bereits gibt und dann den geplanten INSERT evtl. zu verwerfen?

Grüsse,

Exoc

1.552 Beiträge seit 2010
vor 13 Jahren

Hallo exoc.slade,

ich lass den Server immer die Constraint Exception werfen, und diese wird dann vom Client gehandlet.
Wenn du zuerst eine Select machst brauchst du 2 Serveranfragen, (SELECT,INSERT).
Ansonsten nutzt du den Server Response.

Gruß
Michael

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

F
10.010 Beiträge seit 2004
vor 13 Jahren

Sehe ich anders.

Genauso wie bei Exceptions sollte man den Programmfluss auch bei SQL nicht per Fehlerhandling erledigen.

Wenn du doch genau weist, was passiert kannst du entsprechend handeln.
Sei es durch ein Select for dem Insert, oder eine SP.

E
exoc.slade Themenstarter:in
31 Beiträge seit 2008
vor 13 Jahren

Ich habe schon befürchtet, dass ich genau diese 2 Antworte bekomme 😉
Die Idee mit der SP fand ich aber interessant und so habe ich es jetzt darüber gelöst.

Eine Frage habe ich aber noch:
Wie angedeutet handelt es sich hierbei um eine Art Datenlogger, das heißt ich habe verhältnismäßig viele Schreibzugriffe, aber sehr wenige Lesezugriffe.

Was ist wohl schneller (und verhindert dennoch doppelte Datensätze):
Ein UNIQUE-KEY (bzw. UNIQUE-INDEX)
Oder ein TRIGGER ????

F
10.010 Beiträge seit 2004
vor 13 Jahren

Trigger bestimmt nicht, denn hier müsstest du selber lesen, vergleichen usw.
Ein Index dient der Sortierung, wenn die Daten aber schlecht sortierbar sind, ist das auch nicht gut.
Bleiben nur 2 Möglichkeiten.

  1. Unique Key
  2. Garnicht erst in die Verlegenheit kommen, damit meine ich, was kann passieren, damit ein "doppelter " Datensatz erstellt würde?
E
exoc.slade Themenstarter:in
31 Beiträge seit 2008
vor 13 Jahren

Bleiben nur 2 Möglichkeiten.

  1. Unique Key
  2. Garnicht erst in die Verlegenheit kommen, damit meine ich, was kann passieren, damit ein "doppelter " Datensatz erstellt würde?
  1. Aber erstellt ein Unique Key nicht auch gleichzeitig einen Index (MS SQL)?
  2. Theoretisch fügt nur eine Funktion in nur einem Programm neue Sätze in die Tabelle, aber da das erst der Anfang des Projektes ist, möchte ich gern schon vom Datenbankdesign her Vorkehrungen gegen Dopplung treffen.
F
10.010 Beiträge seit 2004
vor 13 Jahren

zu 2) YAGNI beachten.

1.665 Beiträge seit 2006
vor 13 Jahren

Zu 1) Das Thema hatte mich mal auch interessiert und bin bisher nicht wirklich zu einer eindeutigen bzw. schlüssigen Antwort gekommen. Viele sagen, dass es sogar keinen Unterschied machst, ob du die Column 'Is Unique' machst oder als Type 'Index' oder 'Unique' auswählst. Der Index kommt letztendlich immer drauf. Aber dem traue ich nicht so ganz. Lässt sich aber eigentlich leicht feststellen, ob das so ist (Index-Einträge ansehen). Bin nur grad nicht in der Lage dies zu tun.