Beste (mede)tweakers,
Al enige tijd zit ik te dubben over het volgende. Stel, ik heb een MySQL database opzet met daarin de volgende 3 tabellen en data(ter verduidelijking):
tabel license
----------------------------
| id | name |
----------------------------
| 1 | Freeware |
| 2 | Open Source |
----------------------------
tabel operatingsystem
----------------------------
| id | name |
----------------------------
| 1 | Windows XP |
| 2 | Windows Vista |
| 3 | Windows 7 |
----------------------------
tabel program
-------------------------------------------------------------------------
| name | id_license | id_operatingsystem |
-------------------------------------------------------------------------
| Firefox | 2 | 1,2,3 |
| Internet Explorer | 1 | 2,3 |
-------------------------------------------------------------------------
De licentie van Firefox kan ik bijvoorbeeld opvragen door de volgende query:
Als ik nu de besturingssystemen waarop Firefox kan draaien wil ophalen, verslikt een join zich op de veld waardes 1,2,3 ( die , tekens zijn puur voor de scheiding. had ook een . of | kunnen zijn
) van de kolom id_operatingsystem.
Nu is mijn vraag: bestaat er in SQL een soort “explode” of separator functie (group_concat separator?) om veldwaardes te scheiden om zo meerdere joins achter elkaar uit te voeren - dus 1 query hiervoor te gebruiken? Hoe hebben jullie zoiets aangepakt? Waarschijnlijk kan ik beter deze database opzet wijzigen(verder normaliseren)?
Alle vorm van input, kritiek en tips zijn welkom!
Al enige tijd zit ik te dubben over het volgende. Stel, ik heb een MySQL database opzet met daarin de volgende 3 tabellen en data(ter verduidelijking):
tabel license
----------------------------
| id | name |
----------------------------
| 1 | Freeware |
| 2 | Open Source |
----------------------------
tabel operatingsystem
----------------------------
| id | name |
----------------------------
| 1 | Windows XP |
| 2 | Windows Vista |
| 3 | Windows 7 |
----------------------------
tabel program
-------------------------------------------------------------------------
| name | id_license | id_operatingsystem |
-------------------------------------------------------------------------
| Firefox | 2 | 1,2,3 |
| Internet Explorer | 1 | 2,3 |
-------------------------------------------------------------------------
De licentie van Firefox kan ik bijvoorbeeld opvragen door de volgende query:
SQL:
1
2
3
4
| SELECT l.name FROM license l INNER JOIN program p ON l.id = p.id_license WHERE p.name = 'Firefox'; |
Als ik nu de besturingssystemen waarop Firefox kan draaien wil ophalen, verslikt een join zich op de veld waardes 1,2,3 ( die , tekens zijn puur voor de scheiding. had ook een . of | kunnen zijn
Nu is mijn vraag: bestaat er in SQL een soort “explode” of separator functie (group_concat separator?) om veldwaardes te scheiden om zo meerdere joins achter elkaar uit te voeren - dus 1 query hiervoor te gebruiken? Hoe hebben jullie zoiets aangepakt? Waarschijnlijk kan ik beter deze database opzet wijzigen(verder normaliseren)?
Alle vorm van input, kritiek en tips zijn welkom!