Løsningsforslag matoppskrifter modellering



Like dokumenter
INF1300 Oblig 2. Øyvind Kolbu

1. SQL datadefinisjon og manipulering

Miniverden og ER- modell

HØGSKOLEN I SØR-TRØNDELAG

MATOPPSKRIFTER Obligatorisk oppgave nr. 2 i INF1300 høsten 2010

Ekvivalente stier (Equivalence of Path, EOP) i storm

Databaser: Relasjonsmodellen, del I

Ekvivalente stier (Equivalence of Path, EOP) i storm

HØGSKOLEN I SØR-TRØNDELAG

Flere skranker i ORM Integritetsregler med «CHECK» i SQL

Løsningsforslag til eksamen i IN2090 Databaser og datamodellering og INF1300 Introduksjon til databaser 6. desember :30 18:30 (4 timer)

Oppgaver Oppgave a: Sett opp mulige relasjoner

Institutt for datateknikk. Fag TDT4145 Datamodellering og databasesystemer Løsningsforslag til øving 3: Algebra og SQL

SQL 3: Opprette tabeller, datainnsetting og utsnitt

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

SQL Structured Query Language. Definere tabeller Skranker Fylle tabeller med data

Integritetsregler i SQL. Primærnøkler

>>21 Datamodellering i MySQL Workbench

Metaspråket for å beskrive grammatikk

INF1300 Introduksjon til databaser

Integritetsregler i SQL

Databaser. Relasjonsmodellen 1 Læreboka: Kap. 2 Relasjonsmodellen Faglærere: Tore Mallaug, Kjell Toft Hansen

Løsningsforslag maskindatabasen på Ifi SQL og normalisering

Eksamen i Internetteknologi Fagkode: IVA1379

Objektorientering i ER-modeller EER-modeller Enhanced Entity Relationship Models

Sensorveiledning for IN2090 og INF desember :30 18:30 (4 timer)

Dagens tema: Relasjonsmodellen (funksjonelle avhengigheter og nøkler, integritetsregler) Realisering: Fra ORM til relasjoner

Datamodellering og databaser SQL, del 2

Utvikling fra kjernen og ut

Eksamen i IBE102 Webutvikling Våren 2017.

Integritetsregler i SQL

HØGSKOLEN I SØR-TRØNDELAG

Oppgave 1 (Opprett en database og en tabell)

Utvikling fra kjernen og ut

Delinnlevering 2. INF1050, våren Inge Svale Hauger Handagard (ishandag) Tor Hildrum (thildru)

HØGSKOLEN I SØR-TRØNDELAG

Oppgave 1 1. Spørring: Resultattabell: 2. Spørring: Resultattabell: 3. Spørring:

Oppgavesett videregående kurs i NVivo 9

EKSAMEN. Emne: Webprogrammering med PHP (kont.) Webprogrammering 1 (kont.) Eksamenstid:

Datamodellering og databaser SQL, del 2

Hvordan aktivere pakker og enkelttitler

Øvingsoppgave uke 3. Fanger i fengsel

Fag TDT4145 Datamodellering og databasesystemer Løsningsforslag til øving 3: Algebra og SQL

Datamodellering og databaser SQL, del 2

UNIVERSITETET I OSLO

IN2090 Databaser og datamodellering 07 Datamanipulering

Elevens ID: Elevspørreskjema. 4. årstrinn. Institutt for lærerutdanning og skoleutvikling Universitetet i Oslo

Eksamen i emne TDT4165 PROGRAMMERINGSSPRÅK

1. Innføring i bruk av MySQL Query Browser

ADDISJON FRA A TIL Å

EKSAMEN. Les gjennom alle oppgavene før du begynner. Husk at det ikke er gitt at oppgavene står sortert etter økende vanskelighetsgrad.

MAT1140: Kort sammendrag av grafteorien

Tallinjen FRA A TIL Å

Høgskolen i Telemark EKSAMEN 6102 DATABASER Tid: Hjelpemidler: Vedlegg: Eksempeldata til oppgave 1

En kort innføring i Lotte-Typehushold

Side 1 av 11

Funksjonsbeskrivelse

Løsningsforslag Øving 5 TMA4140 Diskret matematikk Høsten 2010

Skranker og avledninger

Vann i rør Ford Fulkerson method

Mal for vurderingsbidrag

SQL: Datatyper m.m. Evgenij Thorstensen V18. Evgenij Thorstensen SQL: Datatyper m.m. V18 1 / 12

Steg for steg. Sånn tar du backup av Macen din

Frankering og computer-nettverk

Klasser skal lages slik at de i minst mulig grad er avhengig av at klienten gjør bestemte ting STOL ALDRI PÅ KLIENTEN!

Posisjonsystemet FRA A TIL Å

