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
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
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.
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 ????
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.
Bleiben nur 2 Möglichkeiten.
- Unique Key
- Garnicht erst in die Verlegenheit kommen, damit meine ich, was kann passieren, damit ein "doppelter " Datensatz erstellt würde?
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.
> Codejunky <