Ik ben bezig een flexibele contacten database op te zetten.
Deze wil ik graag zeer uitbreidbaar hebben zonder er achteraf al teveel aan te hoevel sleutelen als er een wijzging in een profiel is.
Ik was begonnen met voor elk contact type een andere tabel te definieren maar daardoor zet ik mezelf vrij snel vast waarna ik toch als er een wijziging gedaan moet worden flink in de code of database zou moeten duiken.
Ik heb ooit wel eens wat gelezen met betrekking van een soort van key/value tabel en dat lijkt me zeer flexibel.
Hier zijn ook flink nadelen aan als je kijkt naar queries en sorteren etc, graag wil ik jullie ervaringen of ideeen weten/ discussie openenen
Ik had in mn hoofd een structuur als deze:
Elk contact heeft 1 overeenkomst een ID, type een parent. De parent zie ik voor me als een key die bijvoorbeeld een contact persoon aan een bedrijf koppeld.
vb
Contact blokker (id=1) type = 1 (winkel), parent=0
Contact Bierpul (id=2) type = 0, parent=1
Elk contact heeft wat info bijv:
contact_id=1
key=naam
value=blokker
key=telefoon
value=020-545454545
contact_id=2
key=voornaam
value=Michael
key=email
value=bierpul@tweakers.net
In deze tabel staan de contact types die we in tbl_contacts kunnen gebruiken.
Op zich zal het invoeren van deze data niet zo'n probleem zijn lijkt me, voor elk type contact zou ik een array maken van de key velden en de waardes om dynamisch mn form op te kunnen bouwen.
Het opvragen lijkt me een stuk lastiger.
Als ik kijk naar dat ik bijvoorbeeld alle contacten zou willen hebben met de naam BierPul zou ik eerst alles moeten ophalen om dan via een eigen functie alle key/value velden na te lopen waar de value BierPul is en het key veld naam.
Of heeft er iemand een andere visie?
Deze wil ik graag zeer uitbreidbaar hebben zonder er achteraf al teveel aan te hoevel sleutelen als er een wijzging in een profiel is.
Ik was begonnen met voor elk contact type een andere tabel te definieren maar daardoor zet ik mezelf vrij snel vast waarna ik toch als er een wijziging gedaan moet worden flink in de code of database zou moeten duiken.
Ik heb ooit wel eens wat gelezen met betrekking van een soort van key/value tabel en dat lijkt me zeer flexibel.
Hier zijn ook flink nadelen aan als je kijkt naar queries en sorteren etc, graag wil ik jullie ervaringen of ideeen weten/ discussie openenen
Ik had in mn hoofd een structuur als deze:
code:
1
2
3
4
5
6
| CREATE TABLE `tbl_contacts` ( `id` int(11) NOT NULL auto_increment, `type` int(11) NOT NULL, `parent` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; |
Elk contact heeft 1 overeenkomst een ID, type een parent. De parent zie ik voor me als een key die bijvoorbeeld een contact persoon aan een bedrijf koppeld.
vb
Contact blokker (id=1) type = 1 (winkel), parent=0
Contact Bierpul (id=2) type = 0, parent=1
code:
1
2
3
4
5
| CREATE TABLE `tbl_contact_information` ( `contact_id` int(11) NOT NULL, `key` varchar(255) NOT NULL, `value` text NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; |
Elk contact heeft wat info bijv:
contact_id=1
key=naam
value=blokker
key=telefoon
value=020-545454545
contact_id=2
key=voornaam
value=Michael
key=email
value=bierpul@tweakers.net
code:
1
2
3
4
5
6
| CREATE TABLE `tbl_contact_types` ( `id` int(11) NOT NULL auto_increment, `name` varchar(255) NOT NULL, `description` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 ; |
In deze tabel staan de contact types die we in tbl_contacts kunnen gebruiken.
Op zich zal het invoeren van deze data niet zo'n probleem zijn lijkt me, voor elk type contact zou ik een array maken van de key velden en de waardes om dynamisch mn form op te kunnen bouwen.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| <? //ff ter test.... $dbOutput['name'] = "Michael"; $dbOutput['email'] = "michael@bla.com"; //definitie van een contact persoon, deze wijkt dus af voor andere type contacten $formfields[0]['name'] = 'name'; $formfields[0]['fieldtype'] = 'text'; $formfields[0]['displayname'] = 'naam'; $formfields[1]['name'] = 'email'; $formfields[1]['fieldtype'] = 'text'; $formfields[1]['displayname'] = 'e-mail adres'; //simpel maar kan natuurlijk een mooie template voor gemaakt worden die voor verschillende formfieldtypes andere velden laat zien $i=0; foreach($formfields as $key => $value) { echo($formfields[$i]['displayname'].' <input type="'.$formfields[$i]['fieldtype'].'" value="'.$dbOutput[$formfields[$i]['name']].'"/><br/>'); $i++; } ?> |
Het opvragen lijkt me een stuk lastiger.
Als ik kijk naar dat ik bijvoorbeeld alle contacten zou willen hebben met de naam BierPul zou ik eerst alles moeten ophalen om dan via een eigen functie alle key/value velden na te lopen waar de value BierPul is en het key veld naam.
Of heeft er iemand een andere visie?
[ Voor 21% gewijzigd door BierPul op 29-12-2005 23:45 ]
Ja man