Hej, Jag skulle behöva lite hjälp elelr förslag för design av en databas jag ska börja med. En tabell projekt Hej! Tack så mkt för era svar... Det du har angett ovan är prexis så som jag har försökt beskriva, bortsett från dbo. Kajsa har gjort antagandet att ett funktionsområde kan ingå i flera projekt, gäller inte det antagandet behöver du heller inte ha med den tabellen utan låter projekt & funktionsområde ha en "en till många"-relation Ahhhhh. nu börjar saker o ting klarna här... Tack återigen Marcus..databas Design... hjälp.
Den ska innehålla detta:
Ett Projekt består utav flera Funktionsområden (okänt antal). Varje funktionsområde har en (kanske fler) ansvariga.
Varje anställd kan ingå i flera funktionsområden (FO) där de även kan vara ansvariga.
Hur lägger jag upp detta på snyggast sätt?
Just nu har jag bla:
Employee.ID, .Namn, .efternamn, .Email
Project.ID, Namn, FO1resp, FO2resp, FO3resp...osv.
FO.ID , .Namn
som ni märker är detta ingen snygg lösning eftersom man inte vet antalet FOn... + att varje antsälld ska kunna vara delaktig i flera FOn.. hur löser jag detta smidigt så att jag kan göra enkla och snygga querys senare?
Alla tips/förslag är välkomna..Sv: databas Design... hjälp.
En tabell Funktionsområde (Fo)
En tabell FOMembers med ett booleanskt fält som heter "responsible", "manager" eller liknande
En tabell Empolyee
Projekt en till många relation mot FO
Fo en till många relation mot FOMembers
Empolyee en till många relation mot FOMembers
Vem(vilka) som är ansvarig för FO styrs av flaggan i FOMembers, de so inte har flaggan satta på sig är "bara" medlemmar.
Finns fler sätt att lösa det, detta var det första jag kom på.Sv: databas Design... hjälp.
Jag kanske har missförstått dig, men det här kanske är en lösning.
Skapa en tabell för funktionsområden och en kopplingstabell mellan personer och funktionsområden (eftersom det är ett "många till många förhållande"). På kopplingstabellen kan du lägga ett fält som markerar om personen är ansvarig.
På samma sätt verkar det finnas ett många till mångaförhållande mellan funktionsområden och projekt. Kopplingen mellan projekt, funktionsområde och person kräver också en tabell.
När du sedan vill veta personer som är knutna till vilket funktionsområden för varje projekt kanske det kan se ut så här:
SELECT Proj.Projekt, FO.Funktionsomrade, P.Namn, ProjFOP.HarAnsvar
FROM dbo.ProjektFunktionsomrade ProjFOP
JOIN dbo.Projekt Proj ON Proj.ProjektID = ProjFOP.ProjektID
JOIN dbo.Funktionsomrade FO ON ProjFOP.FunktionsomradeID = FO.FunktionsomradeID
JOIN dbo.Person P ON ProjFOP.PersonID = P.PersonID
ORDER BY FO.Proj.Projekt, FO.Funktionsomrade, P.Namn
Hoppas att detta var till någon hjälp.
/KajsaSv: databas Design... hjälp.
Ur era svar kom jag fram till ngt som liknar detta:
http://hrmintranet.optinet.se/relationer2.jpg
(PT2-PT7 samt SOP innehåller slutdatum(deadline) för ollika faser i projektet. Antalet kan Variera. Dessa kanske man borde lägga i en egen tabell?)
1PrjectArea.resp är alltså ansvarig för det aktuella funktionsområdet i ett specifikt projekt.
<B>
Fråga1: Tror ni att det kan fungera med den design jag valt??
Fråga2: Hur ser SQL-satsen ut för att få fram tex alla ansvariga? eller lista en anställds funktionsområden?
</B>
Detta är första gången jag jobbar med sånt här så det är bra att fråga innan så jag inte hamnar i en massa fallgropar längre fram.
OBS! Tydligen kan inte ett funktionsOmråde (Area) ha fler än en Ansvarig, så det underlättar det hela lite.
Tack på förhand...
/HSv:databas Design... hjälp.
Kajsa, Ditt svar var mkt bra och utförligt. Gillade speciellt SQL-frågan du hade med, för det hade blivit min nästa fråga..:)
Men jag var inte med till 100%, Är det ngt sånthär du menar??
• Proj
o ProjektID
o Projekt
• FO
o FunktionsomradeID
o Funktionsomrade
• P
o PersonID
o Namn
--- Kopplingstabeller ---
• ProjFoP
o FunktionsomradeID
o ProjektID
o HarAnsvar
• dbo
o Projekt
o ProjektFunktionsomrade
o Person
Jag är med på det mesta utom just kopplingstabellen "dbo"... hur kommer den in i bilden och vad fyller den för funktion?
Annars verkar min och din design vara snarlika...
MvH/HSv: databas Design... hjälp.
Edit:
ProjFoP
o FunktionsomradeID
o ProjektID
o HarAnsvar
Skall inte se ut så utan så här
FoP
o FunktionsomradeID
o PersonID
o HarAnsvar
Dett gäller dock med följande antagande:
* Ett Fo ingår ENDAST i ETT projekt, ett projekt kan bestå av flera Fo
* En person kan ingå i flera Fo och i vissa av dem ha "rollen" HaAnsvar
För att få ut vilka personer som ingår i ett projekt:
select distinct(p.personid) from p, FO, proj
where p.personid = FO.Personid
and FO.ProjektID = proj.ProjektID
and proj.ProjektID = 1234567890
Detta kommer att ge de personer som ingår i projektet. Tänk på att en person kan ingå i flera Fo, därav distinct.
Edit2:
<b> Hur ser SQL-satsen ut för att få fram tex alla ansvariga? eller lista en anställds funktionsområden? </b>
Alla ansvarig OAVSETT vilken Fo de tillhör, en person kan vara ansvarig i flera Fo men visas bara en gång
select distinct(p.personid) from p, FO
where p.personid = FO.Personid
and HarAnsvar = 1 (eller True som det skall vara om det är ett boolskt fält)
Visar alla ansvarig och deras Fo, en person visas flera gånger men då kopplad till fo
select p.personid, fo.FunktionsomradeID from p, FO
where p.personid = FO.Personid
and HarAnsvar = 1 (eller True som det skall vara om det är ett boolskt fält)
order by fo.FunktionsomradeID
Visar de Fo som en person tillhör
select FunktionsomradeID, Funktionsomrade from p, FO
where p.personid = FO.Personid
AND p.personi = 1234567890 Sv:databas Design... hjälp.
Det som glädje mig mest var det att du inte använt "Left/RIGHT JOIN" och UNIONS i dina statements..
Jag har läst på lite om dem, men får inget grepp om hur o var o när man ska använda dem. Så jag är nöjd om jag klarar mig utan dem.
På vilket sätt är de bra och när ska man använda dem eg?