<p>Als <i>Object-Relational Mapping</i> (kurz <i>ORM</i>) bezeichnen wir in der Softwareentwicklung die Abbildung der Objekte aus einer objektorientierten Programmiersprache auf ein relationales Datenbankschema. In der Praxis ist diese objektrelationale Abbildung in einer Vielzahl von Projekten zu bewerkstelligen, da die Entscheidung für eine objektorientierte Programmiersprache als auch für ein relationales Datenbanksystem sehr verbreitet ist. Zwischen dem objektorientierten und dem relationalen Datenmodell ergeben sich gewisse Unterschiede, die als <ahref="https://de.wikipedia.org/wiki/Object-relational_impedance_mismatch">Object-Relational Impedance Mismatch</a> bezeichnet werden. Zwei typische Unterschiede zwischen objektorientiertem und relationalem Modell sind die Abbildung von N:N-Beziehungen und die Abbildung von Vererbungsbeziehungen.</p>
<p>Als <i>Object-Relational Mapping</i> (kurz <i>ORM</i>) bezeichnen wir in der Softwareentwicklung die Abbildung der Objekte aus einer objektorientierten Programmiersprache auf ein relationales Datenbankschema. In der Praxis ist diese objektrelationale Abbildung in einer Vielzahl von Projekten zu bewerkstelligen, da die Entscheidung für eine objektorientierte Programmiersprache als auch für ein relationales Datenbanksystem sehr verbreitet ist. Zwischen dem objektorientierten und dem relationalen Datenmodell ergeben sich gewisse Unterschiede, die als <i><ahref="https://de.wikipedia.org/wiki/Object-relational_impedance_mismatch">Object-Relational Impedance Mismatch</a></i> bezeichnet werden. Zwei typische Unterschiede zwischen objektorientiertem und relationalem Modell betreffen die Abbildung von N:N-Beziehungen und die Abbildung von Vererbungsbeziehungen.</p>
<span>Die Abweichungen zwischen den Modellen werden am Beispiel der folgenden Abbildung verdeutlicht.</span>
<span>Die Abweichungen zwischen den Modellen werden anhand eines Beispiels in der folgenden Abbildung verdeutlicht.</span>
<ul>
<li>Im objektorientierten Modell links besteht eine N:N-Beziehung zwischen den Klassen <code>Person</code> und <code>Skill</code>, die im relationalen Modell rechts durch eine zusätzliche Beziehungstabelle <code>skill_acquisition</code> mit Fremdschlüsseln dargestellt werden muss.</li>
<li>Im objektorientierten Modell (oben) besteht eine N:N-Beziehung zwischen den Klassen <code>Person</code> und <code>Skill</code>, die im relationalen Modell (unten) durch eine zusätzliche Beziehungstabelle <code>skill_acquisition</code> mit Fremdschlüsseln abgebildet werden muss.</li>
<li>Die Vererbungsbeziehung zwischen der allgemeinen Oberklasse <code>Person</code> und ihren Unterklassen <code>Employee</code> und <code>Freelancer</code> im objektorientierten Modell kann im relationalen Modell in drei bekannten, unterschiedlichen Varianten abgebildet werden. In diesem Fall wird die Vererbungshierarchie in einer gemeinsamen Tabelle <code>person</code> zusammengefasst (Variante <i>Single Table</i>).</li>
<li>Explizit erlaubte oder ausgeschlossene Navigierbarkeit – wie zwischen den Klassen <code>Person</code> und <code>Department</code> – kann im relationalen Modell gar nicht dargestellt werden.</li>