Avatar billede pnr Nybegynder
20. august 2004 - 08:44 Der er 10 kommentarer og
1 løsning

Hjælp til design af DB

Jeg har et spørgsmål angående design af en specifik database.

Jeg har en database som indholder følgende tabeller:

Grupper (Indeholder overordnet oplysninger omkring en gruppe)

emner (Er en specifik gruppe og har en relation til gruppe)

bruger (Er bruger der har ret til at se oplysninger omkring grupperne)

relationer (Viser hvem der må se hvad)


Brugerne kan se forskelligt alt efter hvilken relation de har, og det skal være så en bruger kan se et bestemt enme og kun det enme, mens en anden skal kunne se en hel gruppe og alle emner i denne.

Håber det er til at forstå.

Men hvordan løser jeg dette pænest, Skal jeg i tabellen relationer have en en relation til hver emne, eller kan jeg lave det smartere, da fleste der skal have adgang har adgang til en hel gruppe.
Avatar billede arne_v Ekspert
20. august 2004 - 13:06 #1
Jeg er ikke helt sikker på at jeg forstår hvad du vil.

Jeg bliver også lidt forvirret af at du bruger termen relationer meget
og den har en meget specifik betydning i database terminilogi og jeg er ikke
sikker på at det er det du mener.

Men generelt vil man kunne lave det som:

tabel X
xid  felt1 felt2 felt3 ...

tabel bruger
uid  navn  ...

tabel adgang
uid xid

således at uid har adgang til xid hvsi der er en række i i adgang tabellen
med den kombination

adgang kan f.eks. indeholde:

uid xid
1  1
1  2
1  3
2  2
2  3
2  4

hvsi uid 1 har adgang til xid 1,2,3 og uid 2 har adgang til xid 2,3,4
Avatar billede pnr Nybegynder
20. august 2004 - 13:57 #2
Den tabel jeg kalder relationer er den du kalder adgang.

Men du mangler en tabel. Og mit spørgsmål er om der er en smartere måde designe databasen på?

Jeg prøver lige at om formulere mit spørgsmål.


Jeg har et spørgsmål angående design af en specifik database.

Jeg har en database som indholder følgende tabeller:

Grupper (Indeholder overordnet oplysninger omkring en gruppe)

emner (Er en specifik gruppe og indeholder en fremmede nøgle  til tabellen grupper)

bruger (Er bruger der har ret til at se oplysninger omkring grupperne)

adgang (Viser hvem der må se hvad)


Brugerne kan se forskelligt alt efter hvilken adgang de har, og det skal være så en bruger kan se et bestemt enme og kun det enme, mens en anden skal kunne se en hel gruppe og alle emner i denne. de fleste bruger skal kunne se alle enmer i en gruppe.

Håber det er til at forstå.

Men hvordan løser jeg dette pænest, Skal jeg i tabellen adgang have en en relation til hvert emne, eller kan jeg lave det smartere, da fleste der skal have adgang har adgang til alle emner i en gruppe.

Håber at det er mere forståligt :-)
Avatar billede arne_v Ekspert
20. august 2004 - 14:06 #3
Jeg tror jeg begynder at fatte det.

Jeg tror at jeg ville lave det som:

grupper
-------
gid (PK)
navn
...

emner
-----
eid (PK)
gid (FK->grupper)
navn
...

bruger
------
uid (PK)
navn
...

gruppeadgang
------------
uid (PK, FK->bruger)
gid (PK, FK->grupper)

emneadgang
----------
uid (PK, FK->bruger)
eid (PK, FK->emner)
Avatar billede pnr Nybegynder
20. august 2004 - 14:20 #4
Den er jeg ikke helt med på. Hvis nu en prøver at logge ind så skal jeg kontrollere i begge tabller for at se hvilke adgange personen har? Så er jeg da ved at synes at det er nemmere bare at have en tabel med adgang, og når en får tildelt en adgang vil personen blive tildelt en adgang til alle emner i denne gruppe.

Men jeg har nok ikke helt fattet din løsning.
Avatar billede arne_v Ekspert
20. august 2004 - 14:23 #5
Hvis du vil tildele adgang både på gruppe og på emne niveau så synes
jeg også at du i databasen skal gemme rettigheder direkte på de to niveauer.

Alt andet giver problemer senere.
Avatar billede arne_v Ekspert
20. august 2004 - 14:25 #6
Hvis du gerne vil have et "nemt" interface, så lav et view med uid og eid hvor
du smaler informationen.

Men tabeller bør altid indeholde de logiske rådata.
Avatar billede pnr Nybegynder
20. august 2004 - 14:30 #7
Nu bliver det avanceret :-) Når jeg laver et view kan jeg så søge i det som om at det var en tabel?
Avatar billede arne_v Ekspert
20. august 2004 - 14:32 #8
Ja
Avatar billede arne_v Ekspert
20. august 2004 - 19:31 #9
Noget a la:

CREATE VIEW adgang AS
(SELECT uid,eid FROM emneadgang)
UNION
(SELECT gruppeadgang.gid,emner.eid
FROM grupper,emner,gruppeadgang
WHERE grupper.gid=emner.gid AND gruppeadgang.gid=grupper.gid)
Avatar billede arne_v Ekspert
20. august 2004 - 19:31 #10
ok ?
Avatar billede pnr Nybegynder
24. august 2004 - 07:37 #11
Jeg prøver at kigge på det og vender tilbage hvis det giver problemmer!

Du får tusind tak for hjælpen!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester