[SQL] FK altijd maar naar 1 tabel

Pagina: 1
Acties:

  • Zyphrax
  • Registratie: September 2001
  • Laatst online: 04-04-2023
Voor mijn werk ben ik bezig met het ontwikkelen van een editor. Aan deze editor komt een complete file-explorer en daarbij horend user- en rechtensysteem.

In het systeem komen voornamelijk 4 typen voor:
- Group
- User
- Folder
- File

Afbeeldingslocatie: http://yvo.net/stage/Diagram2.JPG

Om de rechten over deze typen vast te kunnen leggen, is er een rechtentabel nodig die twee typen met elkaar verbind en aangeeft wat voor recht van toepassing is (denk aan read, write of delete). Het probleem is dat zowel Object1ID als Object2ID slaat op een ID uit File/Folder/Group of User. Een User kan bijv. een permission over een File hebben, maar de permission table kan ook gebruikt worden om aan te geven dat een Group een permissie heeft over een Folder. Of een Group over een User (recht van password resetten).

Zelf dachten we er aan om een Object table te maken en ieder type een ObjectID te geven. Daarmee maak je het mogelijk om in de Permission table een ObjectID te gebruiken en heb je dus 1 tabel waar de FK naar wijst.

Afbeeldingslocatie: http://yvo.net/stage/Diagram3.JPG

Het probleem hierbij is dat er altijd maar 1 weg mogelijk is. Je kan via een File/Group/User/Folder zijn object opvragen en zo kijken wat de permissions zijn, maar je kan nooit via een ObjectID terugvinden of dit een User/Group/Folder/File was zonder alle tabellen af te gaan en te kijken of het ObjectID hierin voorkomt.

We dachten eerst dat Inheritance hierbij uitkomst zou bieden, helaas is hier sowieso PostgreSQL voor nodig en dit voorkomt het probleem waarschijnlijk niet volledig. Over de inheritance oplossing ging onderstaand topic:

[SQL] Overerving

Bij meerdere applicaties blijft komt dit probleem terug. Denk bijvoorbeeld aan een inlogsysteem dat met verschillende type gebruikers werkt. Hoe koppel je dan 1 username aan wellicht 5 verschillende tabellen. Een FK loopt tenslotte altijd maar naar 1 tabel.

Alle hulp is welkom.

Any sufficiently advanced technology is equivalent to magic.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Zie ik nu goed dat jij een File schrijfrechten kunt geven over een user? :?

Zo ja klopt je model niet :)

Professionele website nodig?


  • Zyphrax
  • Registratie: September 2001
  • Laatst online: 04-04-2023
Ja dat is volgens dit data model mogelijk, via de programmacode kan afgedwongen worden dat, dat niet mogelijk is. Of wellicht in de vorm van twee object tabellen ipv 1.

Wat voor oplossing raad je me aan?

Any sufficiently advanced technology is equivalent to magic.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Zyphrax schreef op 03 maart 2004 @ 13:13:
Ja dat is volgens dit data model mogelijk, via de programmacode kan afgedwongen worden dat, dat niet mogelijk is. Of wellicht in de vorm van twee object tabellen ipv 1.

Wat voor oplossing raad je me aan?
Twee object tabellen lost je probleem niet op, je hebt gewoon bepaalde onmogelijke combinaties, zoals File->User, File->Group, Folder->Group, File->Folder.

En in de programmacode je dataintegriteit afdwingen is niet helemaal kosher he ;)

Ik zal vanavond eens kijken, heb nu op m'n werk niet echt tijd voor iets als dit :Y)

Professionele website nodig?


  • Zyphrax
  • Registratie: September 2001
  • Laatst online: 04-04-2023
Een aparte tabel voor een relatie tussen twee typen lijkt me ook geen mooie oplossing. Dan krijg je tabellen als:

- UserFilePermissions
- UserFolderPermissions
- UserUserPermissions
- UserGroupPermissions
- GroupFilePermissions
- .... etc.

Any sufficiently advanced technology is equivalent to magic.