Gå til innhold

[Løst]Ideemyldring ang databaser, hjelp? =)


Anbefalte innlegg

Hei, jeg holder på med nettside som prosjekt. Har mye data på noe e.g Drinker.

hypotetisk skal jeg lage en drinkside som skal ha mulighet til å søke på bestemte drinker(navn) og mulighet til å søke på bestemte ingredienser(om mulig avkryssning på forskjellige ingredienser for å limite et søk).

 

Jeg sitter her hypotetisk med et stort antall data i formatet

 

White Russian

 

5cl Vodka

2cl Kalhua

3cl Kremfløte

 

Hvordan skal jeg så effektivt som mulig kunne få inn dataen min i et database system (ideelt MySQL) og evt tips til typer PhP script jeg burde ta en titt på for å lage et søkesystem som funker til det jeg trenger.

 

Takk for svar/ideer/hjelp generelt.

 

mvh tekdiff

 

*edit*

iknow RTFM men spørsmålet mitt er såpass åpent at dere ihvertfall muligens kan pointe meg til et sted jeg kan lese litt/bra google query's. ty *endofedit*

Endret av TekniskFeil
Lenke til kommentar
Videoannonse
Annonse
Vel, idemyldring? Oppgaven i seg selv er ganske rett frem. Ja, mange muligheter, men oppgaven er såpass liten at man kan prøve og feile flere ganger på kort tid for å prøve seg frem.

 

Her er et forslag til tre tabeller: post-14502-1261774884_thumb.png

 

Og vedlagt ligger et SQL script for å opprette nevnte struktur.

drinker.sql.txt

Mengdetype i ingredienser tabellen har ingenting der å gjøre. Cl, Ml, Dl (osv) er ikke noe som beskriver en ingrediens, derimot er det noe som beskriver en ingrediens i en oppskrift. Flytt den derfor til drinker_ingredienser tabellen. Endret av kaffenils
Lenke til kommentar

I praksis har det ikke så mye å si, men eg vil si den hører mer hjemme der den er. Og mengdetype er ikke milliliter, liter eller centiliter. Det er liter, spiseskjeer, stk, gram osv. Juice er for eks liter(eksempel, dette må jo avgjøres i forkant) :)

 

Spørsmålet eg stiller meg selv for å avgjøre hvor den skal være er: kan en type ingrediens ha flere mengetyper? Nei.

Juice kan kun beskrives med med liter, ikke stk for eks.

 

Et alternativ, for å gjøre det mer korrekt kan jo være å kalle feltet for enhetstype(liter, stk, kilo) og evnt flytte mengetype(gram, kilo) over til drinker_ingredienser. Men, for ordens skyld mener eg en ingrediens kun skal oppføres med en mengetype. Dvs at juice ikke skal kunne stå oppført både med milliliter og centiliter i forskjellige oppskrifter, men at man bestemmer seg for å bruke en og evnt konverterer i grensesnittet.

Lenke til kommentar

Vel, eg vil ikke gå så langt og si at du har feil og eg har rett, men at det er to forskjellige måter å gjøre det på.

 

Men se på det i forhold til relasjonstypen, og hva feltet du snakker om beskriver. En ingrediens kan være til stede i mange drinker. En-til-mange relasjon. Hvorfor skal en ingrediens ha flere måleenheter(liter, milliliter osv) når en holder? Hvorfor skal det registreres måleenhet for den ingrediensen i hver enkelt drink, når det kun trengs en måleenhet? Det blir unødvendig informasjon. Den mest brukte måten å måle juice på i drinker blir centiliter(vil eg tro). Så da mener eg alle mengder(for en ingredienstype, for eks juice) registreres som centiliter.

 

To eksempler. Ditt eksempel først:

drinker:
ID	 Navn
9	   White Russian
11	 Black Russian

drinker_ingredienser:
DrinkID  IngrediensID	 Mengde	   Mengdetype
9		4				   5						 cl
9		3				   3						 cl
9		13				 3						 cl
11		4				   4						 cl
11		3				   2.5					  cl

ingredienser:
ID	Navn
4	  Vodka
3	  Kalhua
13	Kremfløte

 

Mitt eksempel:

drinker:
ID	 Navn
9	   White Russian
11	 Black Russian

drinker_ingredienser:
DrinkID	IngrediensID	 Mengde
9			  4					  5
9			  3					  3
9			  13					3
11			4					  4
11			3					  2.5

ingredienser:
ID	Navn		  Mengdetype
4	  Vodka		cl
3	  Kalhua	   cl
13	Kremfløte   cl

 

Som du ser i eksemplene over så vil det i ditt eksempel være overflødig å nevne cl i hvert drink.

 

