Avatar billede jss Nybegynder
02. december 2005 - 09:37 Der er 13 kommentarer og
1 løsning

Ressourcestyringssystem: hvordan opbygges database optimalt?

Hej experts

Jeg er igang med at opbygge et system til ressourcestyring internt i firmaet og har i den forbindelse nogle spørgsmål omkring opbygning af databasen.

Jeg har forestillet mig 3 tabeller (tblProjekt, tblMedarbejder og tblProjektMedarbejder) - de første 2 giver sig selv, mens den sidste er den tabel hvor trådene samles (hvilke medarbejdere er på hvilke projeter på hvilke datoer)

Det jeg er i tvivl om, er hvordan jeg skal lagre feks. følgende informationer:

Medarbejder A skal på Projekt B d. 5-12-2005 til d. 9-12-2005 - altså 5 dage.

Enten kan jeg lagre det som 5 records i db eller også kan jeg samle datoerne i et tekstfelt i db og således nøjes med 1 record. Men hvad har de 2 løsninger af konsekvenser for performance, mulighed for udtræk baseret på dato osv?
Avatar billede jss Nybegynder
02. december 2005 - 10:36 #1
kom frisk med et bud - hæver lige til 100 point ...
Avatar billede Slettet bruger
03. december 2005 - 08:07 #2
Jeg ville jo nok bruge en model hvor du havde

medarbejderid, projektid, startdato, slutdato

hvis det er en simpel allokeringsting. Problemet er jo hvordan Jeres regler for allokering af ressourcer er og her bliver du nok nødtil at skrive lidt mere detalje hvis nogen skal kunne sige noget fornuftigt.

Kan en mebdarbejder f.eks. være på flere projekter samtidigt, hvor han selv styre hvilket han bruger tid på eller arbejdes der som udgangspunkt altid på det, som medarbejderen er allokeret til. Hvis du kommer i en meget dynamisk situation kan du overveje at anvende en form for kalender tabel, hvor du pr. dag holder oplysninger omkring den medarbejder allokering. Der giver en simpel model, som tillader let dags planlægning og datamæssigt er der ikke det store problem, max 365 rækker pr. år pr. medarbejder.

Men prøv at være lidt mere specifik omkring problemet.
Avatar billede jss Nybegynder
05. december 2005 - 08:18 #3
kryptos --> du har helt ret i, at det kan løses på mange måder afhængig af den måde organisationen allokerer ressourcer på.
Så:

Ad1.
Medarbejderen kan være på flere projekter samtidig, feks. Projekt C d. 5-12-2005, 6-12-2005, 9-12-2005 og Projekt D d. 7-12-2005 og 8-12-2005 (altså først 2 dage på Projekt C, dernæst 2 dage på Projekt D og til sidst 1 dag på Projekt C i den samme uge)

Ad2.
Medarbejderen arbejder altid på det, som han/hun er allokeret til - kan altså ikke selv ændre noget.

Ad3.
Datamængde: umiddelbart kører der op til flere hundrede projekter på årsbasis, hvor der typisk skal allokeres mellem 5-15 medarbejdere fordelt på typisk 5-20 dage - derfor kan der hurtigt blive tale om en del data
Avatar billede Slettet bruger
05. december 2005 - 08:25 #4
Jeg vil foreslå dig at du opretter en kalender for samtligt medarbejdere og booker projekter ind på de enkelte data. Dette betyder også at du om ikke andet har en rimelig chance for at kender omfanget af data i systemet.
Avatar billede jss Nybegynder
05. december 2005 - 08:56 #5
Ad4. :-)
Vi har over 100 medarbejdere som der kan allokeres til projekter. Medarbejderne er ansat i vores Callcenter, typisk som studiejob og derfor er der en vis "omsætningshastighed".

Jeg tror det bliver lidt stift med den kalender pr. medarbejder - muligvis tager jeg fejl ...
Men er det en direkte dum idé at arbejde videre med min tanke omkring at lave en record pr. medarbejder pr. projekt og gemme datoen/datoerne i en streng, feks. i kommasepareret format "20051205,20051206" (5-12-2005 og 6-12-2005). Vil det blive for tungt at lave udtræk via SQL (det vil blive noget med LIKE)?
Avatar billede Slettet bruger
05. december 2005 - 09:05 #6
Du skal ikke vælge en model hvor du gemmer datoerne som kommasepareret. For det første er det vanskeligt at søge i og der kommer uværeligt til at give dig performance problemer. Hvor du ville kunne du tilknytte "projekt perioder" i en relation. En anden mulighed er at du for hver record har en start og stop dato så skal du blot sørger for at du ikke overbooker.
Avatar billede jss Nybegynder
05. december 2005 - 09:08 #7
Jeg vil jo også gerne have adgang til historik på den enkelte medarbejder/projekt
Avatar billede Slettet bruger
05. december 2005 - 09:15 #8
Det vil du også have du skal have følgende sådan lidt groft:

Tabeller med:

Medarbejdere
Projekter
Allokeringer

I allokeringer vil der stå

medarbejderId, projektId, startdato, slutdato

Du bliver blot ved med at lægge allokeringer i hver gang du foretager en allokering. Du vil derfor til hver en tid kunne udlede samtligt allokeringer for en medarbejder eller et projekt for den sags skyld.
Avatar billede jss Nybegynder
05. december 2005 - 09:24 #9
Aha - nu er vi ved at komme frem til en mellemting af det jeg oprindeligt havde forestillet mig. Eksempel

Medarbejderen er på flere projekter samtidig, feks. Projekt C d. 5-12-2005, 6-12-2005, 9-12-2005 og Projekt D d. 7-12-2005 og 8-12-2005 (altså først 2 dage på Projekt C, dernæst 2 dage på Projekt D og til sidst 1 dag på Projekt C i den samme uge)

Dette giver 3 records i db
2 dage på Projekt C
2 dage på Projekt D
1 dag på Projekt C

Er det sådan du mener det skal gøres?
Avatar billede jss Nybegynder
05. december 2005 - 09:26 #10
Umiddelbart er det jo også noget smartere at have datoer i datoformat i databasen
Avatar billede jss Nybegynder
05. december 2005 - 09:30 #11
jeg er først tilbage ved computeren med middagstid idag, så hej så længe
Avatar billede Slettet bruger
05. december 2005 - 09:33 #12
startdato og slutdato skal være af type datetime så du kan arbejde reelt på dem, eller med andre ord kan lave brugbare forespørgsler. Du skal være opmærksom på at såfremt du repræsenterer dine datoer i tekst så kan du ikke regle på dage og ligeende. Det er vigtigt at du bruger den korrekte datatype da du ellers taber en masse funktionalitet.
Avatar billede jss Nybegynder
05. december 2005 - 13:04 #13
Jeg er med på dit forslag, så nu skal jeg bare have det kodet...
Tak for de fine kommentarer, læg et svar og points er dine :-)
Avatar billede Slettet bruger
05. december 2005 - 13:06 #14
svar ;)
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
Kurser inden for grundlæggende programmering

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