Objektrelasjonell database

En objektrelasjonell database er en type database som er basert på prinsippene for relasjonsdatabaser, men som har funksjoner som bygger på idéer fra objektorientert programmering. I SQL-standardene, som legger grunnlaget for relasjonsdatabasesystemer, er det etter hvert lagt inn mye støtte for objektorientering (SQL:1999). Mange vil derfor hevde at relasjonsdatabasesystem som følger denne standarden kan betraktes som objektrelasjonelle.

Et viktig motiv for utviklingen av den objektrelasjonelle databasemodellen er å gi bedre samsvar mellom relasjonsdatabaser og objektorienterte programmerings- og modelleringsspråk. Objektrelasjonelle databasesystemer har støtte for typer/objekter, man kan definere metoder innenfor disse, man kan operere med pekere og man kan bruke egne identifikatorer som er systemgenererte.

Objektrelasjonelle databaser kan ikke normaliseres. Hvis man bruker UDTer i en tabell bryter man første normalform ved at verdiene i tabellen ikke blir atomære.

Databasehåndteringssystemer for objektrelasjonelle databaser kalles ORDBM (Object Relational Database Management System).

Spørringer
Eksempel på objektrelasjonell spørring i SQL. Denne spørringen finner navn og adresse på alle kunder som har bestilt varer i varegruppen STRØMAGGREGATER.
select ol->ordre->kunde.navn(), ol->o->kunde.adresse()
from Ordrelinje ol, Varegruppetilhørighet vg
where vg->vare.vareID() = ol->vare.vareID()
and vg.varegr = 'STRØMAGGREGATER'
;
Spørringen tar utgangspunkt i relasjonene Ordrelinje og Varegruppetilhørighet. Ordrelinje har nøkkel/peker til relasjonen Ordre, som peker til relasjonen Kunde. Varegruppetilhørighet har nøkkel til Vare. Spørringen finner de stedene der Ordrelinje og Varegruppetilhørighet peker til samme vareID og Varegruppetilhørighet har varegruppe 'STRØMAGGREGATER'.

User Defined Types (UDT)
Objektrelasjonelle databaser har støtte for egendefinerte "klasser" – UDTer (User Defined Types). Eksempel på opprettelse av en UDT:
CREATE TYPE adresse AS (
   gate varchar(20),
   husnummer int,
   postnummer int,
   poststed varchar(20)
);

Metoder
En UDT kan ha egne metoder som brukes inne i typene. Inneholdet i disse programmeres i egne språk, for eksempel SQL/PSM. Eksempel på opprettelse av metode:
CREATE METHOD endreHusnummer (h int)
RETURNS BOOLEAN 
FOR adresse
BEGIN
   <innhold>
END;

Databaser