Ik zit met een probleempje. Ik ben bezig met een klein O-R mapping framework te maken en ik ben nu aan het werken met een database schema waar ik geen rekening mee heb gehouden. Ik ging er vanuit (dom mischien) dat in een table slechts een primary key op 1 veld kon bestaan. Nu blijkt (dit wist ik nog niet) dat je dus ook een primary key over meerdere velden kunt leggen en dat de combinatie dus uniek moet zijn, en dat ze apart wel meerdere keren kunnen voorkomen.
Dit houdt dus in dat ik niet op een enkel veld kan rekenen dan hij in een tabel uniek is. Ik moet dit gaan verdelen over twee velden. Hoe ik dit ga doen is me nog een raadsel.
Het eerste probleem ligt bij het ophalen van objecten via hun. De vorm van de functie die ik nu gebruik is zo:
Dit zou natuurlijk perfect werken als een object 1 veld als p-key zou hebben, maar in dit geval gaat het niet op. Waar ik aan zit te denken is zoiets:
op zich netjes, maar ik weet niet of dit nou zo'n goede methode is. Dit omdat de client dan informatie nodig heeft over de velden van een class, wat ik zo veel mogelijk wil voorkomen.
Het tweede probleem is de lastigste. Dat ligt bij het cachen van objecten. De interface van de class die objecten moet cachen is ongeveer zo:
Voor iedere class die gecached kan worden is een apart object die dit afhandelt. Dit omdat het zeer waarschijnlijk is dat objecten uit verschillende velden wel overeenkomende ID's zullen hebben. Binnen het object sla ik de object op in een associatieve array. Zoals dit dus ongeveer:
Het probleem is denk ik verder direct zichtbaar. Hoe sla ik objecten dan op als ze meerdere velden als primary key hebben? Je zou kunnen denken aan een meer-dimensionale associatieve array. Iets in de zin van:
Maar dat lijkt me ook niet echt gemakkelijk te automatiseren of is mischien niet de beste oplossing. Ik automatiseer verder alles met meta data dus aparte cach classes maken voor ieder object zit er niet bij. En ik zou verder ook niet weten hoe ik dit gemakkelijk kan oplossen. Iemand een suggestie?
Dit houdt dus in dat ik niet op een enkel veld kan rekenen dan hij in een tabel uniek is. Ik moet dit gaan verdelen over twee velden. Hoe ik dit ga doen is me nog een raadsel.
Het eerste probleem ligt bij het ophalen van objecten via hun. De vorm van de functie die ik nu gebruik is zo:
PHP:
1
| function get($ID, $class) |
Dit zou natuurlijk perfect werken als een object 1 veld als p-key zou hebben, maar in dit geval gaat het niet op. Waar ik aan zit te denken is zoiets:
PHP:
1
| get(array('veld1' => 'waarde1', 'veld2' => 'waarde2'), "objectClass"); |
op zich netjes, maar ik weet niet of dit nou zo'n goede methode is. Dit omdat de client dan informatie nodig heeft over de velden van een class, wat ik zo veel mogelijk wil voorkomen.
Het tweede probleem is de lastigste. Dat ligt bij het cachen van objecten. De interface van de class die objecten moet cachen is ongeveer zo:
PHP:
1
2
3
4
5
6
7
| function has($ID); function get($ID); function insert($object); function remove($object); |
Voor iedere class die gecached kan worden is een apart object die dit afhandelt. Dit omdat het zeer waarschijnlijk is dat objecten uit verschillende velden wel overeenkomende ID's zullen hebben. Binnen het object sla ik de object op in een associatieve array. Zoals dit dus ongeveer:
PHP:
1
2
3
4
| $this->objects[$object->getID()] = $object; // en return $this->objects[$ID]; // etc... |
Het probleem is denk ik verder direct zichtbaar. Hoe sla ik objecten dan op als ze meerdere velden als primary key hebben? Je zou kunnen denken aan een meer-dimensionale associatieve array. Iets in de zin van:
PHP:
1
| $this->objects[$object->getVeld1()][$object->getVeld2()]; |
Maar dat lijkt me ook niet echt gemakkelijk te automatiseren of is mischien niet de beste oplossing. Ik automatiseer verder alles met meta data dus aparte cach classes maken voor ieder object zit er niet bij. En ik zou verder ook niet weten hoe ik dit gemakkelijk kan oplossen. Iemand een suggestie?
[ Voor 21% gewijzigd door Michali op 13-01-2005 11:39 ]