qualitum logo
Relationer mellan tabeller?

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
kyle



Medlem i: 433 dagar

Status: Offline



#721579
Inlägg Skrivet: 2012-03-12 19:26      Ämne: Relationer mellan tabeller? Citera

Hej. Jobbar just nu på en sida som ska innehålla massa frågor inom olika kategorier. Användarna väljer mellan tre olika radio-buttons och deras svar registreras sedan i databasen.

Problemet är att det kommer fyllas på med väldigt mycket frågor och just nu lagras svaren i "users"-tabellen tillsammans med lösenord och användarnamn. Kolumnerna blir alltså:
"category1_question1"
"category1_question2"
"category1_question3" osv...till slut kommer det vara en enorm mängd kolumner i users-tabellen, vilket inte känns som en bra lösning.

Problemet är att jag måste ha user_id (som även det finns i users-tabellen) för att kunna registrera den aktuella användarens svar. Detta borde ju gå att lösa genom relationer tabellerna imellan, att man kör samma user_id i samtliga tabeller men jag har ingen aning hur man löser detta.

Skulle vara fint om någon kunde tipsa om en guide(svenska/engelska) som förklarar tänket med dessa relationer, eller kanske någon här kan ge lite råd.

MVH
kyle
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
marabou
Moderator



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



#721585
Inlägg Skrivet: 2012-03-12 20:46      Ämne: Citera

Hej kyle, Välkommen till PHPPortalen!

Fenomenet kallas "normalisering". Gör en sökning på forumet så finns många detaljerade beskrivningar och länkar.

I ditt fall gör du en eller flera relationstabeller.
Är det kryssfrågor (eller "selectboxar") med fördefinerade svar behöver du tre tabeller (en för användare, en för frågor och en för svarsalternativ), och sedan en för vilka svar användaren har gett (relationstabellen):
KOD:
1:
Användare:
2:
user_id    username
3:
1          marabou
4:
2          kyle
5:
 
6:
Frågor:
7:
question_id   question_text
8:
1             Vem skrev "Romeo och Julia"
9:
2             När grundades PHPportalen
10:
 
11:
Svarsalternativ:
12:
answer_id     question_id     answer_text       correct_Answer
13:
1             1               Homeros           0
14:
2             1               Guillou           0
15:
3             1               Shakespeare       1
16:
4             1               Defoe             0
17:
5             2               2000              0
18:
6             2               2002              1
19:
7             2               2004              0
20:
8             2               2006              0
21:
 
22:
Användarnas svar:
23:
user_id     question_id     answer_id
24:
1           1               1
25:
1           2               6
26:
2           1               3
27:
2           2               8


Har du "fritext"-frågor/svar så byter du ut answer_id i sista tabellen mot ett textfält.
 

_________________
"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
kyle



Medlem i: 433 dagar

Status: Offline



#721588
Inlägg Skrivet: 2012-03-12 21:54      Ämne: Citera

Tackar för ditt utförliga svar marabou!

Nu är svarsalternativen begränsade till sant, falsk och ett till, vilket i kodens värld ses som värdena 0,1,2. Behöver nog inte en egen tabell för svaren med andra ord!

Kanske skulle det underlätta att köra en tabell för de korrekta svaren, tex:
PHP:
1:
 Answers:
2:
question_id      correct_answer
3:
1                       0
4:
2                       2
5:
3                       


För att sedan matcha dessa mot
PHP:
1:
 User_answers:
2:
user_id      question_id     user_answer
3:
 1                  1              
4:
  2                 2              0
5:
  3                 3              2
6:
 


Lite pseudo-kod:
PHP:
1:
 if($user_answer == $correct_answer)
2:
        //uppdatera poäng
3:
 


En fråga till, om det nu är tillåtet, påverkar storleken av tabeller hastigheten mellan när man ska hämta data ur databasen? Spelar det det någon roll om man har 150 kolumner istället för 50 kolumner?

Tack än en gång för din hjälp!
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
md2perpe
Ex-Moderator



Medlem i: 3736 dagar
Från: Hallonbergen, Kungsbodarna
Status: Offline



#721631
Inlägg Skrivet: 2012-03-14 16:28      Ämne: Citera

kyle skrev:
Spelar det det någon roll om man har 150 kolumner istället för 50 kolumner?

Det kan ha betydelse eftersom data skickas i paket över nätverket och i hamnar i buffertar av viss längd. Ju färre kolumner, desto mindre data per post, desto fler poster får plats per paket.
 

_________________
6 + sqrt(64) = 10
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
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
qualitum logo