Unikátní identifikace

Pokud zmodifikujeme pole v tabulce adresáře tak, že již nebude typu uniqueidentifier, nýbrž varchar, můžeme do něj ukládat podle libosti. Ve VB si pak vytvoříme recordset, který bude vracet unikátní číslo v textové podobě, vygenerované SQL Serverem. SQL zápis recordsetu vypadá následovně:

SELECT CONVERT(varchar(255), NEWID()) AS MyID

Čili, v aplikaci si stačí pouze zjistit hodnotu MyID v tomto recordsetu. Zkuste si to v návrháři dotazů v DataEnvironmentu, budete dostávat nějaké takovéto hodnoty:

FDC0E026-6252-4599-BEDE-8048CD106C90
DA9D8D36-7508-4ACB-9FD5-08C280397E31
7F056AEC-7CC7-4A14-A6E4-BFFABB8EAB9F

Jenom na okraj, všimněte si, že znak na 13. místě (nepočítám pomlčky) je vždy číslo 4. Toto číslo určuje, že se jedná o GUID generovaný Microsoftem.

Hodnotu MyID nyní stačí jenom ukládat do textového pole v tabulce adresáře a do hlaviček nabídek, místo ID záznamu z adresáře ukládat tento unikátní identifikátor.

Možná pro Vás předchozí vysvětlování bylo příliš nesrozumitelné, zkusím to tedy teď pospat jednoduše a bez okras:

  • V tabulce si vytvořte pole typu varchar, které bude pro jednoznačný identifikátor

  • V DataEnvironmentu si vytvořte recordset pro generování textového GUID

  • Při založení nového záznamu vygenerujte nové GUID a toto uložte do tabulky, kde potřebujete jednoznačně identifikovat záznam

  • Při další práci se neodkazujte na ID záznamu, ale na jednoznačný identifikátor.

Nyní ještě jedna věc na konec. Nikdy nepoužívejte pole s unikátními identifikátory pro vytvoření primárního klíče v tabulce. Obrovsky byste tím snížili výkon aplikace, neboť ať již jako varchar anebo uniqueidentifier je indexování tohoto pole několikrát pomalejší, než indexování pole bigint. Proto vždy mějte primární klíč vytvářen pomocí polí bigint s IDENTITY (v úvodu článku jsem psal, že toto nebudeme zavrhovat když používáme GUID).

No a nyní mi již jenom zbývá popřát hodně štěstí :)

Zpět

Autor: The Bozena