Datové typy při provozu databází v prostředí Microsoft

Doc. Dr. Vladimír Homola, Ph.D.

Úvod

Zcela zásadní je v konkrétním databázovém systému přesné určení množiny množin, které poskytují své prvky (= hodnoty) do n-tic (=záznamů) libovolné relace (=tabulky), kterou lze v systému vytvořit a udržovat.

Firma Microsoft se významně podílela na budování databázových prostředí jak obecně, tak konkrétních implementací. Ve své řadě systémů známých jako nejrůznější "Wokna", provozovaných nejčastěji na strojích řady PC bázovaných procesorem (a matematickým koprocesorem) Intel, staví na hardwarových typech s pochopitelných důvodů: instrukce procesoru zpracovávající hardwarové typy dat jsou evidentně nejrychlejším a nejoptimálnějším nástrojem pro použití v databázových programech.

Na druhé straně se stejná firma musela zabývat přístupem k datům jiných systémů. Jejich autoři však stáli před stejným problémem, a to naštěstí vedlo k jisté unifikaci v realizacích datových modelů a tedy i datových typů.

Obecným nástrojem pro správu databází a čerpání informací se postupem času stal dotazovací jazyk SQL (Structured Query Language). Pomocí příkazů jazyka lze tabulky databází vytvořit a upravit. Příkazy tedy musí mít možnost označit typ dat konkrétního sloupce případně jeho další atributy. Tak např. příkaz

create table VYDAJE (DATUM date, CENA numeric, NAKOUPENO text(30))

vytváří tabulku VYDAJE se třemi sloupci (DATUM, CENA, NAKOUPENO), přičemž ve sloupci DATUM se budou uchovávat datumové, ve sloupci CENA číselné a ve sloupci NAKOUPENO textové údaje. Typy dat jsou označeny klíčovými slovy date, numeric, text.

V jednom (operačním) systému se běžně může uchovávat několik databází (=zdrojů dat) různých formátů. Je to dáno historicky (např. dBase - formát .DBF), požadavky na maximální zabezpečení (servery na úrovni operačního systému) apod. Příkazy jsou vydávány jádru konkrétního databázového systému, který je interpretuje, pomocí driverů - řadičů příslušných ovladačů dat (viz obrázek vlevo níže). Na obrázku vpravo je pak znázorněn případ, kdy je možno požadovat data i od běžících serverů, ne nutně téhož (operačního) systému.

Pro obecné použití jazyka a pro přenositelnost je žádoucí, aby pokud možno všichni poskytovatelé dat přijímali tentýž tvar příkazů včetně klíčových slov. Při použití klíčových slov ve významu typů hodnot je naopak nežádoucí, aby stejná klíčová slova označovala jinou přijímanou množinu hodnot nebo jiná omezení na ni kladenou.
 

Přístup k datům v systémech s databázovým jádrem

Přístup k datům v systémech i se servery SQL - příklad pro MySQL


 

V současné době - z pohledu uživatelů systémů Microsoftu - lze pozorovat několik jemně se odlišujících verzí jazyka SQL.

Pozn.: Databázový program Access z Microsoft Office používá J-SQL.

Obecné typy

Do databází různých systémů lze čerpat hodnoty z následujících - většinou instrukcemi (ko)procesoru zpracovatelných - množin [v hranatých závorkách jsou tučně uvedena klíčová slova typu použitelná v dané verzi SQL; je-li jich více, jsou to synonyma].

Pozn.: Verze M-SQL má hodnoty některých typů mírně odlišné od ostatních (např. minimální datum je 1.1.1000 místo jinak uváděného 1.1.100).

Bajt

Množina 256 hodnot celých čísel z intervalu <0,255>. Každá hodnota obsazuje 1 byte. [A-SQL: nemá. J-SQL: byte. S-SQL: tinyint. M-SQL: tinyint unsigned - dvě klíčová slova.]

Celé číslo

Množina 65 536 hodnot celých čísel z intervalu <-32 768, +32 767>. Každá hodnota obsazuje 2 byty. [A-SQL: smallint. J-SQL: smallint, short. S-SQL: smallint. M-SQL: smallint.]

Dlouhé celé číslo

Množina 4 294 967 296 hodnot celých čísel z intervalu <-2 147 483 648, +2 147 483 647>. Každá hodnota obsazuje 4 byty. [A-SQL: integer. J-SQL: integer, long. S-SQL: integer. M-SQL: integer, int.]

Desetinné číslo v jednoduché přesnosti

Množina 4 294 967 296 hodnot racionálních čísel z intervalu <-3.402823 x 1038, +3.402823 x 1038>. Každá hodnota obsazuje 4 byty. Nejmenší kladné číslo různé od nuly je 1.401298 x 10-45.  [A-SQL: real. J-SQL: real, single. S-SQL: real. M-SQL: float.]

Desetinné číslo ve dvojnásobné přesnosti

Množina zhruba 1.845 x 1019 hodnot racionálních čísel z intervalu <-1.79769313486231 x 10308, +1.79769313486232 x 10308>. Každá hodnota obsazuje 8 bytů. Nejmenší kladné číslo různé od nuly je 4.94065645841247 x 10-324. [A-SQL: float. J-SQL: float, double. S-SQL: float. M-SQL: double, real.]

