webForumDet fria alternativet

samma id i flera tabeller

Databaser & SQL

3 svar · 258 visningar · startad av Matti

Medlem sedan dec. 19996 592 inlägg
Frågan#1

Hej hej, nu är jag i farten igen.

Anta att jag har två tabeller

namn
- id
- livsmedelsnamn

gi
- id
- glykemiskt index

id-fälten är autoincrement. Om man då stoppar in lite data ser det kanske ut såhär:

id | namn
-------------
1  | äpple
2  | pepparkaka 

id | glykemiskt_index
-------------
1  | 55
2  | 90

Okej, allting lugnt hittils. Men om jag lägger till en tabell till som heter "kcal_per_100_gram" och lägger till poster för t.ex. havregryn så blir det fel, eftersom havregryn har id 3 i de två övre tabellerna men id 1 i den nedersta tabellen.

id | namn
-------------
1  | äpple
2  | pepparkaka 
3  | havregryn

id | glykemiskt_index
----------------------
1  | 55
2  | 90
3  | 40

id | kcal_per_100_gram
----------------------
1  | 80

Det är ju uppenbart inte så bra att ha auto-increment på alla fält.

Den enda lösning jag kan komma på är att man med PHP kollar vilket värde man fick på ID när man stoppade in namnet (havregryn) och så stoppar man in det ID:t i de två andra tabellerna. Frågan lyder då: är det så man ska göra?

Medlem sedan mars 20007 896 inlägg
#2

Njä, du bör använda dig av relationer ( Har jag för mig att det kallas? :q ).

Ex:
Tabellen namn

id | namn
------------
1  | äpple
2  | pepparkaka
3  | havregryn

Tabellen gi

namnid | glykemiskt_index
------------------------------
1      | 55
3      | 40
2      | 90

Tabellen kcal

namnid | kcal
------------
3      | 80

Då kan du enkelt plocka ut all information med SQL-frågor:

SELECT kcal, glymemiskt_index, namn 
FROM namn, gi, kcal 
WHERE kcal.namnid = namn.id AND gi.namnid = namn.id

Om du förstås inte har möjlighet att lagra sån här information i en enda tabell? Det verkar inte som att man behöver dela upp just det här på flera tabeller. Men jag vet ju å andra sidan inte hur du bygger upp din applikation. ;)

Medlem sedan mars 2001593 inlägg
#3

om man inte delar upp det får man inga främmande ycklar och då blir det redundanc... men jag kan ju ha fel

Medlem sedan dec. 19996 592 inlägg
#4

Om du förstås inte har möjlighet att lagra sån här information i en enda tabell?

Jo, jag tog bara det som ett exempel.

Tack

251 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)