Tabellen viser en serie med verdier for den uavhengige variabelen, og viser den tilhørende verdien til den avhengige variabelen.

Repetisjon: (nesten) alt du trenger å kunne om ORM og realisering

En liten oppskrift på hvordan jeg installert og fikk Xastir til å virke sånn at jeg ble synlig i APRS verden.

Brukermanual for statistikk på Asset on web: Statistikk salg pr dag, uke eller måned fordelt på alle avdelinger:

Forslag til opplegg for en foreldrekveld om matematikk (varighet: 2 timer) v/ Ingvill M. Stedøy-Johansen, 2007

Kursdokumentasjon for Dreamweaver

Repetisjon: (nesten) alt du trenger å kunne om ORM og realisering

INF1300 SQL Structured Query Language del 1. Stoff som blir/ble forelest i oktober 2013

NKKN typeforslag versjon Definisjon av grunntypene

12 Vekst. Areal under grafer

INF1300 Introduksjon til databaser

Geometri med GeoGebra

EKSAMEN (Konvertert fra en gammel PHP-eksamen)

Institutt for lærerutdanning og skoleutvikling Universitetet i Oslo. 4. klasse

Søknad på stilling i Bjugn kommune

INF1300 Introduksjon til databaser

Tilkobling og Triggere

STUDENTMEDVIRKNING. Studieåret System for sikring og utvikling av utdanningskvalitet

BRUKSANVISNING FOR SOUS VIDE MASKIN

WinMed3. Release Notes Allmenn Våren Release Notes Allmenn Våren 2013 Versjon Side 1

Matematisk julekalender for trinn, 2009

Repetisjon: (nesten) alt du trenger å kunne om ORM og realisering

Komplisert eksempel. IN2090 Databaser og datamodellering 07 Datamanipulering. Flere eksempler: Kombinere aggregater. Komplisert eksempel med WITH

Compello Invoice Approval

Komme i gang med WinMed

MAT1030 Diskret matematikk

Bakgrunn Innlogging Brukere med tilgang Registrere infeksjoner Registrere antibiotika Registreringer...

Velkommen til oppstart av GNIST 1. Informasjon og tips til deltakerne

Transkript:

Løsningsforslag matoppskrifter modellering Oppgave 1 Det beste er å ha et felles løpenummer på alle oppskrifter, uavhengig av hvor de stammer fra, og heller ha ekstraopplysninger som avhenger av om oppskriften er i en kokebok eller i utklippsboken. Ekstraopplysninger er her organisert ved underbegreper. Det er ikke tatt hensyn til at noen bøker er bind i et leksikon. Det viktigste i denne oppgaven er hvordan oppskriftene er representert. Det vil bli dårlig modellering om man har forskjellig representasjon for utklipp og bokoppskrifter. 49

Oppgave 2 Det viktige her er at en oppskrift kan ha mange ingredienser og at en matvare kan inngå i flere oppskrifter. Legg merke til hvordan mengdeangivelse og målangivelse er knyttet til begrepet Ingrediens, som her betegner en matvare brukt i en oppskrift. Dermed gis mengde og måleenhet relativt til hvilken oppskrift matvaren brukes i. Oppgave 3 Her er det antatt at det gjøres maksimalt ett forsøk pr. oppskrift pr. dag. Om det er fornuftig eller ikke, kan man jo diskutere. Det går an å gjøre mye mer ut av oppgave 3 hvis man vil; jeg tror imidlertid at det eneste praktiske er å ha en tekstlig forklaring som sier alternative mengder brukt, kryddere benyttet og mengden av hvert krydder, beskrivelse av de forskjellige fasene osv. 50

Oppgave 4 Her har vi tenkt oss at en meny kan gjenbrukes i flere selskaper. Det er maksimalt ett selskap pr. dato, så vi bruker datoen som referansemåte for selskapene. Menyen er organisert i form av nummererte linjer. Hver linje angir en rett/oppskrift. Linjenumrene sier i hvilken rekkefølge rettene serveres. Dersom man glemmer den eksterne entydigheten mellom Meny_med og Linje_for, må systemet generere nye linjenumre på tvers av menyer, f.eks. kan første meny ha linjenumrene 1-3, men da må andre meny ha linjenumre soms tarter på 4, osv. Det blir helt feil. Siden en rett/oppskrift neppe serveres mer enn én gang pr. meny, er det en ekstern entydighet mellom Meny_med og Oppskrift_er_rett_i også. Man kan jo derfor velge å sløyfe begrepet Linje, men vanligvis vil man nok gjerne vite i hvilken rekkefølge rettene er servert, og ikke bare hvilken oppskrift som ble benyttet til de enkelte rettene. Det er lagt inn en mulighet til å angi en drikkevare pr. rett og/eller å angi alle under ett på menynivå. 51

