Sql Server, der DateTime als Primärschlüssel verwendet

9

Hi meine Fragen sind ähnlich wie:

MySQL: Verwenden von DATETIME als Primärschlüssel

Aber ich bin speziell an Sql Server interessiert und möchte mich der Frage praktisch mit einem bestimmten Szenario statt theoretisch wie in dem anderen Beitrag nähern.

Ich möchte Ereignisse / Aktionen speichern, die Benutzer ausführen. Die Wahrscheinlichkeit, dass mehr als ein Benutzer eine Aktion in derselben Lücke von 100 ms ausführt, ist sehr gering und eine seltene Kollision ist akzeptabel. Wenn ich 10ms oder sogar 1ms Lücken diskret ausdrücken könnte, bin ich sehr glücklich mit den Risiken.

Daher stellt sich die Frage, ob ich eine DateTime als Primärschlüssel anstelle eines eindeutigen Bezeichners verwenden kann, da ich regelmäßig die letzten 100 Ereignisse abfragen und die Ereignisse nach der Zeit sortieren werde, zu der sie aufgetreten sind.

    
Jonathon Kresner 23.02.2011, 01:53
quelle

4 Antworten

2

Wenn Sie wirklich einen Ersatzschlüssel für diese Spalte (ID / Identitätsspalte) vermeiden möchten, würde ich die datetime-Spalte mit der Benutzer-ID-Spalte für einen zusammengesetzten Schlüssel kombinieren. Das klingt nach einer natürlicheren Anpassung Ihrer Daten.

    
Joel Coehoorn 23.02.2011 02:06
quelle
1

Ja, das kannst du, aber es klingt für mich sehr schlecht. Wenn Sie sich wirklich Sorgen um die Leistung machen, können Sie eine sequenzielle eindeutige Kennung verwenden, eine automatisch inkrementierende Ganzzahl, oder Sie können der DateTime-Spalte einen eigenen gruppierten Index zuweisen (empfohlen).

    
cbp 23.02.2011 01:56
quelle
0

Damit seltene Kollisionen akzeptabel sind, können Sie den Zeitstempel wirklich nicht verwenden, da Kollisionen auftreten.

Sie könnten Codeumgehungen umgehen, indem Sie eine intelligente Prozedur verwenden, die die Daten leicht modifiziert, aber warum sollten Sie sich sorgen, wenn ein Index für den Zeitstempel ausreicht und viel einfacher zu implementieren ist.

Dieser Artikel ist Informativ zu C # - spezifischen Genauigkeitsfragen.

    
Nat 23.02.2011 02:06
quelle
0

Verwenden Sie in SQL Server 2008 DATETIME2 und nicht DATETIME. Sie können eine Genauigkeit von bis zu 100 Nanosekunden in SQL Server 2008 erreichen.

Wenn Sie manchmal für eine bestimmte Zeit mehr als eine Zeile aufnehmen müssen, wenn auch nur selten, dann bin ich nicht sicher, was Sie erreichen möchten, indem Sie Datum und Uhrzeit zu einem Schlüssel machen. Wichtige Kriterien für die Auswahl der Schlüssel sind Vertrautheit, Einfachheit und Stabilität. Wenn Sie davon ausgehen, dass es für Ihre Anforderungen sinnvoll ist, erscheint ein Datum und eine Uhrzeit sinnvoll.

    
sqlvogel 23.02.2011 08:09
quelle