2009-08-15 8 views
2

Was ist die beste Vorgehensweise für die Verarbeitung von Primärschlüsseln mit einem ORM gegenüber Oracle oder SQL Server?Primärschlüssel in Oracle und SQL Server

Oracle - Sollte ich eine Sequenz und einen Trigger verwenden oder das ORM damit umgehen? Oder gibt es einen anderen Weg?

SQL Server - Sollte ich den Bezeichner Datentyp oder irgendwie anders verwenden?

+0

Es gibt kein Produkt namens "MsSQL". Es ist "SQL Server". Es wird einfacher für Menschen sein, Ihre Frage zu finden, wenn Sie die richtigen Begriffe verwenden. –

Antwort

1

Wenn Sie irgendeine Art von ORM verwenden, würde ich vorschlagen, dass Sie Ihre primäre Schlüsselgenerierung behandeln lassen. In SQL Server und Oracle.

0

Manchmal gibt es eine natürliche, eindeutige Kennung für eine Tabelle. Zum Beispiel kann jede Zeile in einer Benutzertabelle durch die Spalte UserName eindeutig identifiziert werden. In diesem Fall empfiehlt es sich, UserName als Primärschlüssel zu verwenden.

Betrachten Sie auch Tabellen, die verwendet werden, um eine Viele-zu-Viele-Beziehung zu bilden. Eine UserGroupMembership-Tabelle enthält UserId- und GroupId-Spalten, die der Primärschlüssel sein sollten, da die Kombination die Tatsache eindeutig kennzeichnet, dass ein bestimmter Benutzer Mitglied einer bestimmten Gruppe ist.

1

Mit jeder Datenbank würde ich eine Client-generierte Guid für den Primärschlüssel verwenden (die UniqueIdentifier in SQL Server oder RAW (20) in Oracle zugeordnet wäre). Trotz der Leistungseinbußen bei JOINs, wenn ich einen Guid-Fremdschlüssel verwende, tendiere ich dazu, mit getrennten Clients und replizierten Datenbanken zu arbeiten, daher ist es in der Lage, eindeutige IDs auf dem Client zu generieren. Guid IDs haben auch Vorteile beim Arbeiten mit einem ORM, da sie Ihr Leben erheblich vereinfachen.

+0

Was ist, wenn ein natürlicher Schlüssel verfügbar ist? –

+0

@John: Ich würde definitiv einen natürlichen Schlüssel verwenden, wenn es einen gab. Ich bin einfach daran gewöhnt, dass kein natürlicher Schlüssel verfügbar ist. :) – MusiGenesis

+0

Für SQL Server ist die Verwendung von GUIDs ein Primärschlüssel eine WIRKLICH WAHR schlechte Wahl, da der Primärschlüssel standardmäßig auch der Clustering-Schlüssel für die Tabelle ist und die Verwendung von GUIDs für HTAT zu einer gottverdammten Indexfragmentierung führt Performance. –

1

Es ist eine gute Idee, sich daran zu erinnern, dass Datenbanken eine von einer Frontend-Anwendung unabhängige Lebensdauer haben. Datensätze können durch Batch-Prozesse, Web-Services, Datenaustausch mit anderen Datenbanken, sogar verschiedene Anwendungen, die sich die gleiche Datenbank teilen, eingefügt werden.

Daher ist es sinnvoll, wenn eine Datenbanktabelle für ihre eigene Kennung zuständig ist oder diese Fähigkeit zumindest besitzt. Zum Beispiel kann in Oracle ein BEFORE INSERT-Trigger überprüfen, ob ein Wert für seinen Primärschlüssel bereitgestellt wurde und wenn nicht, einen eigenen Wert generieren.

Sowohl Oracle als auch SQL Server können GUIDs generieren. Dies ist kein ausreichender Grund, die Identitätsgenerierung an den Client zu delegieren.

+0

Ich sehe nicht, wo das OP irgendwas über die Identitätsgenerierung auf dem Client gesagt hat. Kannst du sagen, wo du das gesehen hast? –

+0

Es war etwas, was MusicGenesis sagte. – APC

+0

APC möchte Dinge hinzufügen, die nicht wirklich da sind - wie das "c" in MusiGenesis. =) – MusiGenesis

Verwandte Themen