Avatar billede tommyf Nybegynder
02. januar 2008 - 10:23 Der er 20 kommentarer og
1 løsning

Databasedesign til madsite

Jeg er ved at lave en database, der skal indeholde en række opskrifter. I den forbindelse har jeg indtil videre opstillet databasen sådan her:

tbBrugere
- ID (Nøgle)
- Navn
- Alias
- Kode
- Email
- Postnummer

tbOpskrifter
- ID (nøgle)
- Navn
- Billedsti
- Vejledning
- Ingredienser (?)
- Forfatter

tbIngredienser
- ID (nøgle)
- Navn
- Beskrivelse
- Billede

Umiddelbart mangler jeg en løsning til hvordan ingredienser kobles sammen med opskriften. Det er jo umiddelbart let at skrive "4,7,9,12" i ingredienser under tabellen tbOpskrifter... men så mangler der jo vægtangivelse.

Jeg vil gerne sikre at alle ingredienserne bliver skrevet ens, hvilket er grunden til tbIngredienser. Ellers kunne jeg selvfølgelig lave ingredienser1-20 i tbOpskrifter som navnefelter... men så kan man ikke længere søge på en ingrediens.

Forslag til ovenstående problemstilling eller opstillingen generelt?
Avatar billede jop... Nybegynder
02. januar 2008 - 10:31 #1
Er det ikke bare at lave en ekstra række til vægtangivelsen i tbOpskrifter:

tbOpskrifter
- ID (nøgle)
- Navn
- Billedsti
- Vejledning
- Ingredienser (?)
- Ingredienser_vaegt
- Forfatter
Avatar billede terry Ekspert
02. januar 2008 - 10:38 #2
As far as I can make out this is an many-to-many relationship where one or more "Ingredienser" are required for a "Opskrift" and "Ingredienser" can be used in many "Opskrift" 


tbOpskrifterIngredienser
OpskriftID
IngredienserID
vaegt
Avatar billede tommyf Nybegynder
02. januar 2008 - 11:23 #3
Hmm... så behøver jeg ikke "Ingredienser" i tbOpskrifter?

Det bliver dog et rimelig svært sql-udtræk? Har du et forslag til det Terry, eller er det udenfor dit område? :)

job -> Jeg tror det bliver noget rod, når der er ex. 10 ingredienser?
Avatar billede terry Ekspert
02. januar 2008 - 11:38 #4
"Hmm... så behøver jeg ikke "Ingredienser" i tbOpskrifter?" Thats correct.

"Det bliver dog et rimelig svært sql-udtræk? .." No, but first it simportant to get the design correct, once thats done then the rest is easy. If you get the design wrong from the start it will cause problems later.
Avatar billede terry Ekspert
02. januar 2008 - 11:39 #5
What database do you use?
Avatar billede tommyf Nybegynder
03. januar 2008 - 00:58 #6
It is a MySQL database, that is going to be used as backend to a website. Does that change anything?
Avatar billede terry Ekspert
03. januar 2008 - 09:05 #7
No, the database design should be the same no matter what SQL relational database you use. The SQL syntax can differ between the different databases but I cant see that being a problem.

Does using a many-to-many relationship make sence?
http://www.tonymarston.net/php-mysql/many-to-many.html
Avatar billede tommyf Nybegynder
03. januar 2008 - 18:22 #8
I think one-to-many should be the way to go... The other seems interesting, but again I would like not to make it more complicated than nessesary.
Avatar billede terry Ekspert
04. januar 2008 - 12:00 #9
Thanks for the points.

I'm interested in seeing how you make the one-to-many
Avatar billede tommyf Nybegynder
05. januar 2008 - 17:03 #10
The one-to-many comment was a mistake on my part. The link you gave me explained a lot and got me started. Now I have:

SELECT tblOpskrifterIngredienser.vaegt, tblOpskrifterIngredienser.OpskriftID, tblOpskrifterIngredienser.IngrediensID, tblIngredienser.Beskrivelse, tblIngredienser.Navn, tblIngredienser.Billede FROM tblOpskrifterIngredienser LEFT JOIN tblIngredienser ON (tblIngredienser.ID = tblOpskrifterIngredienser.IngrediensID) WHERE (tblOpskrifterIngredienser.OpskriftID = "1")

Can I also get that piece of SQL to grap the tblOpskrifter.vedjledning or should I make another sql-string for that?
Avatar billede tommyf Nybegynder
05. januar 2008 - 17:24 #11
I was a bit to quick, it works. Thanks again :)

SELECT
tblOpskrifterIngredienser.vaegt,
tblOpskrifterIngredienser.OpskriftID,
tblOpskrifterIngredienser.IngrediensID,
tblIngredienser.Beskrivelse,
tblIngredienser.Navn,
tblIngredienser.Billede,
tblopskrifter.vejledning

