Database structuur voor downloads
Ik heb verschillende vakken en verschillende klassen. Nu zitten deze vakken in de klassen, maar ook andersom. Oftewel, één van de twee moet meerdere parents moeten hebben.
Als voorbeeld neem ik de vakken Nederlands en Engels. Beiden worden gegeven in klas 1 t/m 6. Nu zou ik dus kunnen hebben:
Nederlands -> Klas 1
Nederlands -> Klas 2
Nederlands -> Klas 3
Nederlands -> Klas 4
Nederlands -> Klas 5
Nederlands -> Klas 6
Engels -> Klas 1
Engels -> Klas 2
Engels -> Klas 3
Engels -> Klas 4
Engels -> Klas 5
Engels -> Klas 6
Het kan ook andersom:
Klas 1 -> Nederlands
Klas 1 -> Engels
Klas 2 -> Nederlands
Klas 2 -> Engels
Klas 3 -> Nederlands
Klas 3 -> Engels
Klas 4 -> Nederlands
Klas 4 -> Engels
Klas 5 -> Nederlands
Klas 5 -> Engels
Klas 6 -> Nederlands
Klas 6 -> Engels
In beide gevallen heb ik te maken met maar 4 verschillende categoriëen, maar ze moeten wel dubbel gemaakt worden. Nu zou ik dus eigenlijk willen hebben dat alle Klas 1 categorieën hetzelfde zijn. Hoe zou ik dit moeten oplossen in de database? In deze categorieën moeten natuurlijk ook nog weer items komen zoals 'Dicteezinnen 3V'. Ik zou het ook nog graag verder kunnen onderverdelen in VMBO, HAVO, VWO etc.
Heeft iemand suggesties?
En mocht je allebei willen gebruiken kun je aan de slag met een Many To Many relatie en een leuke schakel tabel.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
Klas 1 -> Nederlands
Klas 1 -> Engels
Klas 2 -> Nederlands
Klas 2 -> Engels
Klas 3 -> Nederlands
Klas 3 -> Engels
Klas 4 -> Nederlands
Klas 4 -> Engels
Klas 5 -> Nederlands
Klas 5 -> Engels
Klas 6 -> Nederlands
Klas 6 -> Engels
Klas 1 -> Engels
Klas 2 -> Nederlands
Klas 2 -> Engels
Klas 3 -> Nederlands
Klas 3 -> Engels
Klas 4 -> Nederlands
Klas 4 -> Engels
Klas 5 -> Nederlands
Klas 5 -> Engels
Klas 6 -> Nederlands
Klas 6 -> Engels
Mijn database structuur is nu als volgt:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
download_categories:
category_id INT(11) PRIMARY KEY
category_name VARCHAR(255)
download_parents:
parent_id INT(11) FOREIGN KEY REFERENCES download_categories.category_id
child_id INT(11) FOREIGN KEY REFERENCES download_categories.category_id
category_id INT(11) PRIMARY KEY
category_name VARCHAR(255)
download_parents:
parent_id INT(11) FOREIGN KEY REFERENCES download_categories.category_id
child_id INT(11) FOREIGN KEY REFERENCES download_categories.category_id
Ik heb nu dus eigenlijk een probleem met mijn downloads. De categorienamen zijn hetzelfde, maar de items erin niet. Dus als ik zou zeggen download_items.id = 2 (van Engels), staat het bij alle klassen. Maar ik wil het dus maar bij 1 klas hebben staan. Dus dan zou ik ook nog een koppeltabel moeten maken voor items naar juiste parent-childs matchen?
Ik gebruik nu voor het matchen van de childs aan de parent trouwens:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
SELECT m.category_id AS child_id, m.category_name AS child_name, n.category_name AS parent_name, n.category_id AS parent_id
FROM
download_categories AS m
INNER JOIN
download_parents AS r
ON r.child_id=m.category_id
INNER JOIN
download_categories AS n
ON r.parent_id=n.category_id
WHERE n.category_id = 1
FROM
download_categories AS m
INNER JOIN
download_parents AS r
ON r.child_id=m.category_id
INNER JOIN
download_categories AS n
ON r.parent_id=n.category_id
WHERE n.category_id = 1
Dit werkt in principe goed.
Resultaten hierbij (category_id = 1 is Klas 1)
Gewijzigd op 19/02/2013 19:59:56 door Koen Vlaswinkel