Det eg prøver å si er et prinsipp læreren min i database-struktur alltid sa: "I en godt strukturert database skal ikke informasjon nevnes oftere en absolutt nødvendig". Og med mindre du klarer å overbevise meg om noe annet så ser eg ikke nødvendigheten av å nevne mengdetype flere ganger pr ingrediens.

Endret av nomore
Lenke til kommentar
Du får mene hva du vil, men jeg mener du tar feil. Tabellen "ingredienser" skal kun beskrive egenskaper til en ingrediens. Mengden av en ingrediens skal plasseres i drinker_ingredienser, og måleenhet hører definitivt sammen med antall. Akkurat her vet jeg at jeg har rett.

 

Mener du har feil i dette tilfellet. Mener også du bør være litt mer ydmyk =)

 

Hvis ingrediensan benevnes med samme målenhet i absolutt hver drink (noe jeg ser på som en bra ting) bør den være i ingrediens-tabellen.

Lenke til kommentar
Du får mene hva du vil, men jeg mener du tar feil. Tabellen "ingredienser" skal kun beskrive egenskaper til en ingrediens. Mengden av en ingrediens skal plasseres i drinker_ingredienser, og måleenhet hører definitivt sammen med antall. Akkurat her vet jeg at jeg har rett.

 

Mener du har feil i dette tilfellet. Mener også du bør være litt mer ydmyk =)

 

Hvis ingrediensan benevnes med samme målenhet i absolutt hver drink (noe jeg ser på som en bra ting) bør den være i ingrediens-tabellen.

 

Siden dette sikkert ligger an til å bli en multinasjonal, verdensomspennende drinkdatabase, er det viktig både at den som legger inn oppskriften, og den som leser den, kan velge måleenheter selv. Derfor må man ha funksjonalitet for enhetskonvertering. Det er da lite poeng i å standardisere på en bestemt måleenhet pr. ingrediens, man må uansett ta høyde for at enheter må konverteres v. lesing, og man tjener da ikkenoe på å også konvertere v. innlegging, ergo kan ingrediensene godt ha ulik måleenhet i ulike drinker.

 

Det er jo også forskjell på å brygge en tønne med øl, og å lage en fingerbøl-drink, greit å ikke tvinge fram oppskrifter som krever hundretusentrillioner milliliter eller 0.0000024 liter osv. (for å sette det litt på spissen :-)

Lenke til kommentar

Vel, hva om du skal kjøre en enkel spørring i databasen som forteller deg hvor mye vodka du trenger totalt for å lage en White Russians og en Black Russian, hvordan ville du løst det om ikke måleenheten er standardisert?

 

Her er en enkel spørring:

SELECT SUM(Mengde) FROM drinker_ingredienser WHERE ((DrinkID=9) OR (DrinkID=11)) AND (IngrediensID=4)

 

Eksempelet mitt er kanskje litt banalt, men om data i en database ikke beholder en viss form for standard så vil man fort miste mulighetene for å benytte seg av enkle spørringer. Alternativet blir å lage større spørringer som igjen tar lenger tid å utføre, i stede for å kjøre enkle konverteringsformler ved visning(evnt registrering).

 

Skjemaet for innregistrering av data må gjerne gi brukeren mulighet for å skrive inn både liter, milliliter osv, men når det lagres bør det være en standard over dette.

 

Det er jo også forskjell på å brygge en tønne med øl, og å lage en fingerbøl-drink, greit å ikke tvinge fram oppskrifter som krever hundretusentrillioner milliliter eller 0.0000024 liter osv. (for å sette det litt på spissen :-)

Databasen har ingen kjennskap til fingerbøl, så for databasen(og koden) er det fint lite interesant. Dataene er fortsatt tall som skal lagres eller brukes i formler. Er det store eller små tall har da lite og si, siden resultatet vil være det samme.

Lenke til kommentar

Begge deler vil selvsagt fungere, og jeg har ikke peil på PHP, men databaser har jeg drevet med nærmere 25 år... Dette er også en avsporing fra trådstarsters spørsmål, men mengde og enhet hører sammen!

 

Indigriensen er den samme om man snakker om 3 tomater eller saften fra 3 tomater men målenheten kan være noe annet...

 

Hvor mange Ml er en "dash"? ;-)

Lenke til kommentar

Avsporing vil eg ikke si det er. Det er tross alt to eksempler på hvordan dette kan løses her nå. Å diskutere hva som er den beste løsningen vil eg si er innenfor trådstarters rammer for tråden.

 

Tomatjuice og tomatskiver er to forskjellige ingredienser, vil eg tørre å påstå, selv om begge kommer fra samme produkt. Og ei klype salt eller en dash med et eller annet vil være like håpløst å definere i en database enten måleenheten ligger i samme tabell som mengde eller ikke.

 

