AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken MSSQL GUID oder Windows GUID
Thema durchsuchen
Ansicht
Themen-Optionen

MSSQL GUID oder Windows GUID

Ein Thema von Captnemo · begonnen am 16. Okt 2012 · letzter Beitrag vom 17. Okt 2012
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#1

MSSQL GUID oder Windows GUID

  Alt 16. Okt 2012, 13:23
Datenbank: MSSQL • Version: 2005 • Zugriff über: ADO
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?
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: MSSQL GUID oder Windows GUID

  Alt 16. Okt 2012, 13:40
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

AW: MSSQL GUID oder Windows GUID

  Alt 16. Okt 2012, 13:43
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.
$2B or not $2B

Geändert von himitsu (16. Okt 2012 um 13:45 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#4

AW: MSSQL GUID oder Windows GUID

  Alt 16. Okt 2012, 13:49
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#5

AW: MSSQL GUID oder Windows GUID

  Alt 17. Okt 2012, 09:49
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.
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: MSSQL GUID oder Windows GUID

  Alt 17. Okt 2012, 10:18
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
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

AW: MSSQL GUID oder Windows GUID

  Alt 17. Okt 2012, 11:29
Spätestens beim INSERT bei einem PK-Feld wird es von der DB geprüft
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.
$2B or not $2B
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#8

AW: MSSQL GUID oder Windows GUID

  Alt 17. Okt 2012, 14:21
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?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#9

AW: MSSQL GUID oder Windows GUID

  Alt 17. Okt 2012, 14:46
Aus Prinzip?

Sie ist statistisch "theoretisch" weltweit eindeutig. Sie aber nicht eineindeutig.
$2B or not $2B
  Mit Zitat antworten Zitat
WM_CLOSE

Registriert seit: 12. Mai 2010
Ort: königsbronn
398 Beiträge
 
RAD-Studio 2009 Pro
 
#10

AW: MSSQL GUID oder Windows GUID

  Alt 17. Okt 2012, 15:24
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)
Delphi programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:18 Uhr.
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