Vinnaren i pepparkakshustävlingen!
2009-11-27, 16:12
  #1
Avstängd
Beardos avatar
Jag är SQL-noob och skulle behöva lite hjälp. Jag ska göra en databas med filmer. Filmerna ska ha följande information: id-nummer, titel, år, alternativ titel, språk, genre.
Mitt problem är att en film kan ha flera alternativa titlar, vara på flera olika språk och tillhöra flera olika genrer. Hur löser jag detta på ett smidigt sätt?
Citera
2009-11-27, 16:18
  #2
Avstängd
phatzers avatar
Använder dig av original-titel och original-språk..
Citera
2009-11-27, 16:23
  #3
Medlem
Tvillingens avatar
Jag skulle använda implode och explode.
http://php.net/manual/en/function.implode.php
http://php.net/manual/en/function.explode.php

[edit]
Oj trodde detta var postat i php-delen, men vad använder du något programmeringsspråk ihop med databasen?
Citera
2009-11-27, 16:26
  #4
Medlem
claxors avatar
Citat:
Ursprungligen postat av Beardo
Jag är SQL-noob och skulle behöva lite hjälp. Jag ska göra en databas med filmer. Filmerna ska ha följande information: id-nummer, titel, år, alternativ titel, språk, genre.
Mitt problem är att en film kan ha flera alternativa titlar, vara på flera olika språk och tillhöra flera olika genrer. Hur löser jag detta på ett smidigt sätt?

Ha en tabell för varje film med id, namn år och allt som endast har ett "svar". Sedan har du en tabell med alla genrer, med tillhörande id. Sedan en tredje tabell där du "kopplar ihop", se nedan.

Tabell 1:
ID NAMN
1 Gudfadern I
2 Forrest Gump

Tabell 2:
ID GENRE
1 Drama
2 Thriller

Tabell 3
FILM-ID GENRE-ID
1 1 (Gudfadern är Drama)
1 2 (Gudfadern är Thriller)
2 2 (Forrest Gump är Drama)

Samma princip för språk osv.

(om det är en liten databas kan du förstås använda simplare medel, men denna metoden är bra praxis)
__________________
Senast redigerad av claxor 2009-11-27 kl. 16:30.
Citera
2009-11-27, 16:39
  #5
Medlem
claxors avatar
Inte läst sidan helt men verkar vara användbart: http://www.tonymarston.net/php-mysql/many-to-many.html
Citera
2009-11-27, 22:13
  #6
Avstängd
Beardos avatar
Citat:
Ursprungligen postat av Tvillingen
Jag skulle använda implode och explode.
http://php.net/manual/en/function.implode.php
http://php.net/manual/en/function.explode.php

[edit]
Oj trodde detta var postat i php-delen, men vad använder du något programmeringsspråk ihop med databasen?

Jag använder Python.
Citera
2009-11-27, 23:13
  #7
Avstängd
Beardos avatar
Citat:
Ursprungligen postat av claxor
Ha en tabell för varje film med id, namn år och allt som endast har ett "svar". Sedan har du en tabell med alla genrer, med tillhörande id. Sedan en tredje tabell där du "kopplar ihop", se nedan.

Tabell 1:
ID NAMN
1 Gudfadern I
2 Forrest Gump

Tabell 2:
ID GENRE
1 Drama
2 Thriller

Tabell 3
FILM-ID GENRE-ID
1 1 (Gudfadern är Drama)
1 2 (Gudfadern är Thriller)
2 2 (Forrest Gump är Drama)

Samma princip för språk osv.

(om det är en liten databas kan du förstås använda simplare medel, men denna metoden är bra praxis)

Tack för hjälpen. Jag skulle gärna vilja veta vilka dessa "simplare medel" är. Just alternativa titlar kan vara väldigt många och det känns onödigt att skapa en tabell för dem. Finns det inga listor eller arrayer i SQL?
Citera
2009-11-27, 23:26
  #8
Medlem
Sorkus avatar
Citat:
Ursprungligen postat av Beardo
Tack för hjälpen. Jag skulle gärna vilja veta vilka dessa "simplare medel" är. Just alternativa titlar kan vara väldigt många och det känns onödigt att skapa en tabell för dem. Finns det inga listor eller arrayer i SQL?
Vill man ha en normaliserad databas så är det så man gör, men visst kan du göra fullösningar, men det är inte att rekommendera om du är seriös med din sida.

Exempelvis kan du avgränsa de alternativa titlarna med | så det ser ut så här: "Heroes (English)|Herois (Espanol)|Heroji (Hrvatski)" i alternativa titlar fältet och sedan bara dela upp strängen till en lista när du vill skriva ut dom.
Citera
2009-11-28, 00:37
  #9
Avstängd
Beardos avatar
Citat:
Ursprungligen postat av Sorku
Vill man ha en normaliserad databas så är det så man gör, men visst kan du göra fullösningar, men det är inte att rekommendera om du är seriös med din sida.

Exempelvis kan du avgränsa de alternativa titlarna med | så det ser ut så här: "Heroes (English)|Herois (Espanol)|Heroji (Hrvatski)" i alternativa titlar fältet och sedan bara dela upp strängen till en lista när du vill skriva ut dom.

Jag är lite rädd för den typen av lösningar. Det brukar leda till mer jobb i slutändan.
Citera
2009-11-28, 00:57
  #10
Moderator
Protons avatar
Arrayer finns tack och lov inte som en "native type" i SQL, eftersom det på ett effektivt sätt skulle förstöra alla möjligheter att få en tabell ens i första normalformen. Hela meningen med en databas är att varje attribut skall vara atomärt, något en array alltså inte är. Alls.

Läs på om normalisering så borde det ganska snabbt framgå vilket helgerån du just föreslog
Citera
2009-11-28, 18:35
  #11
Medlem
claxors avatar
Citat:
Ursprungligen postat av Beardo
Jag är lite rädd för den typen av lösningar. Det brukar leda till mer jobb i slutändan.

Då föreslår jag ovanstående metod
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