Peter Bucher - Mein Experiment, meine Spielereien, meine Welt...   ·   Stefan Falz   ·   Jürgen Gutsch   ·   Golo Roden   ·   ASP.NET Zone   ·   Microsoft ASP.NET
Willkommen bei ASP.NET Zone. Anmelden | Registrieren | Hilfe

Primärschlüssel: GUID vs Identity

Am 13. Oktober 2008 haben Golo Roden und ich unter dem Titel Noch Fragen, Roden? Ja, Bucher! angekündigt, jeweils zum ersten eines jeden Monats einen Kommentar zu einem vorab gemeinsam gewählten Thema verfassen zu wollen. Bisher sind in dieser Reihe folgende Kommentare erschienen:

Heute, am 1. Juli 2009, ist es nun wieder so weit, und unser Thema für diesen Monat lautet:

Primärschlüssel: GUID vs Identity

So wohl Golo wie auch ich haben uns unabhängig voneinander im Vorfeld unsere Gedanken gemacht, wie wir diesem Thema gegenüberstehen. Golos Kommentar findet sich zeitgleich in seinem Blog, folgend nun mein Kommentar zu diesem Thema:

In letzter Zeit scheint es immer mehr aufzukommen, GUIDs anstelle von Integers als Primärschlüssel zu benutzen.
Dieser Blogeintrag soll bei der Entscheidung helfen, die mir bekannten und recherchierten Vor- und Nachteile hervorheben und meine persönliche Meinung kundgeben.

Kurz und schmerzlos Vor- und Nachteile:

Guid Vorteile:

  • Der Schlüssel kann unabhängig vom Datenbanksystems vergeben werden.
  • Einzigartigkeit des Schlüssels über jede Tabelle, Datenbank und sogar Server gewährleistet.
  • Das Zusammenführen von Datenbanken ist ohne Änderung der IDs einfach möglich.
  • Unbegrenzte Anzahl an IDs, keine Beschränkung auf den Datentyp wie bspw. int.

Guid Nachteile:

  • Braucht 4 Mal mehr Platz als ein Integer.
  • Dadurch und je nach Aufgabe und Server kann die Performance der Datenbank leiden.
  • Schlecht lesbar und zu merken, bspw. auffallend beim Debugging.
  • Keine nachvollziehbare, chronologische Reihenfolge der IDs.
  • Nicht von allen Plattformen nativ unterstützt.

Identity Vorteile:

  • 4 Mal geringerer Platzbedarf als eine Guid.
  • Kann je nach Situation eine bessere Performance im Gegensatz zu Guids liefern.
  • Gut lesbar und zu merken.
  • Chronologische Reihenfolge der IDs.

Identity Nachteile:

  • Der Schlüssel kann nur vom Datenbanksystem vergeben werden.
  • Einzigartigkeit der Schlüssel ist nur innerhalb einer Tabelle gewährleistet, was beim Zusammenführen von Datenbanken unweigerlich zu Problemen führt.
  • Durch Datentyp begrenzte Anzahl von verfügbaren Schlüsseln für eine Tabelle.
  • Durch Löschen von Datensätzen oder RollBacks entstehen Lücken zwischen den sonst chronologischen IDs.

Mit der Nutzung von GUIDs ist es möglich den / die Schlüssel unabhängig vom Datenbanksystem zu vergeben, das ist bspw. nützlich bei Anwendungen die auch im Offline-Modus laufen können.

Wenn mehrere Tabellen mit Identity-Schlüsseln zusammengeführt werden, müssen die IDs zwangsläufig ändern, da sie nur innerhalb einer Tabelle einzigartig sind. Das führt beispielsweise dazu das Links oder irgendwelche gespeicherten Lesezeichen innerhalb einer Applikation nicht mehr gültig sind.

