Layout av tabeller, grundläggande

PHPportalen Forum Index » Databaser
Lägg ett bokmärke på hela tråden
Skapa nytt inlägg   Svara på inlägget
Visa föregående ämne :: Visa nästa ämne  
Startad av: Meddelande
Mr.Brownstone



Medlem i: 5300 dagar
Från: Stockholm
Status: Offline



#724135
Inlägg Skrivet: 2012-06-10 22:13      Ämne: Layout av tabeller, grundläggande Citera

Jag har en tabell över olika livsmedel jag använder: id, namn och antal där id kör autoincrement.
Sen vill jag skapa en tabell över mina recept, där de olika livsmedlena förekommer: id, receptnamn, ingredienser(alla livsmedel) samt instruktioner i lång text.
Nu min fråga. Då recept använder flera ingredienser, hur sparar jag alla dessa i ett fält (ett recept = en rad i databasen)?

Om ni misstänker länkar som kan hjälpa mig inom detta, mottages detta varmt.

MVH Mr.Brownstone
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida ICQ-nummer
marabou
Administratör



Medlem i: 5310 dagar
Från: Sveriges framsida
Status: Offline



#724138
Inlägget är accepterad som det rätta svaret Skrivet: 2012-06-10 22:30      Ämne: Citera

Du ska inte spara alla ingredienser i ett fält. Det bästa är att ha en separat tabell för vilka ingredienser som tillhör vilket recept. Detta kallas normalisering, och just denna variant kallas "många till många"-relation eftersom en ingrediens (en rad i ingredienstabellen) kan tillhöra flera recept (ett recept=en rad i recepttabellen).
Normalisering innebär väldigt enkelt att du inte skall lagra samma information mer än en gång. Det har du redan gjort delvis genom att ha ingredienserna i en egen tabell.

Denna kopplingstabell (även kallat relationstabell) består av två eller fler kolumner. I sin enklaste form behövs två kolumner:
recept_id och ingrediens_id
För varje recept lägger du in en rad i recept-tabellen.
För varje ingrediens som ingår i receptet lägger du in en rad i recept_ingredienser med id för receptet och id för ingrediensen.

När du sedan skall hämta ingredienserna för ett recept så kör du
KOD:
1:
SELECT ingredienser.* FROM ingredienser JOIN recept_ingredienser ON ingredienser.id = recept_ingredienser.ingrediens_id WHERE recept_ingredienser.recept_id = $id_för_receptet


När du gör så här kan du sedan söka efter recept som innehåller en viss ingrediens, eller ett recept som innehåller en viss kombination av ingredienser, eller tillochmed söka efter recept som inte innehåller en viss ingrediens.

När du gör ett recept vill du förmodligen även tala om hur mycket det skall vara av en viss ingrediens i receptet. Då lägger vi till en kolumn i vår kopplingstabell. Denna kolumn blir då specifkk för den ingrediensen för just det receptet. Nu ser tabellen ut så här: recept_id, ingrediens_id, mängd
(enheten, t.ex. deciliter, msk, kg osv lagras med fördel i ingredienstabellen)

När du lägger in en ingrediens på ett recept så lägger du in id för receptet, id för ingrediensen och sedan som ett tal (decimaltal) mängden av just den ingrediensen.
 

_________________
"Never argue with stupid people. They will bring you down to their level and beat you with experience."
- Mark Twain
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
Mr.Brownstone



Medlem i: 5300 dagar
Från: Stockholm
Status: Offline



#724159
Inlägg Skrivet: 2012-06-11 21:02      Ämne: Citera

Jag är helt mållös! Detta var nog för mig det bästa forumsvar jag fått sedan jag registrerade på ett forum - ever! Jag är så lycklig! Tack!

Har tillsammans med denna länk
http://databasteknik.se/webbkursen/er2relationer/index.html
från forumet nu äntligen förstått alltsammans. Smile
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida ICQ-nummer
marabou
Administratör



Medlem i: 5310 dagar
Från: Sveriges framsida
Status: Offline



#724169
Inlägg Skrivet: 2012-06-12 08:08      Ämne: Citera

Mr.Brownstone skrev:
Jag är helt mållös! Detta var nog för mig det bästa forumsvar jag fått sedan jag registrerade på ett forum - ever! Jag är så lycklig! Tack!

Har tillsammans med denna länk
http://databasteknik.se/webbkursen/er2relationer/index.html
från forumet nu äntligen förstått alltsammans. Smile

Härliga tider! Det är trevligt att veta att man kan hjälpa någon på rätt spår.
Skriv gärna hur resultatet blev sen när du kommit en bit på väg, så blir detta en bra resurs för andra med liknande funderingar.
 

_________________
"Never argue with stupid people. They will bring you down to their level and beat you with experience."
- Mark Twain
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
Visa tidigare inlägg:   
Skapa nytt inlägg   Svara på inlägget
PHPportalen Forum Index » Databaser
Hoppa till:  
Du kan inte skapa nya inlägg i det här forumet
Du kan inte svara på inlägg i det här forumet
Du kan inte ändra dina inlägg i det här forumet
Du kan inte ta bort dina inlägg i det här forumet
Du kan inte rösta i det här forumet
Du kan inte bifoga filer i detta forum
Du kan inte ladda ner filer från detta forum
Kontakta oss på adressen: info@phpportalen.net
Webbplatsen bygger i grunden på phpBB © 2001, 2002 phpBB Group

Modifieringar har senare gjorts i systemet av PHPportalen
Sid och logotypdesign skapad av Daren Jularic