Avatar billede morw22 Nybegynder
19. oktober 1999 - 08:02 Der er 8 kommentarer og
1 løsning

Database opbygning

Jeg er  ved at lave et system i php til projektstyring, men er i tvivl om hvordan jeg skal opbygge min MySQL database.

Jeg har tre tabeller:


Projekter (ID, overskrift, beskrivelse, deadline)
Adgang (ID, ProjektID, PersonID)
Personer (ID, navn, kode, email)


Tabellen adgang skal så bruges til at styre hvem der må se visse projekter.

Hvordan er denne opbygning? Kan det gøres på en bedre måde?

Hvordan laver jeg en join der virker efter hensigten?

Hvordan er det mest praktisk at styre tabellen adgang? Der må jo ikke komme dubletter i den.

Nogen der kan overskue dette?



Med venlig hilsen

Morten
Avatar billede jkn Nybegynder
19. oktober 1999 - 08:41 #1
Dubletter undgår du ved at lave nøgler (primær og index) med entydig nøgler.
Projekt: Nøgle på projektid
Adgang: Nøgle på personid og projektid
person: Nøgle på Personid
Du kan evt overveje at skifte personid med CPR, da du ellers kan få den samme person med 2 forskellige personid
og du kan fjerne adgangid, da kombinationen projektid, personid er entydig.
hvis du vil teste adgang, kan du udføre følgende:
select projektid
from person a, adgang b
where a.personid = (ønsket id)
and b.personid = a.personid
Hvis fundet, har han adgang ellers ikke
Hvis du har spgm, kan du skrive til mig
Hilsen John Kurt Nielsen
johnkurt@image.dk
Avatar billede morw22 Nybegynder
19. oktober 1999 - 09:00 #2
Jeg kan da vist ikke lave en nøgle i adgang, da samme person kan være med i flere projekter og andre personer kan være med i samme projekt.

Det jeg vil undgå er er samme person står registreret med flere gang med samme projekt.

f.eks.

adgang (personID, projektID)

1,2
1,3
1,2
2,3

Her har person med ID 1 adgang til projekt 2 to gange. Så skal jeg vel lave en distinct join for at han ikke for vist samme projekt flere gang på hans oversigt over projekter??

Avatar billede jkn Nybegynder
19. oktober 1999 - 09:04 #3
Hvorfor kan du ikke lave et index over 2 felter nemlig projektid, personid ? Så undgår du de viste situation. Hvis DBS ikke håndtere index over flere nøgler, skal du selv håndtere det
Avatar billede morw22 Nybegynder
19. oktober 1999 - 09:09 #4
Wow! Der kræver vist lige en forklaring, da jeg er lidt grøn når det gælder SQL i en mange til mange relationsdatabase.
Avatar billede jkn Nybegynder
19. oktober 1999 - 09:16 #5
OK Når man har en mange-til-mange relation, 'skubber' man en relation imellem, således at man kan få data på 3. normalform. Man får på den måde 1-til-mange relationer. Man løser så dublikeret problemet enten med nøgler (index) eller programmering afhængig af DBS. Er det bedre ?
Avatar billede morw22 Nybegynder
19. oktober 1999 - 09:32 #6
Jeg forstår det stadig ikke, men det kommer nok.

Jeg kan dog ikke se hvordan jeg kan lave nøgler i min tabel med navnet "adgang". Da det vel er den der gør det til en mange-til-mange løsning??
Avatar billede jkn Nybegynder
19. oktober 1999 - 09:34 #7
Jeg ved ikke ret meget om MySQL; men prøv at kigge efter en kommando ala 'CREATE INDEX...' eller lign.
Hvordan laver du nøgler på de andre tabeller ?
Avatar billede morw22 Nybegynder
19. oktober 1999 - 09:48 #8
Nu må du hellere få lidt point for din ihærdighed.
Avatar billede morw22 Nybegynder
19. oktober 1999 - 09:49 #9
Jeg tror jeg laver en select distict for at ungå dubletter.
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