Ein interessanter Vorteil beim verwenden von GUIDs lässt sich aus der Tatsache erzielen, das die IDs auf über mehrere Tabellen (Auch Datenbanken und Server) einzigartig sind.
Dadurch ist es bspw. möglich eine Tabelle anzulegen, die Zusatzdaten wie bspw. für die Lokalisierung enthält, die auf jede unserer anderer Tabellen zutreffen könnten.
Die Tabelle hat eine Primärschlüssel-Spalte und eine GUID-Spalte als Fremdschlüssel auf einen Datensatz irgend einer Tabelle.
Bei einer Abfrage oder dem Speichern brauchen wir nur die GUID des aktuellen Datensatzes und keine Zusätzlichen Angaben mehr, wie bspw. den die Tabelle zu dem der Datensatz gehört, da es eben nicht Nummern sind die auch in anderen Tabellen vorkommen können.

Für kleine Anwendungen, bspw. im Zusammenspiel von XML als Datenquelle nutze ich immer GUIDs. Die Verwaltung von Identity-Schlüsseln wäre mir da zu aufwändig und dessen Vorteile benötige ich dort gar nicht.
Bei bestehenden Projekten an denen ich mitarbeite wird meistens Identity als Schlüssel verwendet, ausser man benötigt einer der Vorteile von GUIDs.

Ich schimpfe mich bewusst nicht zum Experten was Datenbanken angeht und bin daher gespannt auf die Meinungen aus der Community und von Golo.

Veröffentlicht Mittwoch, 1. Juli 2009 09:37 von Peter Bucher

Kommentare

# re: Primärschlüssel: GUID vs Identity

Was die schlechte Lesbarkeit bzw. Debugging der GUIDs betrifft: Man kann sich für solche Zwecke auch eigene Debug- bzw. Temp-IDs "basteln" ala {08150000-0000-0000-0000-000000000001}

Ciao:

GG ;-)

Dienstag, 7. Juli 2009 13:05 by GG71

# re: Primärschlüssel: GUID vs Identity

Salute GG

Auch wieder wahr, gute Idee :-)

Dienstag, 7. Juli 2009 21:02 by Peter Bucher

# C# oder VB: Welche Sprache soll ich lernen?

Am 13. Oktober 2008 haben Golo Roden und ich unter dem Titel Noch Fragen, Golo? Ja, Bucher! angekündigt,

Montag, 3. August 2009 19:04 by Peter Bucher

# Alles var – oder nicht?

Am 13. Oktober 2008 haben Golo Roden und ich unter dem Titel Noch Fragen, Golo? Ja, Bucher! angekündigt,

Dienstag, 1. September 2009 09:48 by Peter Bucher

# Wieviel Sinn machen Unittests?

Am 13. Oktober 2008 haben Golo Roden und ich unter dem Titel Noch Fragen, Golo? Ja, Bucher! angekündigt,

Montag, 2. November 2009 09:43 by Peter Bucher

# Reflection – Fluch oder Segen?

Am 13. Oktober 2008 haben Golo Roden und ich unter dem Titel Noch Fragen, Roden? Ja, Bucher! angekündigt,

Dienstag, 1. Dezember 2009 21:03 by Peter Bucher

# this oder kein this

Am 13. Oktober 2008 haben Golo Roden und ich unter dem Titel Noch Fragen, Roden? Ja, Bucher! angekündigt,

Dienstag, 16. Februar 2010 21:30 by Peter Bucher

# Felder vs Eigenschaften

Am 13. Oktober 2008 haben Golo Roden und ich unter dem Titel Noch Fragen, Roden? Ja, Bucher! angekündigt,

Sonntag, 14. März 2010 16:53 by Peter Bucher

# Abstraktion

Am 13. Oktober 2008 haben Golo Roden und ich unter dem Titel Noch Fragen, Roden? Ja, Bucher! angekündigt,

Freitag, 9. April 2010 13:22 by Peter Bucher
Anonyme Kommentare sind nicht zugelassen