Oppgave 5 Denne kan sikkert gjøres mye bedre og mer detaljert, men her er det mest vesentlige tatt med, nemlig hvordan omregningsfaktoren mellom to enheter er. F.eks. kan vi da ha med fakta av formen 1 lb = 0,45 kg. 52

Oppgave 1-5, referanser 53

Oppgave 6 Vi viser først hvordan grupperingen kan presenteres på eksamen: Oppskrift (Oppskriftsid, Tittel, Tekst) Bokoppskrift (Oppskriftsid, Boktittel, Sidenr) Utklipp (Oppskriftsid, Løpenr, Dato, Kildenavn, Navn_gitt_av) Person (Navn) Ingrediens (Oppskriftsid, Matvarenavn, Måleenhet, Mengde) Tilberedningsforsøk (Oppskriftsid, Dato, Forklaring) Selskap (Dato, Menyid) PersoniSelskap (Dato, Navn) Menylinje (Menyid, Linjenr, Oppskriftsid, Drikkevare) DrikkevareiMeny (Menyid, Drikkevare) Omregning (Måleenhet_fra, Måleenhet_til, Faktor) I Utklipp er (Løpenr, Dato) kandidatnøkkel i tillegg til primærnøkkelen (Oppskriftsid). I Menylinje er (Menyid, Oppskriftsid) kandidatnøkkel i tillegg til primærnøkkelen (Menyid, Linjenr). Kandidatnøklene kan godt markeres med to streker i skjemaet, men skriv i såfall i tillegg hva de to strekene betyr. (Det er litt vanskelig å lage de to strekene typografisk, særlig for Menylinje, derfor er dette ikke gjort her.) Vi har valgt å undertrykke de fleste referansebegrepene. Unntaket er Person. Tre fremmednøkler: Fra (Oppskriftsid) i Menylinje til (Oppskriftsid) i Oppskrift Fra (Dato) i PersoniSelskap til (Dato) i Selskap Fra (Navn) i PersoniSelskap til (Navn) i Person Kommentarer: Relasjonene PersoniSelskap og DrikkevareiMeny stammer fra lange piler i ORM-diagrammene. Merk at underbegrepene Bokoppskrift og Utklipp har samme referansemåte som hovedbegrepet Oppskrift. 54

