Hvordan ser de database tabeller ud som opskrift og ingredienser skal indsaettes i? Det lyder som et "en til mange" situation hvor normaliserede databaser bruger to tabeller.
For eksempel tabellen Opskrift med kolonnerne opskrift_id og opskrift_navn og tabellen Ingrediens med kolonnerne ingerdiens_id, ingrediens_navn, og opskrift_id.
Hvis du saa har en opskrift "Frikadeller" med ingredienserne fars, mel, og maelk saa skal det staa saadan i tabellerne:
Hvad skulle problemet vaere? Du koerer videre i tabellerne og indsaetter nye retter med en ny id for hver ret og indsaetter ingredienser for hver ret ingredienserne, saaledes:
Ingredienser ingrediens_id ingrediens_navn opskrift_id 1 pasta 2 2 smoer 2 3 fars 2 1 tarm 3 2 spaek 3 3 salt 3 4 fars 3
Saa faar du for en bestemt ret, for eksempel ravioli, rettens navn og ingredienser ved denne forespoergsel:
SELECT opskrift_navn, ingrediens_navn FROM Opskrift JOIN Ingredienser ON Opskrift.opskrift_id = Ingredienser.opskrift_id WHERE Opskrift.opskrift_navn = "ravioli"
Eller navnet paa alle opskrifter med fars saaledes:
SELECT opskrift_navn FROM Opskrift JOIN Ingredienser ON Opskrift.opskrift_id = Ingredienser.opskrift_id WHERE Ingredienser.ingrediens_navn = "fars"
Hvis systemet ikke er "til husbehov" men til et storkoekken hvor der er behov for kontrol med ingredienser kan man lave en tabel Ingreidens med felterne in_id, ingrediens_navn. Der fylder man saa alle ingredienser i. I Ingredienser tabellen bliver feltet ingrediens_navn udskiftet med ingrediens_nummer, og hvis fars har nummer 13 (mit lykketal) i Ingrediens tabellen saa finder man retterne med fars ved denne query:
SELECT opskrift_navn FROM Opskrifter JOIN Ingredienser ON Opskrift.opskrift_id = Ingredienser.opskrift_id JOIN Ingrediens ON Ingredienser.ingrediens_id = Ingrediens.in_id
Dumt spørgsmål fra den datamatiker studerende: Jeg er enig i Christians løsningsforslag, som for mig ser ud til at være normaliseret helt til 3. normalform. men umiddelbart ser det også ud til at der bruges fremmednøgler, som ikke er understøttet i MyISAM. Hvordan kan det hænge sammen ?
Og ja, jeg er ligeså spændt på at høre om det virkede :)
danco, ikke helt forstaaet - du spoerger "Hvordan kan det haenge sammen?" Hvordan kan hvad haenge sammen?
Det er korrekt (saa vidt jeg ved) at fremmednoegler ikke understoettes i MyISAM.
Men naar du siger: "umiddelbaert ser det ogsaa ud til at der bruges fremmednoegler.." referere du saa til mit loesningsforslag og mener du at jeg har defineret fremmednoegler? Jeg har ikke defineret fremmednoegler fordi det ligger udenfor spoergsmaalet. Hvis jeg selv skulle bruge det ville jeg sikkert have defineret fremmednoegler fra Ingredienser.opskrift_id til Opskrift.opskrift_id og, hvis en Ingredienstabel skulle bruges, fra Ingredienser.ingrediens_id til Ingrediens.ingrediens_id og saa brugt InnoDB engine.
(Jeg har set en udbredt sammenblanding af fremmednoegle med join queries. En fremmednoegle for eksempel fra Ingredienser.opskrift_id til Opskrift.opskrift_id sikrer den referentielle integritet saaledes at der ikke i Ingredienser kan indsaettes en opskrift_id der ikke eksisterer i Opskrift, men det er sikkert muligt at joine Opskrift med Ingredienser ON Opskrift.opskrift_id = Ingredienser.opskrift_id uden at der er fremmednoegle.)
Christian, Tak, du forklarede så væsentlig ud over min tvivl, men det beklager jeg naturligvis at jeg ikke har formuleret mig ordentligt. Men med din forklaring her er jeg bare endnu mere enig med dig :)
Hey.. Undskyld jeg først svarer nu :) Det hele virker perfekt, på nær lige den sætter en tom ingrediens for meget ind :) men det er nok ikke her vi skal finde løsningen på det..
Tusind tak for hjælpen!!
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.