Vinnaren i pepparkakshustävlingen!
2006-04-21, 10:35
  #1
Avstängd
Jag skulle vilja göra ett miniforum. Med några topics, typ: FIlm, politik , musik.
Och under dem skall man då kunna ställa sina frågor. Och svar skall kunna ges till frågorna. som här på flashback, fast i mycket mindre skala.
Men hur gör man denna databas. SKall jag ha en tabell för Topics. Sen så kopplar jag vare Topic till en Question tabell, där alla questions finns för den topicen.
Betyder det då att om jag har 4 topics så måste jag ha 4 st Question-tabeller. Betyder det också att om jag har 20 Questions att jag måste ha 20 Answers-tabeller ? Man kan väl inte vara tvungen att göra så här? eller ?
Citera
2006-04-21, 12:10
  #2
Medlem
Liquid_Xs avatar
bind varje rad i question till en topic så fixar det sig
Citera
2006-04-21, 17:20
  #3
Medlem
Tja, nedanstående är bara ett exempel på hur du skulle kunna göra och jag garanterar att det vare sig är det sämsta eller bästa sättet att göra det på men det kan väl antagligen reda ut ditt lilla huvudbry angående antal tabeller.

Kod:
En ganska simpel variant eller exempel på modell för
ett sådant miniforum kan nog realiseras enligt följande
lilla objekt/tabell-relation:

[Topic] <---- [Question] <---- [Answer]
        1   *            1   *

Exemplifierat i tabeller kan det t.ex. se ut ungefär
så här:

Table - Topic:
ID | Topic   | (More columns)   
-----------------------------
0  | Film    | 
1  | Politik | 
2  | Musik   |


Table - Question:
ID | Question         | TopicID | (More columns)   
------------------------------------------------
0  | Bästa filmen?    | 0       |
1  | Bra partiledare? | 1       |
2  | Sämsta filmen?   | 0       |
3  | Ny hårdrock?     | 2       |


Table - Answer:
ID | Answer           | QuestionID | (More columns)
---------------------------------------------------
0  | Matrix           | 0          |
1  | Sin City         | 0          |
2  | Carl Bildt       | 1          |
3  | Ola Ullsten      | 1          |
4  | Tjena kungen     | 2          |

Alltså med ett liknande upplägg med tre tabeller kan du skapligt enkelt skriva din applikation (t.ex. en webbapplikation med php och sql) för att skapa och läsa poster ur databastabellerna.

Example - View all topics
url: /view.php
php: ...
sql: select * from Topic

Example - View all questions in topic "Politik"
url: /view.php?t=1
php: ...
sql: select * from Question where TopicID=1

Example - View all answers for the question "Bra partiledare?"
url: /view.php?q=1
php: ...
sql: select * from Answer where QuestionID=1

Example - View the specific answer "Carl Bildt"
url: /view.php?a=2
php: ...
sql: select * from Answer where ID=2


Hoppas att detta ger dig lite idéer.
Citera
2006-04-21, 17:40
  #4
Avstängd
Tackar tackar det var väldigt snällt. Detta verkar fungera utmärkt än så länge.
Citera
2006-04-24, 20:09
  #5
Medlem
GenericIdlers avatar
Citat:
Ursprungligen postat av Dormie
-rätt bra och detaljerad genomgång-

en sak jag vill påpeka bara:
ID i answer-tabellen bör heta AnswerID eller answer_id. i question bör den heta QuestionID och så vidare för att det ska bli mer lättläst (speciellt i JOIN-satser etc) och skapa mera sinne.

dessutom bör du INTE använda SELECT * utan bara välja de kolumner du behöver, för bättre läsbarhet (blir nästan självdokumenterande) och prestanda
Citera
2006-04-25, 22:01
  #6
Medlem
gregerolles avatar
Citat:
Ursprungligen postat av GenericIdler
en sak jag vill påpeka bara:
ID i answer-tabellen bör heta AnswerID eller answer_id. i question bör den heta QuestionID och så vidare för att det ska bli mer lättläst (speciellt i JOIN-satser etc) och skapa mera sinne.

dessutom bör du INTE använda SELECT * utan bara välja de kolumner du behöver, för bättre läsbarhet (blir nästan självdokumenterande) och prestanda


Nja, vet inte om jag håller med, men det är nog en estetisk fråga.

Jag tycker det ser snyggast ut om man har ID som namn på id-kolumnen i respektive tabell. Sen använder man tabellnamnID när man refererar till ett id i en annan tabell..

Ex.

Kod:
Tabell: Topic
ID
Description
osv
osv


Tabell: Question:
ID
TopicID
osv osv

En join ser då ut såhär (och blir ganska lättläst):
SELECT * FROM Topic INNER JOIN Question on Topic.ID = Question.TopicID


Men det är väl en smaksak...
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback