Ik heb een tabel 'permissions' die aangeeft welke groep voor welke module/submodule welke rechten heeft.
Deze ziet er als volgt uit:
- mid is een foreign key naar mid van de module table
- smid is een foreign key naar de smid van submodule table
- gid is een foreign key naar het gid van de group table
- uid zal zelden gebruikt worden maar is een foreign key naar de user table
Nou moet je natuurlijk op alle 4 de kollomen een index maken maar nou zullen de rechten bijna altijd geselecteerd worden op de combinatie van:
- het gid van de gebruiker
- de module
- (eventueel smid van de submodule).
Dus leek het mij handiger om een multiple kolom index te maken aangezien ik alle rechten voor bijv alleen een group_id alleen zal opvragen bij het wijzigen (zal niet vaak gebeuren) ervan. Voor de rest zal het altijd in combinatie met een mid gebeuren.
Alleen kan MySQL schijnbaar geen foreign keys creeeren als de betreffende kolom geen compleet eigen index heeft ipv een gedeelde. Is hier een andere oplossing voor of moet ik genoegen nemen met 4 losse indexes.
Ik krijg dus geen specifieke foutmelding, alleen:
"#1005 - Can't create table '.\database\permissions.frm' (errno: 150)"
Dit is de query die ik wil gebruiken (voor het geval het wel kan maar ik iets fout doe):
Verder vroeg ik me af of het mischien slimmer is om (indien het bovenstaande dus wel mogelijk is) de kolom pid weg te laten en in plaats daarvan de primary key over de kolommen uid, mid, smid te zetten. De combinatie van die 3 moet immers ook altijd uniek zijn (we willen geen dubbele rechten).
Is dat in dit geval even snel met opzoeken of is bijv bij het wijzigen het opgeven van pid sneller (als het dus al mogelijk is)...
Deze ziet er als volgt uit:
code:
1
2
3
4
5
6
7
8
9
10
| +-----------------------+ | PERMISSIONS | +--------+--------------+ | pid | int(8) | <- primary key | mid | mediumint(5) | | smid | mediumint(5) | | gid | mediumint(5) | | uid | int(11) | | rights | mediumint(5) | +--------+--------------+ |
- mid is een foreign key naar mid van de module table
- smid is een foreign key naar de smid van submodule table
- gid is een foreign key naar het gid van de group table
- uid zal zelden gebruikt worden maar is een foreign key naar de user table
Nou moet je natuurlijk op alle 4 de kollomen een index maken maar nou zullen de rechten bijna altijd geselecteerd worden op de combinatie van:
- het gid van de gebruiker
- de module
- (eventueel smid van de submodule).
Dus leek het mij handiger om een multiple kolom index te maken aangezien ik alle rechten voor bijv alleen een group_id alleen zal opvragen bij het wijzigen (zal niet vaak gebeuren) ervan. Voor de rest zal het altijd in combinatie met een mid gebeuren.
Alleen kan MySQL schijnbaar geen foreign keys creeeren als de betreffende kolom geen compleet eigen index heeft ipv een gedeelde. Is hier een andere oplossing voor of moet ik genoegen nemen met 4 losse indexes.
Ik krijg dus geen specifieke foutmelding, alleen:
"#1005 - Can't create table '.\database\permissions.frm' (errno: 150)"
Dit is de query die ik wil gebruiken (voor het geval het wel kan maar ik iets fout doe):
SQL:
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
| create table permissions ( pid int(8) not null auto_increment, mid mediumint(5) not null, smid mediumint(5) not null, gid mediumint(5) not null, uid int(11), rights mediumint(5) not null, primary key (pid), index groupmod_ind (gid, mid, smid), index uid_ind (uid), constraint `is allowed to (group)` foreign key (gid) references groups (gid) on delete cascade on update cascade, constraint `is allowed to (user)` foreign key (uid) references users (uid) on delete cascade on update cascade, constraint `in2` foreign key (smid) references submodules (smid) on delete cascade on update cascade, constraint `in1` foreign key (mid) references modules (mid) on delete cascade on update cascade ) type = innodb auto_increment = 1; |
Verder vroeg ik me af of het mischien slimmer is om (indien het bovenstaande dus wel mogelijk is) de kolom pid weg te laten en in plaats daarvan de primary key over de kolommen uid, mid, smid te zetten. De combinatie van die 3 moet immers ook altijd uniek zijn (we willen geen dubbele rechten).
Is dat in dit geval even snel met opzoeken of is bijv bij het wijzigen het opgeven van pid sneller (als het dus al mogelijk is)...