Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   MSSQL GUID oder Windows GUID (https://www.delphipraxis.net/171031-mssql-guid-oder-windows-guid.html)

Captnemo 16. Okt 2012 12:23

Datenbank: MSSQL • Version: 2005 • Zugriff über: ADO

MSSQL GUID oder Windows GUID
 
Hi,

ich habe gerade ein Projekt, bei dem jeder Datensatz mittels einer GUID eindeutig gekennzeichent werden soll.
Jetzt habe ich 2 Möglichkeiten. Entwender mit vom Windows eine GUID erstellen zu lassen, oder von der DB.

Jetzt habe ich 2 Fragen:
1. wie groß ist die Wahrscheinlichkeit, dass bei verschiedenen PC's im Netzwerk möglicherweise doch mal die gleiche GUID erzeugt werde könnte?
2. wenn ich die von der DB erzeugen lasse, prüft der SQL-Server vor der Vergabe, ob diese GUID schon einmal in der DB verwendet wurde, oder wird die nur nach einem Zufallsprinzip vergeben?

Bernhard Geyer 16. Okt 2012 12:40

AW: MSSQL GUID oder Windows GUID
 
Die doppelte Vergabe von GUIDs kannst du vernachlässigen.

Die Clientseitige Vergabe hat den vorteil das du nicht immer aufwändig die vom Server vergebene GUID abfragen musst. Bei AutoInc-Feldern gibts ja beim MS SQL-Server mit Repliation einige Fallstricke. Weiß jetzt nicht inwieweit das auch hier bei GUID's probleme bereiten könnte.

himitsu 16. Okt 2012 12:43

AW: MSSQL GUID oder Windows GUID
 
Die GUID-Erstellungsfunktion nutzt unter Anderem den Zeitstempel (wie lange Windows schon läuft) und auf die selbe Millisekunde kommt man recht selten.

Nja, Wenn die GUID wirklich eindeutig sein muß, dann mußt du sie sowieso prüfen, also ob sie nicht schon in der DB vorkommt.
Da könnteste dir also auch gleich eine Datenbankfunktion in der DB anlegen, welche diese GUID direkt im Before-Post erzeugt und prüft. (praktisch wie bei diesen AutoInc-Feldern)

Aber die Chance, um überhaupt einmal die selbe GUID zu erzeugen, liegt eh "nur" bei 1 zu 2^128.

Uwe Raabe 16. Okt 2012 12:49

AW: MSSQL GUID oder Windows GUID
 
Zitat:

Zitat von Captnemo (Beitrag 1187243)
1. wie groß ist die Wahrscheinlichkeit, dass bei verschiedenen PC's im Netzwerk möglicherweise doch mal die gleiche GUID erzeugt werde könnte?
2. wenn ich die von der DB erzeugen lasse, prüft der SQL-Server vor der Vergabe, ob diese GUID schon einmal in der DB verwendet wurde, oder wird die nur nach einem Zufallsprinzip vergeben?


1. Die Wahrscheinlichkeit geht bei Windows-Systemen gegen Null. Bislang ist kein solcher Fall bekannt geworden.
2. Die Verwendung einer GUID-Column in einem Table schließt nicht automatisch aus, daß die GUID nicht mehrfach vorkommen kann. Dies ist Aufgabe eines PRIMARY- oder UNIQUE-Keys und ist vollkommen unabhängig davon, ob GUID oder sonst ein Typ. Du müsstest den Wert für die GUID sowieso über NEWID erzeugen lassen. Das ist etwas anders als bei IDENTITY Columns.

Captnemo 17. Okt 2012 08:49

AW: MSSQL GUID oder Windows GUID
 
Danke für all die Antworten. Letztlich habt ihr meine Vermutung bestätigt.

Ich hatte mal in irgendeinem Forum gelesen, dass jemand ein Problem mit einer doppelten GUID hatte. Welchen Hintergrund das hatte konnte ich da aber nicht herauslesen.
Deswegen kamen mir dann doch noch Zweifel.

Ich hätte gedacht, dass MS bei der GUID über SQL möglicherweise zusätzlich prüft, ob es die schon gibt. Aber gut, bei der Wahrscheinlichkeit ist das wohl nicht notwendig.

Da ein SQL-Server ja meist auf einem Windows-Server läuft, und dieser in der Regel selten neu gestartet wird (sollte ;-) ), ist die GUID-vergabe über diesen ja noch sicherer, wenn diese aus dem Zeitstempel erzeugt wird.

Letztlich werde ich dann aber doch die GUID-Erzeugung am Client machen, weil mir das völlig ausreicht.
Wie Bernhard es schon erwähnt hat, hatte ich auch schon mein Fallstricke mit AutoInc-Feldern, so dass ich diese nicht gerne verwende.

Dank an alle.

Bernhard Geyer 17. Okt 2012 09:18

AW: MSSQL GUID oder Windows GUID
 
Zitat:

Zitat von Captnemo (Beitrag 1187345)
Ich hätte gedacht, dass MS bei der GUID über SQL möglicherweise zusätzlich prüft, ob es die schon gibt.

Spätestens beim INSERT bei einem PK-Feld wird es von der DB geprüft :mrgreen:

himitsu 17. Okt 2012 10:29

AW: MSSQL GUID oder Windows GUID
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1187349)
Spätestens beim INSERT bei einem PK-Feld wird es von der DB geprüft :mrgreen:

Die Frage ist ja, ob man will, daß es dann knallt.
Ich fände es schöner, wenn durch soein automatisch berechnetes Feld nicht gleich das ganze Insert in nicht nachvollziehbarer Weise wegknallt.

Furtbichler 17. Okt 2012 13:21

AW: MSSQL GUID oder Windows GUID
 
Die GUID ist ein weltweit eindeutiger Identifikator. Die Wahrscheinlichkeit, das zwei identische GUID in einem System existieren ist so gering, das sich niemand ersthaft mit diesem Problem beschäftigt. Wieso willst Du der erste sein?

himitsu 17. Okt 2012 13:46

AW: MSSQL GUID oder Windows GUID
 
Aus Prinzip?

Sie ist statistisch "theoretisch" weltweit eindeutig. Sie aber nicht eineindeutig.

WM_CLOSE 17. Okt 2012 14:24

AW: MSSQL GUID oder Windows GUID
 
Die doppelte GUID lässt sich recht einfach provozieren.
Wenn das dann einen Programmfehler verursacht, der Schaden verursacht,
kann man auch nicht sagen "Das war ja sowas von unwahrscheinlich, deshalb habe ich keine Fehlerbehandlung eingebaut".
Die GUID ist nunmal eine endliche Zahl und kann daher nicht ohne weiteres als "unique" bezeichnet werden. Eine Überprüfung ist immer unerlässlich!
(Wobei ich glaube dass SQL-Server eine solche Überprüfung schon eingebaut hat)


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:33 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz