Objektově relační mapování: Porovnání verzí

m
r2.7.3) (Robot: Přidávám he:מיפוי אובייקטי-רלציוני; kosmetické úpravy
m (r2.7.2) (Robot: Přidávám lv:Objektrelāciju kartēšana)
m (r2.7.3) (Robot: Přidávám he:מיפוי אובייקטי-רלציוני; kosmetické úpravy)
'''Objektově relační mapování''' ('''ORM''', '''O/RM''' nebo '''O/R mapování''') je [[programování|programovací technika]] v [[softwarové inženýrství|softwarovém inženýrství]], která zajišťuje automatickou konverzi dat mezi [[relační databáze|relační databází]] a [[Objektově orientované programování|objektově orientovaným programovacím jazykem]].
 
== Teorie ==
Při modelování a vývoji [[aplikace|aplikací]] je snaha co nejvěrněji zachytit realitu. Objekty reálného světa jsou v aplikaci reprezentovány jako [[entita|entity]]. Zatímco je v relační databázi entita reprezentována jako řádek, resp. množina řádků v databázových tabulkách, tak v objektově orientovaném jazyce je entita zpravidla reprezentována jako instancí nějaké třídy.
 
Vývojář potřebuje persistentně uchovávat objekty, ale nepotřebuje se starat, jak se tato persistence provede.
 
== Využití ORM ==
Řada implementací ORM se snaží v co největší míře odstínit vývojáře od nutnosti psaní SQL dotazů a pro selekci objektů z databáze používá raději objektový přístup. Takovýto postup však zpravidla umožňuje vyhledávat objekty jen podle databázového primárního klíče, což zpravidla nestačí. Proto některé implementace ORM využívají pro selekci objektů objektový dotazovací jazyk.
 
Nezávislost na konkrétním databázovém systému a skrývání SQL dotazů jsou však již jen příjemné důsledky použití ORM, není to ale primárním cílem.
 
== Nasazení ==
Konverze mezi relační databází a modelovými objekty není bezproblémová, ale je spojena s řadou komplikací, souhrnně označovaných jako ''object-relational impedance mismatch''
. Tyto problémy, resp. jejich možné řešení jsou důvodem pro existenci [[Návrhový vzor|návrhových vzorů]] pro ORM.
* [[Data Mapper]]
 
== Dědičnost ==
Dědičnost je jedna ze stěžejních vlastností objektově orientovaného programování. Pomocí dědičnosti lze vytvářet hierarchickou strukturu tříd a při správném návrhu zvýšit znovu-použitelnost kódu. Relační databáze však dědičnost (a tím pádem ani [[polymorfismus]]) nepodporují a proto je potřeba využít techniky, jak hierarchii tříd rozložit do databázových tabulek. V případě použití dědičnosti je typické, že podoba datového modelu závisí na vybraném návrhovém vzoru. Návrhové vzory pro dědičnost lze kombinovat se vzory ''Row Data Gateway'', ''Active Record'' a ''Data Mapper''. U vzorů ''Row Data Gateway'' a ''Active Record'' je nutné, aby entitní třída byla potomkem speciální třídy, která je součástí ORM knihovny. To může komplikovat návrh diagramu tříd. Proto je vhodné kombinovat vzory pro definování dědičnosti se vzorem ''Data Mapper'', jehož implementace zpravidla nevyžaduje, aby entitní třída byla potomkem speciální třídy, která by byla součástí ORM knihovny.
 
* [[Concrete Table Inheritance]]
 
== Reference ==
 
<references/>
[[es:Mapeo objeto-relacional]]
[[fr:Mapping objet-relationnel]]
[[he:מיפוי אובייקטי-רלציוני]]
[[hu:Objektum-relációs leképzés]]
[[id:Pemetaan objek-relasional]]
170 589

editací