Ik probeer een basissysteem van de grond te krijgen dat generiek om moet gaan met relaties in databases. Bij 1-op-1 of 1-op-veel is dat geen probleem, maar bij veel-op-veel kom ik toch wat in de problemen. D.w.z. het lukt wel, maar naar mijn idee niet efficient genoeg (min. 3 aparte queries).
Vb:
Die middelste tabel gaat het volgens mij vooral om. Dit zou eigenlijk een generieke relatietabel die voor iedere relatie gebruikt kan worden (voor iedere tabel).
Met content erin wordt het zoiets:
Om nu vanuit BAND alle bijbehorende GENREs te pakken aan de hand van GRID, wordt een erg lelijke query. Dit zou met een gestapelde JOIN kunnen, maar volgens mij is daar een hele grote optimalisatie mogelijk, maar na een paar uur prutsen en tekenen heb ik het nog niet gevonden. Hulp is zeer welkom. Des te meer reden waarom een JOIN op den duur niet lukt, is het volgende (probleem met kolomnamen/keynamen):
Daarbij wil ik de middelste tabel (RELATIE) graag generiek maken, zodat niet alleen de koppeling van BAND en GENRE op GRID erin komt, maar ook bijv AUTOHANDELAAR naar AUTO op MERK.
Dat zou dan zoiets worden?
Maar dan mis ik weer over welke kolommen/keys het gaat e.d.
Ik heb het idee dat ik ergens een grove denkfout maak. If so, wijs me er s.v.p. op want volgens mij werk ik mezelf steeds verder in de hoek.
Vb:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| BAND +----+ | oid| +----+ | bid| +----+ oid -> objectid bid -> bandid BANDGENRE +----+ | rid| +----+ | oid| +----+ |grid| +----+ rid -> relatieid oid -> objectid grid -> genregroepid GENRE +----+ | oid| +----+ | gid| +----+ |grid| +----+ oid -> objectid gid -> genreid grid -> genregroepid |
Die middelste tabel gaat het volgens mij vooral om. Dit zou eigenlijk een generieke relatietabel die voor iedere relatie gebruikt kan worden (voor iedere tabel).
Met content erin wordt het zoiets:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
| BAND +----+----+ | oid| bid| +----+----+ | 51 | 1 | +----+----+ | 52 | 2 | +----+----+ | 53 | 3 | +----+----+ BANDGENRE / RELATION +----+----+----+ | rid| oid|grid| +----+----+----+ | 1 | 51 | 2 | +----+----+----+ | 2 | 51 | 3 | +----+----+----+ | 2 | 52 | 2 | +----+----+----+ | 2 | 53 | 1 | +----+----+----+ | 3 | 53 | 2 | +----+----+----+ | 2 | 53 | 3 | +----+----+----+ GENRE +----+----+----+ | oid| gid|grid| +----+----+----+ | 54 | 1 | 1 | +----+----+----+ | 55 | 2 | 2 | +----+----+----+ | 56 | 3 | 1 | +----+----+----+ | 57 | 4 | 1 | +----+----+----+ | 58 | 5 | 3 | +----+----+----+ |
Om nu vanuit BAND alle bijbehorende GENREs te pakken aan de hand van GRID, wordt een erg lelijke query. Dit zou met een gestapelde JOIN kunnen, maar volgens mij is daar een hele grote optimalisatie mogelijk, maar na een paar uur prutsen en tekenen heb ik het nog niet gevonden. Hulp is zeer welkom. Des te meer reden waarom een JOIN op den duur niet lukt, is het volgende (probleem met kolomnamen/keynamen):
Daarbij wil ik de middelste tabel (RELATIE) graag generiek maken, zodat niet alleen de koppeling van BAND en GENRE op GRID erin komt, maar ook bijv AUTOHANDELAAR naar AUTO op MERK.
Dat zou dan zoiets worden?
code:
1
2
3
4
5
6
7
| +------+ | rid | +------+ | srcid| +------+ | refid| +------+ |
Maar dan mis ik weer over welke kolommen/keys het gaat e.d.
Ik heb het idee dat ik ergens een grove denkfout maak. If so, wijs me er s.v.p. op want volgens mij werk ik mezelf steeds verder in de hoek.
[ Voor 3% gewijzigd door r0bert op 26-03-2008 10:56 ]