2011-01-17 15 views
1

Ich benutze SQL Server 2008, und ich habe eine Tabelle mit einer Spalte des Typs varchar (X), die ich möchte, dass eindeutige Werte haben.Eindeutige Einschränkung vs Vorprüfung

Was ist der beste Weg, um das zu erreichen? Sollte ich eine eindeutige Einschränkung verwenden und eine Ausnahme abfangen, oder sollte ich vor dem Einfügen eines neuen Werts eine Vorabprüfung durchführen?

Ein Problem, die Anwendung wird von vielen Benutzern verwendet, so denke ich, dass Pre-Checking Race-Bedingung führen kann, falls zwei Benutzer die gleichen Werte einfügen.

Dank

+0

Verwandte Frage - https://stackoverflow.com/questions/21889843/unique-constraint-vs-checking-before-insert – Steam

Antwort

4

die DB Lassen Sie die Arbeit für Sie. Erstellen Sie die eindeutige Einschränkung.

+0

Gibt es ein Szenario, in dem eine Methode besser als die andere wäre? Ich habe eine verwandte Frage hier geschrieben - https://stackoverflow.com/questions/21889843/unique-constraint-vs-checking-before-insert Bitte helfen Sie mir. Vielen Dank. – Steam

3

Wenn es eine Anforderung ist, dass die Werte eindeutig sind --- dann ist eine Einschränkung der einzige garantierte Weg, dies zu erreichen. Die zuverlässige sogenannte Vorabprüfung erfordert eine Sperrung, die diesen Teil Ihres Systems im Wesentlichen zu einem einzigen Benutzer macht.

7

Race-Bedingung ist ein ausgezeichneter Punkt zu beachten.

Warum nicht beides? - Pre-Check, so dass Sie dem Benutzer ein gutes Feedback geben können, aber definitiv die einzigartige Einschränkung als Ihre ultimative Sicherheit haben.

+1

Wenn es um Datenvalidierung geht, ist Redundanz nicht unbedingt eine schlechte Sache. Überprüfen Sie vorne für eine schönere Schnittstelle, überprüfen Sie am hinteren Ende für garantierte Integrität. – araqnid

+0

Ich bin mir der Race Condition nicht bewusst. Kannst du mir bitte sagen, warum man beides machen sollte, wenn das Back-End alles überprüft. Vielen Dank. – Steam

+0

@araqnid - Ich kann nicht sehen, wie die Redundanz hier hilfreich ist. – Steam

3

Verwenden Sie eine Einschränkung (UNIQUE oder PRIMARY KEY). Auf diese Weise wird der Schlüssel für jede Anwendung durchgesetzt. Sie können zusätzliche Prüfungen und Bearbeitungen in einem Geschäftsprozess durchführen, wenn Sie dies tun müssen - entweder vor oder nach dem Einfügen.

Verwandte Themen