Goed, ik zit een beetje met een dilemma. Ik wil een datamodel ontwerpen voor een willekeurige bedrijfsapplicatie (denk aan relatiebeheer, e-mails, etc.), maar ik wil op ieder object dat ik heb rechten kunnen toekennen, per afzonderlijke gebruiker. Nu zat ik te denken hoe ik dit zou kunnen aanpakken, en kwam ik op hetvolgende uit:
Dit is even snel zo neergegooid, dus 't kan misschien niet helemaal correct zijn. Mijn bezwaren tegen deze opzet zijn voornamelijk:
In ieder geval bedankt, want ik zit hier echt een beetje klem.
- één overkoepelende tabel met daarin enkel unique IDs, eventueel met aanmaak datum/wijzig datum;
- aan deze tabel koppel ik de gebruikers met een bepaald recht (lezen en/of schrijven om te beginnen). Dit moet uiteindelijk uitbreidbaar zijn, dus laat ik dit verder open;
- Nu is ieder object in de database uitgerust met een dergelijk ID. Ik kan dan dus van ieder object zien of een gebruiker gerechtigd is om een object te benaderen, en op welke manier. Daarnaast kan ik ook nog eens zien wanneer de boel gewijzigd is en aangemaakt.
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
| -- puur voor completeness van 't voorbeeld DECLARE @userid int SET @userid = 1 SELECT relation.*, entity.created, entity.modified, rights.rightid FROM relation JOIN entity ON relation.id = entity.id LEFT JOIN rights ON relation.id = rights.id WHERE rights.userid = @userid |
Dit is even snel zo neergegooid, dus 't kan misschien niet helemaal correct zijn. Mijn bezwaren tegen deze opzet zijn voornamelijk:
- De queries worden zo onnoemelijk complex voor de meest simpele dingen;
- Veel joins... is dit een probleem met veel data?
In ieder geval bedankt, want ik zit hier echt een beetje klem.