Under har vi også tatt med SQL-skjemaet slik det blir generert med storm. I storm markerte vi at alle referansebegrepene unntatt Person skulle undertrykkes. (Dette må gjøres før gruppering.) /******************************************************************* * PostgreSQL Database Description File for oppskrifter * Generated by storm Norsync AS 2008 * Generation Date is 2010/10/25 * Model Number is 3 * Version Checksum is 34622 /******************************************************************* * Table Definitions CREATE TABLE Bokoppskrift ( Oppskriftsid_for VARCHAR(20) NOT NULL, Boktittel_har_oppskrift VARCHAR(20) NOT NULL, Sidenr_har_oppskrift VARCHAR(20) NOT NULL CREATE TABLE Ingrediens ( Oppskriftsid_med VARCHAR(20) NOT NULL, Matvarenavn_er VARCHAR(20) NOT NULL, Maaleenhet_for VARCHAR(20) NOT NULL, Mengde_av VARCHAR(20) NOT NULL CREATE TABLE Meny_Drikkevare ( Menyid_har_tilbehoer VARCHAR(20) NOT NULL, Drikkevarenavn_er_tilbeh VARCHAR(20) NOT NULL CREATE TABLE Menylinje ( Linjenr_for VARCHAR(20) NOT NULL, Menyid_med VARCHAR(20) NOT NULL, Oppskriftsid_er_rett_i VARCHAR(20) NOT NULL, Drikkevarenavn_er_tilbeh VARCHAR(20) CREATE TABLE Omregning ( Maaleenhet_omregning_fra VARCHAR(20) NOT NULL, Maaleenhet_omregning_til VARCHAR(20) NOT NULL, Stoerrelse_er_for VARCHAR(20) NOT NULL 55

CREATE TABLE Oppskrift ( Oppskriftsid_for VARCHAR(20) NOT NULL, Tekst_for VARCHAR(20) NOT NULL, Tittel_er_tittel_paa VARCHAR(20) NOT NULL CREATE TABLE Person ( Navn_paa VARCHAR(20) NOT NULL CREATE TABLE Selskap ( Dato_for_selskap VARCHAR(20) NOT NULL, Menyid_ble_servert VARCHAR(20) NOT NULL CREATE TABLE Selskap_Person ( Dato_med_gjest VARCHAR(20) NOT NULL, Navn_er_gjest_i VARCHAR(20) NOT NULL CREATE TABLE Tilberedningsforsoek ( Oppskriftsid_i VARCHAR(20) NOT NULL, Dato_for VARCHAR(20) NOT NULL, Tekst_for VARCHAR(20) CREATE TABLE Utklipp ( Oppskriftsid_for VARCHAR(20) NOT NULL, Loepenr_for VARCHAR(20) NOT NULL, Dato_for VARCHAR(20) NOT NULL, Kildenavn_kilde_for VARCHAR(20), Navn_gitt_av VARCHAR(20) /******************************************************************* * SERIAL columns /******************************************************************* * Primary and Unique Key Definitions ALTER TABLE Bokoppskrift ADD PRIMARY KEY (Oppskriftsid_for ALTER TABLE Ingrediens ADD PRIMARY KEY (Oppskriftsid_med,Matvarenavn_er ALTER TABLE Meny_Drikkevare ADD PRIMARY KEY (Menyid_har_tilbehoer,Drikkevarenavn_er_tilbeh 56

ALTER TABLE Menylinje ADD PRIMARY KEY (Linjenr_for,Menyid_med ALTER TABLE Menylinje ADD UNIQUE (Oppskriftsid_er_rett_i,Menyid_med ALTER TABLE Omregning ADD PRIMARY KEY (Maaleenhet_omregning_fra,Maaleenhet_omregning_til ALTER TABLE Oppskrift ADD PRIMARY KEY (Oppskriftsid_for ALTER TABLE Person ADD PRIMARY KEY (Navn_paa ALTER TABLE Selskap ADD PRIMARY KEY (Dato_for_selskap ALTER TABLE Selskap_Person ADD PRIMARY KEY (Dato_med_gjest,Navn_er_gjest_i ALTER TABLE Tilberedningsforsoek ADD PRIMARY KEY (Oppskriftsid_i,Dato_for ALTER TABLE Utklipp ADD PRIMARY KEY (Oppskriftsid_for ALTER TABLE Utklipp ADD UNIQUE (Loepenr_for,Dato_for /******************************************************************* * Foreign Key Constraints ALTER TABLE Bokoppskrift ADD CONSTRAINT Oppskrift_Bokoppskrift FOREIGN KEY (Oppskriftsid_for) REFERENCES Oppskrift (Oppskriftsid_for ALTER TABLE Utklipp ADD CONSTRAINT Person_Utklipp FOREIGN KEY (Navn_gitt_av) REFERENCES Person (Navn_paa ALTER TABLE Ingrediens ADD CONSTRAINT Oppskrift_Ingrediens FOREIGN KEY (Oppskriftsid_med) REFERENCES Oppskrift (Oppskriftsid_for ALTER TABLE Menylinje ADD CONSTRAINT Oppskrift_Menylinje FOREIGN KEY (Oppskriftsid_er_rett_i) REFERENCES Oppskrift (Oppskriftsid_for ALTER TABLE Selskap_Person ADD CONSTRAINT Selskap_Selskap_Person FOREIGN KEY (Dato_med_gjest) REFERENCES Selskap (Dato_for_selskap ALTER TABLE Selskap_Person ADD CONSTRAINT Person_Selskap_Person FOREIGN KEY (Navn_er_gjest_i) REFERENCES Person (Navn_paa ALTER TABLE Tilberedningsforsoek ADD CONSTRAINT Oppskrift_Tilberednik FOREIGN KEY (Oppskriftsid_i) REFERENCES Oppskrift (Oppskriftsid_for 57

ALTER TABLE Utklipp ADD CONSTRAINT Oppskrift_Utklipp FOREIGN KEY (Oppskriftsid_for) REFERENCES Oppskrift (Oppskriftsid_for /****************************************************************** * Index Definitions CREATE INDEX Oppskrift_Ingrediens ON Ingrediens (Oppskriftsid_med CREATE INDEX Oppskrift_Menylinje ON Menylinje (Oppskriftsid_er_rett_i CREATE INDEX Exclud_1 ON Omregning (Maaleenhet_omregning_fra CREATE INDEX Exclud_1_A ON Omregning (Maaleenhet_omregning_til CREATE INDEX Selskap_Selskap_Person ON Selskap_Person (Dato_med_gjest CREATE INDEX Person_Selskap_Person ON Selskap_Person (Navn_er_gjest_i CREATE INDEX Oppskrift_Tilberednik ON Tilberedningsforsoek (Oppskriftsid_i CREATE INDEX Person_Utklipp ON Utklipp (Navn_gitt_av /* UNSUPPORTED CONSTRAINT: Referential Exclude "Exclud_1" */ /* UNSUPPORTED CONSTRAINT: Intratable Subset "Utklipp_Utklipp" */ /* UNSUPPORTED CONSTRAINT: Intratable Subset "Utklipp_Utklipp1" */ 58