ID і RUID

Материал из GedeminWiki
Перейти к: навигация, поиск

Кожны бізнэс аб'ект, які захоўваецца ў базе дадзеных мае ўнікальны ў межах гэтай базы ідэнтыфікатар (ID), які з'яўляецца дадатным цэлым лікам, большым за нуль. Дыяпазон 1..146999999 зарэзерваваны для сістэмнага выкарыстаньня. Аб'екты, створаныя карыстальнікам, альбо сістэмай пад час працы атрымоўваюць ідэнтыфікатары ў дыяпазоне 147000000..2147483647.

Ідэнтыфікатар аб'екту знаходзіцца ў поле ID галоўнай табліцы бізнэс аб'екту. Тып поля задаецца праз дамен dintkey. Гэта поле з'яўляецца пярвічным ключом табліцы.

Унікальнасць ідэнтыфікатару ў межах адной базы дадзеных гарантуецца праз выкарыстаньне адзінага генератара GD_G_UNIQUE для яго генерацыі.

Доступ да ідэнтыфікатару бізнэс аб'екта можна атрымаць альбо непасрэдна звярнуўшыся да поля праз функцыю FieldByName, альбо праз уласцівасць ID. Выкарыстоўваць доступ праз Fields[0] нельга, бо не гарантуецца, што поле-ідэнтыфікатар будзе першым па парадку ў выбарцы. Пры выкарыстоўваньні функцыі FieldByName імя поля пажадана атрымоўваць праз клас-функцыю GetKeyField.

Прыклад:

...
with Obj do
  CurrID := FieldByName(GetKeyField(SubType));
...

альбо

...
CurrID := Obj.ID;
...

Содержание

Адсутнасць аб'екту

У Гедыміне прынята, што адсутнасць аб'екту абазначаецца праз -1. Там, дзе функцыя мусіць вяртаць ідэнтыфікатар аб'екту, можа быць вернутае значэньне -1, як прызнак таго, што аб'екта няма. Калі функцыя абавязкова павінна вярнуць ідэнтыфікатар існуючага аб'екту -- гэта асобна пазначаецца ў дакументацыі. Як правіла, калі на ўваход такой функцыі пададзеныя параметры, для якіх у базе дадзеных няма адпаведнага аб'екту, генеруецца выключная сітуацыя.

Ліміт ID

Як бачым, у адной базе дадзеных можа быць створана максімальна 2000483647 аб'ектаў. Ці не за мала гэта? Калі ствараць па адным аб'екце ў сэкунду бесперапынна, тады гэтага дыяпазону хопіць больш чым на 63 гады. Калі кожны аб'ект у сярэднім будзе займаць на дыску 100 байт -- памер базы складзе ~186 Гб.

Унікальны ідэнтыфікатар базы дадзеных

Кожная база дадзеных мае свой унікальны ідэнтыфікатар (DBID). Яго значэньне захоўваецца ў генератары GD_G_DBID. Ідэнтыфікатар базы дадзеных, гэта дадатны цэлы лік. Інтэрвал 1..2000 зарэзерваваны для сістэмнага выкарыстаньня. Калі база ня мае свайго унікальнага ідэнтыфікатару (генератар GD_G_DBID мае значэньне 0), ён генеруецца пры першым падключэньні да яе праграмы GEDEMIN.EXE.

Атрымаць ідэнтыфікатар базы дадзеных можна праз уласцівасць DBID глабальнага аб'екту IBLogin, вызначанага ў модулі gd_security.pas, альбо праз запыт:

...
S ELECT GEN_ID(gd_g_dbid, 0) FROM rdb$database
...

Унікальны ідэнтыфікатар запісу

Пры пераносе дадзеных з адной базы ў другую, неабходна адсочваць іх тоеснасць. Кожны запіс павінен мець унікальны для ўсіх існуючых баз дадзеных ідэнтыфікатар. Такі глабальна унікальны ідэнтыфікатар запісу (RUID) складае пара ID, DBID. Ідэнтыфікатар запісу гарантавана ўнікальны для адной базы дадзеных, а ідэнтыфікатар базы дадзеных унікальны для ўсіх існуючых базаў.

Адпаведнасць RUID-ID захоўваецца ў табліцы GD_RUID.

Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты