02. december 2005 - 09:37Der 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?
kom frisk med et bud - hæver lige til 100 point ...
Synes godt om
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.
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
Synes godt om
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.
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)?
Synes godt om
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.
Jeg vil jo også gerne have adgang til historik på den enkelte medarbejder/projekt
Synes godt om
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.
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
jeg er først tilbage ved computeren med middagstid idag, så hej så længe
Synes godt om
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.
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 :-)
Synes godt om
Slettet bruger
05. december 2005 - 13:06#14
svar ;)
Synes godt om
Ny brugerNybegynder
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.