D0004N 2008-11-24 Databaser I Greenline Petter Hedlin / epeehi-4 Rikard Stenmark / rikste-8 Markus Almberg / maralm-5
Inledning Det här är en mindre rapport om datamodellering. Vi blev tilldelade en kravspecifikation ställd av ett fiktivt företag kallat Greenline. Företaget var i behov av en databas. Vår uppgift blev således att genom ett antal faser presentera en lösning på problemet. Vissa krav ställdes på datamodelleringen bland annat identifikation av aktörer och funktioner som ska kunna hanteras av databasen samt redovisning av en logisk datamodell som visar att dessa funktioner går att genomföra.
Resultat Problem Kosmetikföretaget Greenline som ägs av Lena Bok är specialiserade på att ta fram och tillverka icke djurtestade och naturliga kosmetiska produkter som de sedan säljer till frisörsalonger eller SPA center. Lena var den som startade upp företaget som i dagsläget har tio anställda, inklusive henne själv. Eftersom företaget har expanderat känner Lena att arbetsbelastningen blivit för hög och hon har bestämt sig för datorisera verksamhetens administration för att underlätta hennes situation. Lena vill ha en databas där hon kan hålla reda på företagets hela verksamhet. Syfte Vi antar att vad Lena menar med att datorisera verksamheten innebär att hon även vill föra in annan data i databasen, exempelvis information om råvaruinköp och leverantörer, information om företagets egna produkter, tillverkning, företagets maskinpark och ordrar. Det tänkta syftet med Greenlines databas är att ge ägaren Lena en översikt över företaget och tillhandahålla beslutsunderstödjande information. Lena vill kunna bli meddelad om återkommande kunder inte beställt på ett tag så att hon kan ta personlig kontakt med dessa. Aktörer Utifrån det vi vet om Greenline så kommer följande aktörer att finnas i databasen. Dessa aktörer har skilda behov och skall inte ha tillgång till samma information så det är lämpligt att ge varje aktör en egen vy i databasen. 1. Ägare 2. Tillverkning 3. Produktutveckling 4. Administration Funktioner Följande funktioner skall stödjas av den färdiga databasen. Om annat inte anges så skall ordet Hantera i det här sammanhanget förstås som: Lägga till, ta bort, uppdatera, söka. 1. Hantera kund 2. Hantera order 3. Hantera beställning 4. Hantera leverantör 5. Hantera produkt 6. Hantera råvara 7. Hantera maskin 8. Hantera anställd 9. Hantera företag 10. Hantera recept
Entiteter Kund Entitetstypen kund lagrar information om alla Greenlines företagskunder. Kund KundOrgNr {PK} Kundföretagets organisationsnummer Int (20) Namn Kundföretagets namn Char (50) GatuAdress kundföretagets gatuadress Char (100) PostOrt Kundföretagets postort Char (20) PostNummer kundföretagets postnummer Int (5) Telefon Telefonnummer till kundföretaget Int (20) ja inget E-post E-post till kundföretaget Char (50) ja inget Leverantör Entitetstypen leverantör lagrar information om alla Greenlines råvara och materialleverantörer. Leverantör LeverantörsOrgNr {PK} Leverantörens organisationsnummer Int (20) Namn Företagsnamn på leverantören Char (50) GatuAdress leverantörens gatuadress Char (100) PostAdress leverantörens postnummer Int (5) Telefon Telefonnummer till leverantören Int (20) ja inget E-post E-post till leverantören Char (50) ja inget Produkt Entitetstypen produkt lagrar information om alla produkter som Greenline tillverkar Produkt ProduktID {PK} för varje produkt Int 1000...n ProduktNamn Produktens namn Char (50) ProduktTyp Produktens typ Char (50) nej ingen Produktbeskrivning Kort beskrivning av produkten Char (500) ja inget Råvara Entitetstypen råvara lagrar information om alla råvaror som Greenline använder i sin produktion. Attributet Lagersaldo håller reda på hur mycket av varje råvara som Greenline har hemma.
Råvara RåvaraID {PK} för varje råvara Int 1000...n LeverantörsOrgNr {FK} leverantörens ID nummer Int Namn Namn på råvaran Char (20) Lagersaldo Mängd råvara på lager Int (5) nej 0 LagersaldoEnhet Mätenhet för lagersaldo värdet Char (5) LeverantörsOrgNr {FK} referens Leverantör (LeverantörsOrgNr) Beställning Entitetstypen beställning lagrar information om de beställningar av råvaror och material som Greenline skickar till sina leverantörer. I en beställning ingår en eller flera beställningsrader. Beställning BeställningsID {PK} för varje beställning Int 1000...n Datum Datum då beställningen lades Date KundOrder Entitetstypen KundOrder lagrar de ordrar som inkommit till Greenline från kunder. En KundOrder innehåller en eller flera KundOrderRader. KundOrder KundOrderID {PK} för varje kundorder Int 1000...n Datum Datum då ordern lades Date Företag Entitetstypen Företag lagrar information om Greenline. Företaget OrganistationsNr {PK} Företagets organisationsnummer Int (20) FöretagsNamn Namn på företaget Char (20) GatuAdress Företagets adress Char (50) PostOrt Företagets postort Char (20) PostNummer Företagets postnummer Int (10) Maskin Entitetstypen Maskin lagrar information om de olika maskinerna som finns i Greenlines ägo.
Maskin MaskinID {PK} för varje maskin Int 1000...n OrganistationsNr {FK} Företagets organisationsnummer Int (20) Modellnamn Maskinens modellnamn Char (20) Maskinbeskrivning Beskrivning av maskinen Char (300) ja inget Tillverkare Namn på företaget som tillverkat maskinen Char (20) GatuAdress Tillverkarens adress Char (50) PostOrt Tillverkarens postort Char (20) PostNummer Tillverkarens postnummer Int (10) Inköpsdatum Datum då maskinen köptes Date Telefon Telefonnummer till tillverkaren Int (20) ja inget E-post E-post till tillverkaren Char (50) ja inget OrganisationsNr {FK} refererar Företaget (OrganisationsNr). RåvaraRad Entitetstypen RåvaraRad kopplar en specifik råvara från tabellen Råvara mot en specifik leverantör från tabellen Leverantör. RåvaraRad Attribut Beskrivning Datatyp Domän RåvaraRadID {PK} för varje råvarurad Int 1000...n LeverantörsOrgNr {FK} Leverantörens organisationsnummer Int RåvaraID {FK} för varje råvara Int Null nej nej nej Default nej inget inget LeverantörsOrgNr {FK} referar Leverantör (LeverantörsOrgNr). RåvaruID {FK} referar Råvara (RåvaruID). Anställd Entitetstypen anställd lagrar information om Greenlines alla anställda.
Anställda AnställningsID {PK} för varje anställd Int 1000...n OrganistationsNr {FK} Företagets organisationsnummer Int (10) FörNamn Anställdes förnamn Char (50) EfterNamn Anställdes efternamn Char (50) Personnummer Anställdes personnummer Int (20) GatuAdress Anställdes gatuadress Char (100) PostOrt Anställdes postort Char (20) PostNummer Anställdes postnummer Int (5) Befattning Anställdes befattning Char (20) Anställningsdatum Datum då den anställde började vid företaget Date Lön Anställdes månadslön Int (10) 100... 100000 Kontonummer Anställdes egna bankkontonummer Int (12) ja inget Telefon Telefonnummer till anställd Int (20) ja inget E-post E-post till anställd Char (50) ja inget OrganisationsNr {FK} refererar Företaget (OrganisationsNr). BeställningsRad Entitetstypen beställningsrad lagrar information om en rad i en beställning. BeställningsRad BeställningsRadID {PK} för varje beställningsrad Int 1000...n BeställningsID {FK} för varje beställning Int RåvaraID {FK} för varje råvara Int Kvantitet Beställd kvantitet Int (10) Kvantitetsenhet Enhet på den angivna kvantiteten Char (5) RåvaraID {FK} referar Råvara (RåvaraID). BeställningsID {FK} referar Beställning (BeställningsID).
KundOrderRad Entitetstypen kundorderrad lagrar information om en rad i en kundorder. KundOrderRad KundOrderRadID {PK} för varje kundorderrad Int 1000...n KundOrderID {FK} för varje kundorder Int ProduktID {FK} för varje produkt Int Kvantitet Beställd kvantitet Int (10) Kvantitetsenhet Enhet på den angivna kvantiteten Char (5) ProduktID {FK} referar Produkt (ProduktID). KundOrderID {FK} referar KundOrder (KundOrderID). Recept Entitetstypen Recept lagrar information om ingredienserna i en produkt. Attributet MaskinID indikerar vilken maskin som behövs vid tillverkningen. Recept ReceptRadID {PK} för varje receptrad Int 1000...n ProduktID {FK} Produktens ID nummer Int MaskinID {FK} för varje maskin Int Tillverkningsinstruktioner Instruktioner för hur produkten skall tillverkas Char (3000) ProduktID {FK} referar Produkt (ProduktID). MaskinID {FK} referar Maskin (MaskinID). Receptrad Entitetstypen receptrad lagrar information om en rad i ett recept.
ReceptRad ReceptRadID {PK} för varje receptrad Int 1000...n RåvaraID {FK} för varje råvara Int ReceptID {FK} för varje recept Int Kvantitet Kvantitet på ingrediens Int (5) Kvantitetsenhet Enhet på den angivna kvantiteten Char (5) RåvaraID {FK} referar Råvara (RåvaraID). ReceptID {FK} referar Recept (ReceptID). Maskinrad Entitetstypen maskinrad kopplar en maskin mot ett recept. MaskinRad MaskinRadID {PK} för varje maskinrad Int 1000...n MaskinID {FK} för varje maskin Int ReceptID {FK} för varje recept Int ReceptID {FK} referar Recept (ReceptID). MaskinID {FK} referar Maskin (MaskinID).
Logisk databasmodell för Greenlines databas Relationer 1. En kund kan ha noll eller flera kundordrar. En kundorder har en och endast en kund.
2. En kundorder har en eller flera kundorderrader. En kundorderrad tillhör en och endast en order. 3. En kundorderrad har en och endast en produkt. En produkt återfinns på noll eller flera kundorderrader. 4. En beställning har en eller flera beställningsrader. En beställningsrad tillhör en och endast en beställning. 5. En råvara återfinns på noll eller flera beställningsrader. En beställningsrad innehåller en och endast en råvara. 6. En produkt har noll eller ett recept. Ett recept har en och endast en produkt. 7. En råvara återfinns på noll eller flera råvararader. En råvararad innehåller en och endast en råvara. 8. En råvara har noll eller flera receptrader. En receptrad innehåller en och endast en råvara. 9. En leverantör återfinns på noll eller flera råvarurader. En råvarurad innehåller en och endast en leverantör. 10. Ett företag har en eller flera anställda. En anställd är anställd av endast ett företag.
11. Ett företag har noll eller flera produkter. En produkt tillverkas av endast ett företag. 12. Ett recept har en eller flera receptrader. En receptrad tillhör ett och endast ett recept. 13. Ett företag kan äga noll eller flera maskiner. En maskin ägs av endast ett företag. 14. Ett recept har noll eller flera maskinrader. En maskinrad tillhör ett och endast ett recept. 15. En maskin har noll eller flera maskinrader. En maskinrad innehåller en och endast en maskin.
Diskussion Vi tyckte att det var intressant att ta fram en databasmodell från grunden. Det var givande att få arbeta med alla delar i processen som en helhet. Vi tror Lena hade helt klart varit nöjd med resultatet. En sak vi tycker det är värt att nämna är att den logiska databasmodellen innehåller bra mycket fler entiteter än vad vi först identifierade utifrån kravspecifikationen. Detta beror på att flera entiteter tillkom under arbetets gång för att täcka behovet av att bryta upp många till många relationer. Vid flera tillfällen hittade vi inget bättre sätt än att skapa ytterligare entiteter för att lösa problemet med många till många relationer på.