FROM
tblOpskrifterIngredienser, tblingredienser, tblopskrifter

LEFT JOIN
tblIngredienser

ON

(tblIngredienser.ID = tblOpskrifterIngredienser.IngrediensID)

WHERE (tblOpskrifterIngredienser.OpskriftID = '1')
Avatar billede terry Ekspert
06. januar 2008 - 10:40 #12
Thanks for the points Tommyf

I dont think the last SQL you gave is correct, I would think you need a join between tblopskrifter and tblOpskrifterIngredienser

Something like this

SELECT tbltbOpskrifterIngredienser.Vægt, tbltbOpskrifterIngredienser.OpskriftID, tbltbOpskrifterIngredienser.IngredienserID, tblIngredienser.Beskrivelse, tblIngredienser.Navn, tblIngredienser.Billede, tblOpskrifter.Vejledning
FROM tblIngredienser RIGHT JOIN (tblOpskrifter LEFT JOIN tbltbOpskrifterIngredienser ON tblOpskrifter.ID = tbltbOpskrifterIngredienser.OpskriftID) ON tblIngredienser.ID = tbltbOpskrifterIngredienser.IngredienserID
Avatar billede tommyf Nybegynder
06. januar 2008 - 15:05 #13
I think you are right... I'm thinking about making 2 SQL calls. One that thakes all ingredienses which is assosiated with receip X. Then number 2 SQL-call which take all the info from the receip-tbl.

The problem is, that when I'm running your SQL and my own, I get this result:
http://img229.imageshack.us/img229/7889/sqlms5.gif


I have changed a bit in the name of the tables, so for reference, here is yours:
------------------------------------------------------------
SELECT
tblOpskrifterIngredienser.maengde,
tblOpskrifterIngredienser.OpskriftID,
tblOpskrifterIngredienser.IngrediensID,
tblIngredienser.Beskrivelse,
tblIngredienser.Navn,
tblIngredienser.Billede,
tblOpskrifter.Vejledning

FROM
tblIngredienser

RIGHT JOIN
(tblOpskrifter LEFT JOIN tblOpskrifterIngredienser ON tblOpskrifter.ID = tblOpskrifterIngredienser.OpskriftID) ON tblIngredienser.ID = tblOpskrifterIngredienser.IngrediensID
Avatar billede terry Ekspert
06. januar 2008 - 16:29 #14
From the link you gave showing the gif file the result looks as I expect it to. You have two "opskrifter" and they both use the same "ingredienser", Persille and Basilikum.


If your going to make
Avatar billede terry Ekspert
06. januar 2008 - 16:35 #15
If your going to make ..
a complete site over recipes and ingredients  I could imagine that you will end up with many more than two SQL calls but its a start.

Looking forwadr to seeing th final result
Avatar billede tommyf Nybegynder
06. januar 2008 - 19:26 #16
I'll post when it's ready, thank's for the interest :)
Avatar billede tommyf Nybegynder
04. april 2008 - 20:57 #17
A follow-up question if you are up for it? :)
What if we had to get data from a third tabel to?

Depending on the content of 'tblOpskrifterIngredienser.maengde' I would ex. like to find the amount of fat - this amount lies in another tabel named tblmaengdeangivelser with the fields id, angivelse, fedt.
Avatar billede terry Ekspert
05. april 2008 - 15:13 #18
wasnt it an idea to have the fat content in tblIngredienser? If you have another table for this then you still have to calculate the fat content depending on maenge. So in tblIngredienser you would (for example) have the fat content for 1 gram of the ingredient and in your select you would make the calculaton.
Avatar billede tommyf Nybegynder
05. april 2008 - 15:39 #19
You are right :)
... think I got a bit distracted.

The first stage is almost done: www.godmad.dk
1) User registration
2) Adding a receip
3) User profile page - lacking content
4) Categories and some of the basic sites. Still lack the content to the static pages.

When first stage is done, i'll start adding receipt's (and beg familymembers to do the same). When we have the first 50 receipts i'll start building more on the interactive part and try to make some kind of point-system that can be used in contests.

It's pretty basic as it is now, but you gotta start some place... comments/ideas are welcome: http://godmad.dk/feedback.asp?send=lay

Again: thank you for the help.
Avatar billede tommyf Nybegynder
05. april 2008 - 15:41 #20
Just a disclaimer: Got distracted by another project plus a lot of study-related work... it should not have taken this long :)
+ The individual content isen't designed yet but mostly 'thrown in'. Have to take a day, where I arrange the content a bit nicher.
Avatar billede terry Ekspert
05. april 2008 - 18:19 #21
its comming along fine
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester