Mapping

Maandag, 28 januari 2002
Hoe map je een relatie (= associatie) uit een ERD naar variabelen (= properties, fields) in een Java class?

Die mapping lijkt een beetje op de optimalisatie stappen in physiek database design. Er zijn wel wat verschillen.

  • RAM geheugen is snel. Performance is veel minder een probleem dan in database ontwerp.
  • De objecten in het geheugen zijn meestal slechts een subset van alle info in de database.
  • RAM geheugen is nog steeds schaarser dan diskruimte, al kunnen er heel wat objecten in een Megabyte.
  • One-to-many relaties kunnen op verschillende manieren in géén, één of twee richtingen geïmplementeerd worden.
Voor dat laatste punt een aantal vuistregels: Een ERD met vier entiteiten: Gebied, Lezer, Krant en Abonnement

to-one

Dit kan een one-to-one of een many-to-one relatie zijn.
    Voorbeelden
  • Van abonnement naar krant
  • Van abonnement naar lezer
  • Van lezer naar gebied
Situatie Mapping Java code
Er is geen enkele functie die de richting 'to-one' gebruikt.

Voorbeeld: Van een lezer hoeft nooit het bijbehorende gebied benaderd te worden.

Geen mapping. public class Lezer { }
Alle functies hebben de 'one' al beschikbaar. Dit komt vaak voor bij een identificerende 'to-one' relatie uit de SNF.

Voorbeeld: Een abonnement wordt alleen opgehaald via lezer. Van elke lezer is bekend welke abonnementen die heeft. De implementatie terug, van abonnement naar lezer, is overbodig.

Ook geen mappping public class Abonnement { }
De 'to-one' relatie wordt gebruikt.

Voorbeeld: van Abonnement naar Krant.

Maak een variabele die naar de 'one' verwijst. public class Abonnement { private Krant krantObj; }

to-many

Situatie Mapping Java code
Er is geen enkele functie die de richting 'to-many' gebruikt.

Voorbeeld: Van een krant hoeven nooit alle lezers benaderd te worden.

Geen mapping. public class Krant { }
Er is een access path dat de 'to-many' relatie gebruikt. Soms wordt die relatie gebruikt om met key informaite één specifieke instance op te halen.

Voorbeelden:

  • Haal van een gegeven lezer alle abonnementen op.
  • Haal van een gegeven lezer het abonnement op 'de Volkskrant'.
Implementeer de to-many relatie als een HashMap. public class Lezer { Hashmap abonnementenObj; // key: krantnaam // data: instance van Abonnement }
Er is een access path dat de 'to-many' relatie gebruikt. De volgorde is belangrijk.

Voorbeeld: Voor een krantenwijk is de volgorde van lezers belangrijk voor de route.

Implementeer de to-many relatie als een Vector. public class Gebied { Vector lezersObj; }

Tot de volgende week,
Henk Jan Nootenboom

IM Astrid Lindgren, 1907 - 2002