Toon posts:

[OO/DB]Hoe data uit verschillende tables joinen

Pagina: 1
Acties:

  • PissedCapslock
  • Registratie: mei 2005
  • Laatst online: 08-11-2014
Een vraagje ivm een database en een object oriented language. Taal en DB maken niet echt uit, maar voor het gemak zal ik de (pseudo-)code in Java zetten.

Ik vroeg mij af als je data in je DB hebt steken, verspreid over meerdere tabellen, hoe je dat best map op je OO-Objecten/classes. Omdat een voorbeeld makkelijker praat een zeer simpel voorbeeld. Een DB met een 2 tabellen: 1 met persoonsgegevens en 1 met de mapping postcode-gemeente. Bij de persoonsgegevens (naam, adres, ... ) zou dan enkel de postcode staan, en de gemeente kan dan afgeleid worden uit de 2de tabel:
code:
1
2
3
4
5
PersoonTabel
  naam
  voornaam
  ...
  postcode

code:
1
2
3
MappingTabel
  postcode
  gemeente


Enerzijds wil je in het OO gedeelte een klasse om een gemeente te kunnen toevoegen, editeren, verwijderen, ...., vb.
Java:
1
2
3
4
5
6
public class Gemeente{
  public int getPostCode(){...}
  public String getNaam(){...}
  //methode om de gemeente op te vragen corresponderend met een bepaalde postcode
  public static Gemeente getGemeente( int aPostCode );
}

Als je nu een Persoon klasse wilt maken, vb.
Java:
1
2
3
4
5
6
7
public class Persoon{
  public String getNaam();
  public String getVoornaam();
  public Gemeente getGemeente();
  //methode om een persoon op te vragen corresponderend met een bepaalde identifier
  public static Persoon getPersoon( int aIdentifier){}
}

zal je daarin op 1 of andere manier aan het "Gemeente" object moeten geraken. Wat ik zie zijn 2 mogelijkheden:
- de Persoon klasse queryt enkel de Persoon-tabel, en gaat vervolgens met de postcode aan de Gemeente#getGemeente( int ) vragen om het corresponderende Gemeente object. Voordeel van deze aanpak is dat de Persoon klasse geen kennis moet hebben van de structuur van de Gemeente tabel. Nadeel is dat je dus telkens een extra query naar de DB hebt die eigenlijk vermeden kan worden (je doet de JOIN eigenlijk aan de OO side ipv aan de DB side)
- De JOIN wordt overgelaten aan de DB. Dit kan door in de Persoon klasse kennis te steken van de structuur van de Gemeente tabel, of door op de DB een view te maken van de JOIN. Nadelen die ik hierin zie zijn ofwel een mogelijke explosie van VIEWS in de DB, ofwel geen mooie code-scheiding meer.

Ik zou dan ook geneigd zijn om voor de eerste aanpak te gaan, maar misschien zie ik een 3de veel betere mogelijkheid over het hoofd.
Helaas heb ik nog quasi geen ervaringen met DB's en weet ik ook niet of hier technische termen voor zijn die ik kan gebruiken in een Google-queeste. Ik hoor graag jullie suggesties komen

Grazend voor NGS


  • NMe
  • Registratie: februari 2004
  • Laatst online: 18-09 01:08

NMe

Quia Ego Sic Dico.

Zoek eens op Google naar een ORM? :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Killemov
  • Registratie: januari 2000
  • Laatst online: 30-06 22:36

Killemov

Ik zoek nog een mooi icooi =)

NMe schreef op vrijdag 24 september 2010 @ 20:05:
Zoek eens op Google naar een ORM? :)
Nja, dat is meestal hibernate wat de klok slaat.

DE java JDO implementatie: http://www.datanucleus.or...do/orm/relationships.html

Annotations rule! 8)

Hey ... maar dan heb je ook wat!


  • PissedCapslock
  • Registratie: mei 2005
  • Laatst online: 08-11-2014
Bedankt alvast voor de technische termen. Dat googlet toch een stuk makkelijker. Ik hoopte stiekem wel het wiel nog eens zelf heruit te vinden ipv een kant en klaar framework ala Hibernate te gebruiken.
Ik ben eens door die datanucleus tutorials/examples gegaan en kwam daar het concept data access object/layer tegen, hetgeen volgens mij de vraag wel beantwoord.

Waar ik in het OO gedeelte de Gemeente en Persoon classes heb, lijkt het voorbeeld hier juist te suggereren dat je Data Access Object/layer gewoon geshared moet worden tussen die verschillende klassen.

Grazend voor NGS


  • sub0kelvin
  • Registratie: september 2002
  • Laatst online: 20-07 16:15
Killemov schreef op vrijdag 24 september 2010 @ 22:01:
[...]

Nja, dat is meestal hibernate wat de klok slaat.

DE java JDO implementatie: http://www.datanucleus.or...do/orm/relationships.html

Annotations rule! 8)
Bedoel je met die laatste opmerking dat je denkt dat Hibernate geen annotations begrijpt? Want met de hibernate-annotations package hoef je nooit meer relaties e.d. in XML te definiëren, die snapt JPA-annotations probleemloos. Heerlijk inderdaad!


Nintendo Switch (OLED model) Apple iPhone 13 LG G1 Google Pixel 6 Call of Duty: Vanguard Samsung Galaxy S21 5G Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True

Tweakers maakt gebruik van cookies

Bij het bezoeken van het forum plaatst Tweakers alleen functionele en analytische cookies voor optimalisatie en analyse om de website-ervaring te verbeteren. Op het forum worden geen trackingcookies geplaatst. Voor het bekijken van video's en grafieken van derden vragen we je toestemming, we gebruiken daarvoor externe tooling die mogelijk cookies kunnen plaatsen.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Forum cookie-instellingen

Bekijk de onderstaande instellingen en maak je keuze. Meer informatie vind je in ons cookiebeleid.

Functionele en analytische cookies

Deze cookies helpen de website zijn functies uit te voeren en zijn verplicht. Meer details

janee

    Cookies van derden

    Deze cookies kunnen geplaatst worden door derde partijen via ingesloten content en om de gebruikerservaring van de website te verbeteren. Meer details

    janee