Text

Množina zhruba 10618 textových řetězců, z nichž každý obsahuje žádný, jeden až 256 znaků. Jeden znak je přitom uložen pod svým jednobytových kódem dle zvolené kódové tabulky znaků. [A-SQL: nemá. J-SQL: text. S-SQL: text. M-SQL: tinytext.]

Memo

Množina zhruba 10157 713 textových řetězců, z nichž každý obsahuje žádný, jeden až 65 534 znaků. Jeden znak je přitom uložen pod svým jednobytových kódem dle zvolené kódové tabulky znaků. Na rozdíl od předchozího typu Text může Memo obsahovat i znaky pro odřádkování. [A-SQL: nemá. J-SQL: memo. S-SQL: nemá. M-SQL: text.]

Date

Množina 3 615 900 kalendářních datumů počínaje 1.1. roku 100 a konče 31.12. roku 9999. Každé takové datum je pak representováno hodnotou Double (viz výše) - tedy racionálním číslem, přičemž celá část takového čísla je pořadové číslo dne počínaje 30.12.1899 (to je den s pořadovým číslem 0). 1.1.100 je den s pořadovým číslem -657 434 a 31.12.9999 je den s pořadovým číslem 2 958 465. Desetinná část racionálního čísla vyjadřuje zlomek dne, tedy čas v daném dni (např. 0.75 nějakého dne je 6 hodin večer). Každé jedno kalendářní datum kolem roku 2000 má zhruba 1.374 x 1011 různých časových údajů - jinak řečeno, existuje zhruba 1.374 x 1011 různých racionálních čísel majících stejnou celou část a lišících se částí desetinnou. Tím je dána i přesnost zaznamenání časového údaje - kolem roku 2000 to je zhruba 1.26 x 10-6 vteřiny. [A-SQL: date. J-SQL: date, datetime. S-SQL: datetime. M-SQL: date.]

Raritou je ve firmě Microsoft tento fakt: počátek datumů v programu Access této firmy je skutečně 30.12.1899. Ovšem počátkem datumů v programu Excel téže firmu je 31.12.1899 (tj. o jeden den víc), přičemž konverze dat mezi oběma programy probíhá v pořádku - prostě odečtou nebo přičtou jedničku. Proč si raději nedali tu práci se sjednocením, to snad neví ani kolega Gates.

Logical

Množina dvou hodnot obvykle označovaných {Ano, Ne}, {True, False}, {0, 1}, {Yes, No} apod. Teoreticky stačí pro uchování jedné hodnoty této množiny jeden bit, z praktických důvodů se často používá jeden byte s tím, že nulový byte reprezentuje hodnotu Ne, všechny ostatní hodnoty Ano. [A-SQL: nemá. J-SQL: bit, logical, yesno. S-SQL: bit. M-SQL: bit.]

Další typy prostředí Windows

Do databází lze čerpat hodnoty i z dalších množin. Ty však už mohou být systémově závislé: zatímco hodnota některé množiny je v jednom (zde operačním) systému podporována, ve druhém ne - nebo je podporována jinak. Níže jsou uvedeny ty množiny, které podporují systémy řady Windows firmy Microsoft.

Objekt OLE

Množina objektů OLE (Object Linking and Embedding), každý o velikosti žádný, jeden až zhruba 2 mld. bytů. Pod pojmem OLE se rozumí unifikované prostředí poskytující objektově orientované služby. OLE objekt je tedy objekt využívající služeb tohoto prostředí. Je zřejmé, že služby jsou vázané na konkrétní operační systém a databáze s OLE objekty nejsou obecně mezi systémy přenositelné. [A-SQL: nemá. J-SQL: image, longbinary, oleobject. S-SQL: image.]

Binární

Množina zhruba 101230 (binárních) hodnot na žádném, jednom až 510 bytech. [A-SQL: bit. J-SQL: binary. S-SQL: binary. M-SQL: nemá.]

Automatické číslo

Množina 2 147 483 647 celých čísel počínaje 1. Z této množiny databázový systém přiděluje hodnoty do databáze jednak automaticky, jednak jedinečně. [A-SQL: nemá. J-SQL: counter. S-SQL: nemá. M-SQL: nemá.]

Měna

Množina zhruba 1018 hodnot z intervalu <-922 337 203 685 477.5808, +922 337 203 685 477.5807>. Jde tedy o desetinná čísla vždy se čtyřmi desetinnými místy. [A-SQL: nemá. J-SQL: money, currency. S-SQL: money. M-SQL: do jisté míry lze použít bigint.]

Identifikační číslo

Množina zhruba 3.4 x 1038 celých kladných čísel s binárním vyjádřením na 16 bytech. Jedná se o jedinečný identifikátor každého objektu, který se registruje do prostředí Windows firmy Microsoft, známé GUID (Globally Unique IDentifier). Je generován algoritmem zaručujícím jeho jedinečnost.  [A-SQL: nemá. J-SQL: guid. S-SQL: nemá. M-SQL: nemá.]

 

 

Rev. 02 / 2004