<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://www.aspnetzone.de/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Peter Bucher : Identity, Guid, Streitgespr&amp;#228;ch</title><link>http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Identity/Guid/Streitgespr_26002300_228_3B00_ch/default.aspx</link><description>Ordnungsbegriffe: Identity, Guid, Streitgespr&amp;#228;ch</description><dc:language /><generator>CommunityServer 2.1 SP2 (Build: 61120.2)</generator><item><title>Primärschlüssel: GUID vs Identity</title><link>http://www.aspnetzone.de/blogs/peterbucher/archive/2009/07/01/prim-rschl-ssel-guid-vs-identity.aspx</link><pubDate>Wed, 01 Jul 2009 07:37:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:211087</guid><dc:creator>Peter Bucher</dc:creator><slash:comments>9</slash:comments><comments>http://www.aspnetzone.de/blogs/peterbucher/comments/211087.aspx</comments><wfw:commentRss>http://www.aspnetzone.de/blogs/peterbucher/commentrss.aspx?PostID=211087</wfw:commentRss><description>&lt;P&gt;Am 13. Oktober 2008 haben &lt;A href="http://www.des-eisbaeren-blog.de/"&gt;Golo Roden&lt;/A&gt; und ich unter dem Titel &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2008/10/13/noch-fragen-roden-ja-bucher.aspx"&gt;Noch Fragen, Roden? Ja, Bucher!&lt;/A&gt; 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: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;1. Juni 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/06/01/heisst-die-zukunft-ria.aspx"&gt;Heißt die Zukunft RIA?&lt;/A&gt; 
&lt;LI&gt;1. Mai 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/05/01/woran-erkennt-man-einen-guten-entwickler.aspx"&gt;Woran erkennt man einen guten Entwickler?&lt;/A&gt; 
&lt;LI&gt;1. April 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/04/01/interfaces-vs-abstrakte-klassen.aspx"&gt;Interfaces vs abstrakte Klassen&lt;/A&gt; 
&lt;LI&gt;1. März 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/03/01/sinn-und-zweck-von-aop.aspx"&gt;Sinn und Zweck von AOP&lt;/A&gt; 
&lt;LI&gt;1. Februar 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/02/01/die-forderung-nach-softwarequalit-t.aspx"&gt;Die Forderung nach Softwarequalität&lt;/A&gt; 
&lt;LI&gt;1. Januar 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/01/01/soa-vs-woa.aspx"&gt;SOA vs WOA&lt;/A&gt; 
&lt;LI&gt;1. Dezember 2008: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2008/12/01/dynamic-language-runtime-net-quo-vadis.aspx"&gt;Dynamic Language Runtime: .NET, quo vadis?&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Heute, am 1. Juli 2009, ist es nun wieder so weit, und unser Thema für diesen Monat lautet: &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;Primärschlüssel: GUID vs Identity&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;So wohl Golo wie auch ich haben uns unabhängig voneinander im Vorfeld unsere Gedanken gemacht, wie wir diesem Thema gegenüberstehen. &lt;A href="http://www.des-eisbaeren-blog.de/post/2009/07/01/Primarschlussel-GUID-vs-Identity.aspx"&gt;Golos Kommentar&lt;/A&gt; findet sich zeitgleich in seinem Blog, folgend nun mein Kommentar zu diesem Thema:&lt;/P&gt;
&lt;P&gt;In letzter Zeit scheint es immer mehr aufzukommen, GUIDs anstelle von Integers als Primärschlüssel zu benutzen. &lt;BR&gt;Dieser Blogeintrag soll bei der Entscheidung helfen, die mir bekannten und recherchierten Vor- und Nachteile hervorheben und meine persönliche Meinung kundgeben.&lt;/P&gt;
&lt;P&gt;Kurz und schmerzlos Vor- und Nachteile:&lt;/P&gt;
&lt;P&gt;Guid Vorteile:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Der Schlüssel kann unabhängig vom Datenbanksystems vergeben werden. 
&lt;LI&gt;Einzigartigkeit des Schlüssels über jede Tabelle, Datenbank und sogar Server gewährleistet. 
&lt;LI&gt;Das Zusammenführen von Datenbanken ist ohne Änderung der IDs einfach möglich. 
&lt;LI&gt;Unbegrenzte Anzahl an IDs, keine Beschränkung auf den Datentyp wie bspw. &lt;A href="http://msdn.microsoft.com/de-de/library/5kzh1b5w(VS.80).aspx"&gt;int&lt;/A&gt;. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Guid Nachteile:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Braucht 4 Mal mehr Platz als ein Integer. 
&lt;LI&gt;Dadurch und je nach Aufgabe und Server kann die Performance der Datenbank leiden. 
&lt;LI&gt;Schlecht lesbar und zu merken, bspw. auffallend beim Debugging. 
&lt;LI&gt;Keine nachvollziehbare, chronologische Reihenfolge der IDs. 
&lt;LI&gt;Nicht von allen Plattformen nativ unterstützt. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Identity Vorteile:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;4 Mal geringerer Platzbedarf als eine Guid. 
&lt;LI&gt;Kann je nach Situation eine bessere Performance im Gegensatz zu Guids liefern. 
&lt;LI&gt;Gut lesbar und zu merken. 
&lt;LI&gt;Chronologische Reihenfolge der IDs. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Identity Nachteile:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Der Schlüssel kann nur vom Datenbanksystem vergeben werden. 
&lt;LI&gt;Einzigartigkeit der Schlüssel ist nur innerhalb einer Tabelle gewährleistet, was beim Zusammenführen von Datenbanken unweigerlich zu Problemen führt. 
&lt;LI&gt;Durch Datentyp begrenzte Anzahl von verfügbaren Schlüsseln für eine Tabelle. 
&lt;LI&gt;Durch Löschen von Datensätzen oder RollBacks entstehen Lücken zwischen den sonst chronologischen IDs. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;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.&lt;/P&gt;
&lt;P&gt;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.&lt;/P&gt;
&lt;P&gt;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.&lt;BR&gt;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.&lt;BR&gt;Die Tabelle hat eine Primärschlüssel-Spalte und eine GUID-Spalte als Fremdschlüssel auf einen Datensatz irgend&amp;nbsp;einer Tabelle.&lt;BR&gt;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.&lt;/P&gt;
&lt;P&gt;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. &lt;BR&gt;Bei bestehenden Projekten an denen ich mitarbeite wird meistens Identity als Schlüssel verwendet, ausser man benötigt einer der Vorteile von GUIDs.&lt;/P&gt;
&lt;P&gt;Ich schimpfe mich bewusst nicht zum Experten was Datenbanken angeht und bin daher gespannt auf die Meinungen aus der Community und von &lt;A href="http://www.des-eisbaeren-blog.de/"&gt;Golo&lt;/A&gt;.&lt;/P&gt;&lt;img src="http://www.aspnetzone.de/aggbug.aspx?PostID=211087" width="1" height="1"&gt;</description><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Streitgespr_26002300_228_3B00_ch/default.aspx">Streitgespr&amp;#228;ch</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Identity/default.aspx">Identity</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Datenbanken/default.aspx">Datenbanken</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Guid/default.aspx">Guid</category></item></channel></rss>