Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Objektově relační mapování - ORM. Obsah Co je to ORM Využití ORM Dědičnost –jednoduchý příklad –metody jak dědičnost popsat pomocí relační databáze Vztahy.

Podobné prezentace


Prezentace na téma: "Objektově relační mapování - ORM. Obsah Co je to ORM Využití ORM Dědičnost –jednoduchý příklad –metody jak dědičnost popsat pomocí relační databáze Vztahy."— Transkript prezentace:

1 Objektově relační mapování - ORM

2 Obsah Co je to ORM Využití ORM Dědičnost –jednoduchý příklad –metody jak dědičnost popsat pomocí relační databáze Vztahy mezi objekty –1:1, M:1, 1:M, M:N Strategie výběru objektu

3 Co je to ORM? Programovací technika – zajišťuje automatickou konverzi dat mezi rel. databází a OOP Vývoj aplikace – zachytit realitu – objekty aplikace = entity, v databázi entita = řádek/množina řádků tabulky, v OOP entita = instance třídy Tato rozdílná reprezentace vedla ke vzniku ORM

4 Využití ORM Technika se snaží dát unifikovaný přístup k libovol. objektu, se kterým v aplikaci pracujeme – vývojář odstíněn od práce s SQL dotazy Usnadnění provádění CRUD operací Zajištění perzistentního uchovávání dat Automatická konverze rozdílných datových typů mezi dat. systémem a prog. jazykem Řešení objektové dědičnosti

5 Využití ORM Hlavní cíl – synchronizace mezi používanými objekty v aplikaci a jejich reprezentací v datab. systému pro zajištění perzistence dat Řada implementací ORM – snaha odstínit vývojáře od psaní SQL dotazů + selekce objektů pomocí obj. přístupu – objektový dotazovací jazyk Výhoda nezávislosti aplikace na dat. systému

6 Dědičnost Možnost vytvoření hierarchické struktury tříd Relační databáze nepodporují –nutnost transformovat do struktury tabulek a vztahů mezi nimi

7 Dědičnost Jednoduchý příklad

8 Dědičnost Metody Jak dědičnost popsat pomocí relační databáze –Celá třída do jedné tabulky –Třída do jedné tabulky –Mapování hierarchie tříd do jedné tabulky

9 Metody Celá třída do jedné tabulky Pro každou třídu samostatná tabulka V tabulce jsou pak dostupné všechny položky –položky této třídy –položky zděděné z ostatních tříd

10 Celá třída do jedné tabulky Jednoduchý příklad –Třída Person nejvyšší v hierarchii dědičnosti –Definovány sloupce pro id, name a email –V tabulkách popisující potomky definujeme také PK + sloupce z předka + nově definované sloupce

11 Celá třída do jedné tabulky Výhodou jednoduchý přístup k jednomu dat. objektu nebo více stejného typu Nevýhodou složitost údržby dat. schématu –Při úpravě rodičovské třídy musíme upravit databázové tabulky odp. této třídě –Nutnost také upravit tabulky, na které se mapují třídy dědící z upravené PK v tabulkách na sobě nezávisí –Je možné mít stejnou hodnotu klíče ve dvou tabulkách, ale klíč by měl být jedinečný v celé hierarchii tříd

12 Metody Třída do jedné tabulky Do jedné tabulky nemusíme mapovat všechny položky třídy - jen nově zavedené Tabulka odp. třídě obsahuje jen sloupce, na které se mapují položky deklarované v této třídě Mapování nejlépe odpovídá struktuře tříd v Javě

13 Třída do jedné tabulky Jednoduchý příklad –Vkládáním instance třídy Person - * záznam do tabulky Person_tabConcr –Vkládáním instance typu Employee - * záznam v obou tabulkách person_tabConcr i Employee_tabConcr –V tomto případě speciální požadavky na PK –V tabulce pro třídu na vrcholu hierarchie vytvoříme PK, v tabulkách pro potomky je složitější situace – PK je zároveň FK odkazující na předka

14 Třída do jedné tabulky Data jednoho objektu uložena ve více tabulkách – může zpomalit rychlost přístupu Pro ORM nástroj podporující formu líného načítání to může být efektivní

15 Metody Mapování hierarchie tříd do jedné tabulky Celou hierarchii lze namapovat do jedné tabulky V tomto případě nutné vložit do tabulky sloupce popisující položky ve všech podtřídách Z řádků pak není ihned zřejmé, kterou třídu popisují – vhodné zavést sloupec s id konkrétní třídy mapované na tento řádek

16 Mapování hierarchie tříd do jedné tabulky Příklad

17 Mapování hierarchie tříd do jedné tabulky V nevyužitých sloupcích bývá NULL Integritní omezení musíme napsat tak, abychom rozlišovali, zda je hodnota NULL skutečnou uloženou hodnotou nebo je takto nastavena proto, že se tyto v aktuálně ukládané třídě nepoužívají Výhoda – všechny položky v jedné tabulce – není třeba průchodu všech tabulek

