Goedemorgen!
Hierbij even een poging om een beetje te klankborden.
Een situatie-schets, die het best de werkelijkheid benaderd: binnen één database van een CRM-achtige applicatie draaien verschillende projecten. Voor ieder van die projecten worden klanten bijgehouden, maar de informatie die per klant opgeslagen moet worden varieert. Zo zullen er in de ene situatie (basale) gegevens opgeslagen worden die medisch van aard zijn, de andere keer kan het meer in de financiele sfeer liggen.
Nu wil ik de database zo inrichten, dat de klant-tabel(len) zo zijn ingericht, dat die flexibele informatie daar in past. Voor zover ik kan bedenken, zijn er drie opties:
OPTIE 1. Er komt één groot veld, waarin de aanvullende velden in XML-formaat opgeslagen worden.
voordeel:
- minder joins en daardoor wellicht sneller
nadeel:
- minder nauwkeurig zoeken (WHERE postcode='XXX' is geen optie -> toch?)
OPTIE 2. Naast de klant-tabel met basisgegevens, komt een aanvullende tabel die er ongeveer zo uitziet:
Daarin is "fieldname" dan vergelijkbaar met de naam van een HTML input veld, fieldlabel is de voor mensen begrijpelijke omschrijving van het veld (bijvoorbeeld voor formulieren, rapporten, etc.) en fieldvalue is de waarde die het veld heeft voor een specifieke client.
voordeel:
- heel flexibel, en toch specifieke mogelijkheden om te zoeken
nadelen:
- veel queries danwel joins nodig om gegevens voor een set van klanten tegelijk op te halen, bij grotere databases leidt dit wellicht tot onaanvaardbare vertraging.
- alle waarden worden als varchar(150) opgeslagen, zelfs als het altijd getallen zijn of heel kleine strings (postcode/huisnummer/etc.).
OPTIE 3. "Iets" doen met VIEWS in MySQL.
Hier heb ik (nog) geen ervaring mee. Wel al eens vluchtig naar gekeken, maar nog onvoldoende. Wellicht is het mogelijk om een VIEW te maken van de database setup beschreven in optie 2, om op die manier de data vrij makkelijk toegankelijk te hebben en ook het aantal joins in queries te kunnen beperken.
4. ???
Ik ben heel benieuwd of jullie hierover specifieke ideeën hebben. Alvast bedankt voor het meedenken.
Hierbij even een poging om een beetje te klankborden.
Een situatie-schets, die het best de werkelijkheid benaderd: binnen één database van een CRM-achtige applicatie draaien verschillende projecten. Voor ieder van die projecten worden klanten bijgehouden, maar de informatie die per klant opgeslagen moet worden varieert. Zo zullen er in de ene situatie (basale) gegevens opgeslagen worden die medisch van aard zijn, de andere keer kan het meer in de financiele sfeer liggen.
Nu wil ik de database zo inrichten, dat de klant-tabel(len) zo zijn ingericht, dat die flexibele informatie daar in past. Voor zover ik kan bedenken, zijn er drie opties:
OPTIE 1. Er komt één groot veld, waarin de aanvullende velden in XML-formaat opgeslagen worden.
voordeel:
- minder joins en daardoor wellicht sneller
nadeel:
- minder nauwkeurig zoeken (WHERE postcode='XXX' is geen optie -> toch?)
OPTIE 2. Naast de klant-tabel met basisgegevens, komt een aanvullende tabel die er ongeveer zo uitziet:
MySQL:
1
2
3
4
5
6
7
| CREATE TABLE `client_data` ( `client_dataID` int(11) NOT NULL auto_increment, `clientID` int(11) NOT NULL default '0', `fieldname` varchar(50) NOT NULL, `fieldlabel` varchar(50) NOT NULL, `fieldvalue` varchar(150) NOT NULL, ) |
Daarin is "fieldname" dan vergelijkbaar met de naam van een HTML input veld, fieldlabel is de voor mensen begrijpelijke omschrijving van het veld (bijvoorbeeld voor formulieren, rapporten, etc.) en fieldvalue is de waarde die het veld heeft voor een specifieke client.
voordeel:
- heel flexibel, en toch specifieke mogelijkheden om te zoeken
nadelen:
- veel queries danwel joins nodig om gegevens voor een set van klanten tegelijk op te halen, bij grotere databases leidt dit wellicht tot onaanvaardbare vertraging.
- alle waarden worden als varchar(150) opgeslagen, zelfs als het altijd getallen zijn of heel kleine strings (postcode/huisnummer/etc.).
OPTIE 3. "Iets" doen met VIEWS in MySQL.
Hier heb ik (nog) geen ervaring mee. Wel al eens vluchtig naar gekeken, maar nog onvoldoende. Wellicht is het mogelijk om een VIEW te maken van de database setup beschreven in optie 2, om op die manier de data vrij makkelijk toegankelijk te hebben en ook het aantal joins in queries te kunnen beperken.
4. ???
Ik ben heel benieuwd of jullie hierover specifieke ideeën hebben. Alvast bedankt voor het meedenken.