Men hvorfor kan vi ikke få se noen skikkelige begrunnelser til hvorfor det andre er bedre? Eg føler mine begrunnelser er forklart nærme nok. Av nyskjerrighet vil eg gjerne se begrunnelser for det motsatte. Og da mener eg ikke bare "de hører sammen" påstander :)

 

Dette går for det meste på databaser og SQL spørringer uansett. Om det brukes PHP, Perl, .Net elns på utviklingssiden vil eg si er underordnet. Her er det databasestrukturen som er spørsmålet akkurat nå.

Lenke til kommentar
Vel, hva om du skal kjøre en enkel spørring i databasen som forteller deg hvor mye vodka du trenger totalt for å lage en White Russians og en Black Russian, hvordan ville du løst det om ikke måleenheten er standardisert?

 

Her er en enkel spørring:

SELECT SUM(Mengde) FROM drinker_ingredienser WHERE ((DrinkID=9) OR (DrinkID=11)) AND (IngrediensID=4)

 

Eksempelet mitt er kanskje litt banalt, men om data i en database ikke beholder en viss form for standard så vil man fort miste mulighetene for å benytte seg av enkle spørringer. Alternativet blir å lage større spørringer som igjen tar lenger tid å utføre, i stede for å kjøre enkle konverteringsformler ved visning(evnt registrering).

 

Skjemaet for innregistrering av data må gjerne gi brukeren mulighet for å skrive inn både liter, milliliter osv, men når det lagres bør det være en standard over dette.

 

Det er jo også forskjell på å brygge en tønne med øl, og å lage en fingerbøl-drink, greit å ikke tvinge fram oppskrifter som krever hundretusentrillioner milliliter eller 0.0000024 liter osv. (for å sette det litt på spissen :-)

Databasen har ingen kjennskap til fingerbøl, så for databasen(og koden) er det fint lite interesant. Dataene er fortsatt tall som skal lagres eller brukes i formler. Er det store eller små tall har da lite og si, siden resultatet vil være det samme.

 

I din drinkedatabase kan du gjøre hva du vil, i min skal det være slik at måleenhet er oppgitt sammen med målet i databasen. Mindre sjanse for å gå tom for ingredienser da, og dét vil vi jo ikke.

Lenke til kommentar

Jeg skal prøve å begrunne min mening om at mengde og enhet hører sammen i tabell drinker_ingredienser.

 

Hvis du legger enhet i ingredienstabellen så vil du ødelegge, i form av at mengdeforholdet blir feil, mange oppskrifter. Har du f.eks. registrert Vodka med enhet "liter", og så i ettertid finner på å endre til desiliter så blir alle oppskrifter som inneholder Vodka feil da mengden opprinnelig ble registrert i liter.

 

Mange drinker har ingredienser som det ikke er naturlig å bruke samme enhet for. Ta f.eks. Irish Coffee, som inneholder er forholdsmessig stor mengde kaffe i forhold til Whiskey.

Det er da naturlig å registrere kaffe i desiliter og Whiskey i centiliter.

 

Til de som da sier "men databasen har ikke noe forhold til desiliter og centiliter" så vil jeg selvfølgelig si at en løsning med enhet og mengde i samme tabell, som jeg og flere foreslår, selvfølgelig krever en tabell for enheter, konverteringsfaktorer mellom enheter i samme grupper.

Grupper er her enheter som logisk hører sammen, f.eks. volum=milliliter, centiliter, desiliter og liter, eller masse=kilogram, desigram, gram.

En slik tabell gjør det mulig å kalkulere f.eks. total volum for en drink, uansett om ingrediensene er registrert med forskjellige enheter.

Det gir også mulighet til å kalkulere innkjøpslister hvis du f.eks. skal lage 50 Long Island Icetea. Da kan vi heller snakke om å ha kolonner for mengde og enhet i ingredienser-tabellen, men da for innkjøpsformål, ikke for å bruke i forbindelse med oppskrifter.

 

Til dere som fortsatt er uenige så kan dere prøve å se for dere hvordan bakeoppskrifter, som i mye større grad en drinker opererer med mange forskjellige enheter i samme oppskrift, hvis alt skulle oppgis i kilogram:

 

0,5 kilogram mel

0,001 kilogram salt

0,010 kilogram gjær

osv..

 

Blir litt lettere å lese:

500 gram mel

1 ts salt

50 gram gjær

Lenke til kommentar
Vel, hva om du skal kjøre en enkel spørring i databasen som forteller deg hvor mye vodka du trenger totalt for å lage en White Russians og en Black Russian, hvordan ville du løst det om ikke måleenheten er standardisert?

 