18 Vztahy mezi objekty Základní prvek, který musí ORM podporovat Zajímá nás dvě základní vlastnosti –násobnost a směrovost Násobnost vztahu –popis ke kolika objektům se entita odkazuje (1:1, M:1, 1:M, M:N) Směrovost vztahů –jednosměrný a obousměrný vztah

19 Vztahy mezi objekty Vlastnící a inverzní strana vazby –při mapování vztahů obvykle jedna tabulka se sloupci obsahující odkaz do druhé tabulky –tabulka obsahující sloupec s cizím klíčen = vlastník vazby –tabulka na druhé straně = inverzní strana vazby

20 Vztah M:1 a 1:M Vztah many-to-one –nejjednodušší druh vztahu –z entity se odkazujeme na jednu entitu –z objednávky se můžeme dostat k zákazníkovi –na jednoho zákazníka se může odkazovat více objednávek –ve třídě Order – jednosměrný vztah M:1 –spojíme-li M:1/1:M vytvoříme obousměrný vztah

21 Vztah M:1 a 1:M Třída v Javě

22 Vztah 1:1 Vztah one-to-one –popisuje jednoduchý vztah mezi dvěma objekty –dvě možnosti mapování Mapování pomocí cizího klíče –možnost popisu vztahu 1:1 – speciální případ M:1 –v případě M:1 může být entita odkazována více entitami, v případě 1:1 může být pouze jednou entitou –do FK, který popisuje mapování, stačí přidat omezení, které zaručí jedinečnost => vznik 1:1 –Chceme-li vytvořit objekt, který neodkazuje na druhý objekt, databáze musí umožnit uložit více řádků s hodnotou NULL ve sloupci, který má být jedinečný

23 Vztah 1:1 Mapování pomocí primárního klíče –druhá možnost = mapování pomocí sdíleného PK –objekty s vazbami mezi sebou mají stejnou hodnotu PK –v tomto případě nemůžeme mezi dvěma třídami vytvořit dvě různé vazby 1:1 –vazba není popsána pomocí sloupce s FK, ale pomocí sdílení hodnoty PK => takto definovanou vazbu mezi 2 tabulkami můžeme mít jen jednou –chceme-li více vazeb – nutno využít předchozí způsob pomocí FK

24 Vztah M:N –nejobecnější –popisuje situaci, kdy na obou stranách vazby může být více položek –například student (Student) může pracovat na několika projektech (Project) –každý projekt může řešit více studentů

25 Vztah M:N Popis situace –tato def. vazba vypadá stejně jako vazba 1:M –rozdíl je ve významu této vazby ve způsobu realizace v rel. databázi –v případě vazby M:N musíme zavést novou tabulku popisující tuto vazbu –bude obsahovat odkaz do tabulky pro třídu Student a Project – takto jsme definovali jednosměrnou vazbu M:N

26 Vztah M:N Popis situace –chceme-li vytvořit obousměrnou vazbu M:N, přidáme odkaz na studenty do třídy popisující projekty

27 Strategie výběru objektu obecný problém u ORM nástrojů jako je Hibernate spočívá v ef. přístupu k rel. datům získávání objektů mnoha přístupy do databáze je nepřípustné –nejefektivnější přístup = získávání dat v podobě objektového grafu –efektivnost výběru dat pak můžeme řídit pomocí nastavení vlastností a asociací v metadatech mapování objektů na tabulky nebo vhodné strategie zpracování dotazů přímo za běhu aplikace

28 Strategie výběru objektu výběr objektů se řídí tzv. strategií výběru Hibernate poskytuje 4 strategie výběru –Okamžitá strategie Asociované objekty jsou vybrány okamžitě pomocí sekvenčního čtení z databáze nebo z cache –Hladová strategie Objekty a kolekce jsou vybrány společně s rodičem pomocí SQL vnějšího spojení (outer join) a další přístupy do databáze nejsou třeba –Líná strategie Objekty a kolekce jsou vybírány líně až při prvním přístupu k nim – tento přístup zapříčiní další dotaz nad databází, pokud hledaná data nejsou v cache –Dávková strategie Dokáže zvýšit výkon líné strategie – získá najednou sadu objektů/kolekcí v případě, že je líné získávání dat aktivováno

29 Přehled ORM nástrojů Nástroje ORM Java –Hibernate –EclipseLink –MyBatis, apod..NET –Nhibernate –iBatis, apod. PHP –CakePHP –Doctrine –FuelPHP, apod.

30 Příklad Hibernate Příklad Hibernate Jednoduchý příklad v Javě Anotace: @Entity – pro vytvoření perzistentní pojo třídy @Id – značí atribut mapovaný na id v databázi @Column - sloupec

31 Příklad Hibernate - pokračování Spouštěcí třída

32 Příklad Hibernate - pokračování Výsledek v databázi

33 Děkujeme za pozornost… Zdroj: http://is.muni.cz/th/39385/fi_m_a2/dp_orm.pdf http://docs.oracle.com/cd/E21764_01/web.1111/b32441/relmapun.htm


Stáhnout ppt "Objektově relační mapování - ORM. Obsah Co je to ORM Využití ORM Dědičnost –jednoduchý příklad –metody jak dědičnost popsat pomocí relační databáze Vztahy."

Podobné prezentace


Reklamy Google