Unikátní identifikace

Vytvořit identifikátor, který bude jednoznačný v místě a čase je snaha mnoha vývojářů již mnoho let, například se dlouho používal (a stále používá) timestamp (v SQL Serverech je tento datový typ přímo podporován) a pomocí timestampu by rovněž šlo generovat jednoznačné identifikátory, protože je poměrně dost nepravděpodobné, že by se dva záznamy obchodních zástupců uložily na setinu vteřiny ve stejný okamžik.

Příklad jednoduché tvorby časového razítka je následující:
TS = Day(Date) & Month(Date) & Year(Date) & Hour(Time) & Minute(Time) & Second(Time)

Tím dostanete již hodně jednoznačný identifikátor. Ten pak lze uložit spolu se záznamem do databáze.

Další z možností (a k té jsem se chtěl dostat) je využití globálních identifikátorů generovaných MS SQL Serverem. Microsoft SQL Server nabízí přímo datový typ uniqueidentifier, který je binární hodnota. Pokud is takovéto pole vytvoříte v tabulce, doporučuji Vám ještě si jako jeho defaultní hodnotu nastavit NEWID().

CREATE TABLE cust

   ( id bigint identity(1,1) NOT NULL,
     cust_guid uniqueidentifier NULL DEFAULT newid(),
     company varchar(30) NULL
   )

Funkce NEWID() je součástí MS SQL Serveru a umí vygenerovat unikátní identifikátor (GUID). V dřívějších verzích MS SQL Serveru se používala pro vygenerování GUID například i MAC adresa síťové karty v kombinaci s časem, verze 2000 již generuje náhodné číslo, neboť se ukázalo, že MAC adresa nebyla zase až tak ideální, protože některé síťové karty nepoužívaly unikátní MAC adresu.

Pokud tedy máte v tabulce pole typu uniqueidentifier s výchozí hodnotou NEWID(), při založení nového záznamu se do něj automaticky uloží nové GUID, které vypadá zhruba následovně: {B85E62C3-DC56-40C0-852A-49F759AC68FB}. Ovšem, to ještě naši věc vůbec, ale vůbec neřeší. A hned Vám vysvětlím proč.

Pokud bychom totiž chtěli tento identifikátor použít pro vložení do hlavičky nabídky, kde bude rovněž pro něj připraveno pole typu uniqueidentifier, tak narazíme, neboť VB nemá odpovídající datový typ.

Řešením je změna typu pole na varchar, ale využití funkce NEWID() pro vygenerování unikátního identifkátoru.

Zpět   Další

Autor: The Bozena