Eksempelet mitt er kanskje litt banalt, men om data i en database ikke beholder en viss form for standard så vil man fort miste mulighetene for å benytte seg av enkle spørringer. Alternativet blir å lage større spørringer som igjen tar lenger tid å utføre, i stede for å kjøre enkle konverteringsformler ved visning(evnt registrering).

 

Skjemaet for innregistrering av data må gjerne gi brukeren mulighet for å skrive inn både liter, milliliter osv, men når det lagres bør det være en standard over dette.

 

Databasen har ingen kjennskap til fingerbøl, så for databasen(og koden) er det fint lite interesant. Dataene er fortsatt tall som skal lagres eller brukes i formler. Er det store eller små tall har da lite og si, siden resultatet vil være det samme.

Som jeg allerede har sagt så må databasen har en tabell med alle enheter, gruppering av disse, og informasjon om hvordan en kan konvertere mellom disse. Da trenger man ingen "standard" som du kaller det, da du har har mulighet til å konvertere mellom enheter som logisk hører sammen (volum=milliliter, centiliter, fingerbøl, spiseskje, teskje osv). Du vil også trenger denne informasjonen (enhetstabellen) om du skulle velge å gå for din løsning (som jeg mener er feil) hvis du tillater å velge forskjellige enheter i brukergrensesnittet, men konverterer til en standard enhet i databasen.
Lenke til kommentar
Det eg prøver å si er et prinsipp læreren min i database-struktur alltid sa: "I en godt strukturert database skal ikke informasjon nevnes oftere en absolutt nødvendig". Og med mindre du klarer å overbevise meg om noe annet så ser eg ikke nødvendigheten av å nevne mengdetype flere ganger pr ingrediens.
Men jeg tror nok læreren din setter pris på at du lagrer informasjon der den hører hjemme.
Lenke til kommentar
Til dere som fortsatt er uenige så kan dere prøve å se for dere hvordan bakeoppskrifter, som i mye større grad en drinker opererer med mange forskjellige enheter i samme oppskrift, hvis alt skulle oppgis i kilogram:

 

0,5 kilogram mel

0,001 kilogram salt

0,010 kilogram gjær

osv..

 

Blir litt lettere å lese:

500 gram mel

1 ts salt

50 gram gjær

 

Jepp, dette er et poeng, selv om det har med presentasjon å gjøre.

 

Man kan godt «standardisere» på en bestemt enhet i ingredienstabellen slik som noen foreslår. Men det er likevel ikke tilstrekkelig for å unngå merkelige målangivelser som over.

 

Så lenge man holder seg til det metriske systemet kan det løses ved å definere et sett med grenseverdier for hver måleenhet, eksempelvis hvis standardenheten er cl og antall enheter er mindre enn én konverterer man til milliliter, er antall enheter over ti konverterer man til liter. Osv.

 

Dersom man også skal kunne presentere måltallene på ymse «fraksjonsformer» a'la ibs and oz, feet and inches, og hva de nå heter alle sammen, så må man ha logikk som kan foreta slik konvertering også.

 

Så sånn sett kan man komme helt i mål ved å angi måleenheten kun i ingrediens-tabellen. Det vil utvilsomt gjøre alle til lags. Spørsmålet er vel heller om man skal ta seg bryet. Synes det er en helt kurant forenkling - til dette formålet vel å merke - å lagre måleenheten i drinker_ingredienser, og bare si at den måleenheten som er lagret der er den som vil bli brukt v. presentasjon også. Hva man velger avhenger om man er mest interessert i å drikke eller i å programmere :o)

 

Edit: PS, ser ikke problemet v. endring av måleenhet. Endrer man måleenheten må ganske enkelt mengden oppdateres tilsvarende. Det er helt rett fram.

Endret av quantum
Lenke til kommentar

Nå vet eg ikke hva trådstarter er opptatt av, men eg liker både å drikke og programmere. Alt til sin tid :)

Takker uansett for de siste to innspillene. Interessant måte å se det på. Endelig litt idemyldring :)

 

Men jeg tror nok læreren din setter pris på at du lagrer informasjon der den hører hjemme.

Hører hjemme og hører hjemme. Dette er jo strukturen i databasen som angir hvor ting hører hjemme, ikke nødvendigvis koblingen i dagligtalen. Når man kjører en spørring så får man et resultat som man presenterer i et grensesnitt. Om måletype ligger i tabell 1 eller tabell 2 har lite å si for presentasjonen sin del, men har litt å si for kompleksiteten til spørringen, og ikke minst hvor mye mer tid en avansert spørring tar kontra en enkel en. I et lite system har det lite å si, men i større systemer med mange samtidige spørringer kan dårlig struktur ødelegge ytelsen totalt.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...