Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[OO/DB]Hoe data uit verschillende tables joinen

Pagina: 1
Acties:

Verwijderd

Topicstarter
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

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

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: 25-09 11:11

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!


Verwijderd

Topicstarter
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.

  • sub0kelvin
  • Registratie: September 2002
  • Laatst online: 10-08-2023
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!