Dolování v objektových datech Ivana Rudolfová
Relační databáze - nevýhody
První normální forma – neumožňuje vyjádřit vztahy „A je podtypem B“ nebo vytvořit struktury typu pole nebo množiny SQL omezení – omezený počet vestavěných datových typů, dlouhé SQL dotazy pro DB se složitějšími vztahy oddělení dat a chování objektů
Objektově-orientované DB
uživatelem definované datové typy
zapouzdření dat a chování objektu
třídy objektů, dědičnost
Objektově-orientované DB nevýhody
nedostatek nástrojů pro manipulaci s objekty (Object Query Language) problémy se standardizací přechod z relační DB na objektověorientovanou DB může být složitý a drahý malá rozšířenost objektově-orientovaných DB
Objektově-relační DB
rozšíření relačního modelu možnost definovat komplexní datové typy, hierarchie tříd, dědičnost, zapouzdření, možnost definovat metody přechod od relačních DB k objektově-relačním je snadný
Dolování dat v OO a OR systémech
komplexní data neumožňují použití obvyklých metod pro dolování dat metody musí být schopné pracovat s objekty metody musí být schopné pracovat s komplexními datovými typy, musí respektovat dědičnost a hierarchii tříd možnost použít databázové schéma (hierarchii použitých tříd)
Dolování dat v OO databázích založené na generalizaci
generalizované atributy, generalizované třídy generalizace pomocí generalizačních operátorů, které jsou různé pro různé typy atributů operátory je nutné specifikovat pro jednotlivé OO databáze (závisí na použitých typech atributů a jejich konkrétních hodnotách) existují obecná pravidla, jak pracovat s některými datovými typy výsledkem jsou data cube obsahující generalizované třídy
Generalizace identifikátorů objektů
objekty jsou instancemi tříd identifikátory jsou generalizovány na jména tříd třídy jsou součástí třídní hierarchie třída může být generalizována na jméno její nadřazené třídy
Generalizace jednoduchých atributů
jednoduché atributy: numerické hodnoty nebo výčtové typy numerické hodnoty lze generalizovat pomocí shlukování do tříd výčtové typy vyžadují specifikaci konceptuální hierarchie, různé stupně generalizace např. atribut umístění s hodnotou Brno je možné generalizovat takto: Brno → Morava
→ Česká republika → Evropa
Generalizace strukturovaných dat
strukturovaná data: seznamy a množiny jednotlivé prvky lze generalizovat samostatně (na méně specifickou úroveň), výsledkem je opět množina lze odvodit obecný atribut pro celou množinu (např. počet prvků množiny), výsledkem je jednoduchý atribut seznamy lze generalizovat podobně, pouze je nutné brát v úvahu pořadí prvků
Agregace a aproximace
generalizaci je možné provádět na základě agregace nebo aproximace vhodné pro atributy s velkým množstvím hodnot, prostorová a multimediální data agregace – atribut celku určíme pomocí agregační funkce z hodnot atributu dílčích celků aproximace – atribut celku bude odpovídat hodnotě atributu většiny prvků
Generalizace zděděných a odvozených vlastností
není důležité, které vlastnosti jsou zděděné a které jsou specifické pro danou třídu, generalizace probíhá stejně generalizaci vlastností odvozených aplikací metody dané třídy je možné řešit pomocí nové metody, která provede generalizaci, nebo je možné provést generalizaci dat získaných aplikací metody
Generalizace v OO databázích
jednotlivé objekty mohou odkazovat na jiné, posloupnost odkazů může být dlouhá, dlouhé vazby však obvykle nejsou tak významné, proto generalizaci je možné provádět na základě atributů objektu a přímých vazeb při získávání znalostí z DB se generalizační operátory aplikují opakovaně
OO přístup k získávání víceúrovňových asociačních pravidel
asociační pravidla jsou získávány v souladu s konceptuální hierarchií modelu konceptuální hierarchie musí být obvykle specifikována odborníkem, není možné využívat dotazovací jazyk OO přístup používá hierarchii tříd jako konceptuální schéma, tzn. není nutné ho specifikovat, protože každý objekt je instancí nějaké třídy, lze použít dotazovací jazyk
Dolování častých vzorů v OO datech
hledání častých vzorů pro specifikovanou dotazovanou třídu každý vzor se skládá ze zlomků zlomek vzorku lze vyjádřit výrazem Xi:Ti, kde Xi je proměnná reprezentující objekt a Ti je třída tohoto objektu nové vzory jsou generovány ze stávajících rozšířením některého zlomku daného vzoru rozšíření zlomku závisí na jeho typu
Rozšiřování zlomků vzoru
zlomek odpovídající jednoduchému atributu může být rozšířen hodnotou daného typu zlomek jehož typem je třída může být rozšířen novým zlomkem pro každý atribut a každou podtřídu dané třídy zlomek jehož typem je kolekce může být rozšířen zlomky reprezentujícími jednotlivé členy kolekce nově vytvořený vzor = následník, původní vzor = předchůdce
Časté vzory…
vzor je považován za častý, jestliže mu odpovídá minimální daný počet objektů dotazované třídy a příslušných podtříd minimální podpora, minimální frekvence udává se v absolutních nebo relativních hodnotách (v procentech)
Algoritmus OR-FP
Vstup: databáze D, název dotazované třídy, minimální požadovaná frekvence častých vzorů Výstup: množina častých vzorů Postup: 1. Vytvoří se první zlomek, který odpovídá dotazované třídě a počet objektů této třídy a jejích podtříd odpovídá frekvenci tohoto vzoru. Je-li skutečná frekvence menší než požadovaná algoritmus končí a vrací prázdnou množinu
Algoritmus OR-FP 2. V cyklu se provádí rozšíření jednotlivých zlomků, zjišťuje se frekvence jednotlivých zlomků, je-li větší než požadovaná frekvence, zlomek se přidá do množiny častých vzorů, které se v dalším cyklu opět rozšiřují. Cyklus končí, jestliže v předchozím průchodu nebyl nalezen žádný zlomek s dostatečnou podporou 3. Algoritmus vrací sjednocení množin všech nalezených vzorů
Příklad – databáze Kino
schéma databáze: class Person { name: String; address: String; salary: Float; } class Director under Person { directs: set of Movie; }
Databáze Kino class Actor under Person { acts_in: Set of Movie; } class Movie { title: String; year: Int; actors: set of Actor; director: Director; }
Databáze kino
příklad dat v databázi o1:Actor = {´Zdenek Sverak´, ´Praha´, 15000, {o4}} o2:Actor = {´Libuse Safrankova´, ´Brno´, 18000, {o4}} o3:Director = {´Jiri Menzel´, ´Praha´, 25000, {o4}} o4:Movie = {´Postriziny´, 1980, {o1, o2}, {o3}}
Databáze Kino
Příklady možných častých vzorů X0:Person.salary = x1:Float = (15000,20000) X0:Person, X0:Actor.ats_in = X2:set of Movie = {X3:Movie.title = X4:String = “Postriziny”} X1:Person:Actor.salary:float =(15000,20000), .acts_in:set of Movie = {X2:Movie.title:String = “Postriziny”}