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:
Enerzijds wil je in het OO gedeelte een klasse om een gemeente te kunnen toevoegen, editeren, verwijderen, ...., vb.
Als je nu een Persoon klasse wilt maken, vb.
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
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