Vinnaren i pepparkakshustävlingen!
2009-10-21, 17:41
  #1
Medlem
Ska göra en väldigt simpel filmdatabas där själva grundtanken ska vara att en regissör kan regissera flera filmer.

Via ett formulär ska så besökaren få lägga till film, produktionsår och regissör.
Har tänkt mig en 1:N relation mellan film och regissör (även om så kanske inte är fallet i verkligheten) och använder mig därför av endast två tabeller:

MOVIES:
title_id | titlename | prod_y | direct_id

DIRECTORS:
direct_id | name

Så till problemet:
Är newbie inom ämnet minst sagt och känner mig ganska förvirrad. Jag har lyckats skapa en relation mellan de två olika tabellerna som kan visas på sidan, men problemet är att jag har ingen aning om hur jag ska gå till väga för att på bästa sätt skapa (via php) de formulär man behöver ha för att användaren ska kunna fylla i rätt information.

Det jag behöver göra genom formuläret är att:
- Uppdatera information till databasen om, exempelvis, en användare vill lägga in en film med Tarantino som regissör, men "Tarantino" redan finns i databasen.

- Skapa korrekta värden för "direct_id" från MOVIES-tabellen som sedan stämmer överrens med "direct_id"-värdena från DIRECTORS-tabellen.

Hoppas det finns några smartskallar där ute som kan hjälpa mig. Tackar!
Citera
2009-10-21, 20:40
  #2
Medlem
Mys-Hitlers avatar
Gör ett separat formulär där du lägger till nya regissörer, där kan du även knappa in lite info som födelseår, nationalitet, o.s.v.

När du sedan ska lägga till en ny film så är det bara att ha de befintliga regissörerna i en rullgardinsmeny. Fördelen är att du kommer bara att ha en enda "Quentin Tarantino" istället för en "Quentin Tarantino", en "Tarantino", en "Qentin Tarantino", en "Quentin Taranntino", o.s.v.
Citera
2009-10-21, 21:59
  #3
Moderator
Protons avatar
Citat:
Ursprungligen postat av tropadeelite
Ska göra en väldigt simpel filmdatabas där själva grundtanken ska vara att en regissör kan regissera flera filmer.

Via ett formulär ska så besökaren få lägga till film, produktionsår och regissör.
Har tänkt mig en 1:N relation mellan film och regissör (även om så kanske inte är fallet i verkligheten) och använder mig därför av endast två tabeller:

MOVIES:
title_id | titlename | prod_y | direct_id

DIRECTORS:
direct_id | name

Så till problemet:
Är newbie inom ämnet minst sagt och känner mig ganska förvirrad. Jag har lyckats skapa en relation mellan de två olika tabellerna som kan visas på sidan, men problemet är att jag har ingen aning om hur jag ska gå till väga för att på bästa sätt skapa (via php) de formulär man behöver ha för att användaren ska kunna fylla i rätt information.

Det jag behöver göra genom formuläret är att:
- Uppdatera information till databasen om, exempelvis, en användare vill lägga in en film med Tarantino som regissör, men "Tarantino" redan finns i databasen.

- Skapa korrekta värden för "direct_id" från MOVIES-tabellen som sedan stämmer överrens med "direct_id"-värdena från DIRECTORS-tabellen.

Hoppas det finns några smartskallar där ute som kan hjälpa mig. Tackar!
Din databas är underligt designad om du hade tänkt dej att få till 1:N-förhållandet på det där sättet.

För varje film kan det endast vid varje givet tillfälle i nuläget finnas en och endast en regissör per film. Tänk på att när du ska hämta ut data från din databas ska ju en primärnyckel vara unik och peka ut endast en film. Hur har du tänkt att stoppa i fler regissörer för varje given film med din modell?

Visst, du kan ha samma namn på filmerna på de olika raderna, men för databasen framstår de ändå som olika filmer då de har olika primärnycklar. Dessutom kommer det bli ett elände att utöka den där modellen sedan om man skulle känna för det.

Hade jag varit du hade jag haft en relationstabell mellan filmer och regissörer så jag kan ange flera till flera-relationer istället. Det kan ju till exempelvis tänkas att en regissör har regisserat fler filmer och en film kan ha flera regissörer?
Citera
2009-10-22, 12:24
  #4
Medlem
Citat:
Ursprungligen postat av Proton
Din databas är underligt designad om du hade tänkt dej att få till 1:N-förhållandet på det där sättet.

För varje film kan det endast vid varje givet tillfälle i nuläget finnas en och endast en regissör per film. Tänk på att när du ska hämta ut data från din databas ska ju en primärnyckel vara unik och peka ut endast en film. Hur har du tänkt att stoppa i fler regissörer för varje given film med din modell?

Visst, du kan ha samma namn på filmerna på de olika raderna, men för databasen framstår de ändå som olika filmer då de har olika primärnycklar. Dessutom kommer det bli ett elände att utöka den där modellen sedan om man skulle känna för det.

Hade jag varit du hade jag haft en relationstabell mellan filmer och regissörer så jag kan ange flera till flera-relationer istället. Det kan ju till exempelvis tänkas att en regissör har regisserat fler filmer och en film kan ha flera regissörer?

Okej!

Antar att det blir så här då, om jag fattat det rätt:

MOVIES:
title_id | titlename | prod_y | direct_id

DIRECTORS:
direct_id | name

CONNECTS:
title_id | direct_id

Men hur gör man för att skapa en relation mellan dessa tre tabeller?
Om jag fattat det rätt bör väl inte någon av attributen i CONNECTS-tabellen vara primärnyckel?
Citera
2009-10-22, 12:51
  #5
Moderator
Protons avatar
Citat:
Ursprungligen postat av tropadeelite
Okej!

Antar att det blir så här då, om jag fattat det rätt:

MOVIES:
title_id | titlename | prod_y | direct_id

DIRECTORS:
direct_id | name

CONNECTS:
title_id | direct_id

Men hur gör man för att skapa en relation mellan dessa tre tabeller?
Om jag fattat det rätt bör väl inte någon av attributen i CONNECTS-tabellen vara primärnyckel?
Tvärtom utgör bägge attributen primärnyckel i connects-tabellen. Detta för att du aldrig ska kunna hamna i en situation där en regissör är uppsatt att regissera en film mer än en gång. Betänk följande:
Kod:
title_id   direct_id
1                 1
1                 2
1                 1
Den där tabellstrukturen är fullt möjlig(men felaktig) om du inte ha bägge attributen som primärnyckel. PN har ju den trevliga egenskapen att den måste vara unik, försök att stoppa i rader som inte har unik PN kommer din databas stoppa. Hade däremot bägge attributen i ovanstående exempel varit PN tillsammans så hade det inte gått att stoppa i den sista raden eftersom det redan finns en sådan nyckel i tabellen.

Dessutom ska du ta bort direct_id från movies-tabellen i detta fall, den fyller ingen funktion där längre. Det är ju connect du använder för att hålla reda på vilken regissör som regisserat vilken film.
Citera
2009-10-22, 13:23
  #6
Medlem
Citat:
Ursprungligen postat av Proton
Tvärtom utgör bägge attributen primärnyckel i connects-tabellen. Detta för att du aldrig ska kunna hamna i en situation där en regissör är uppsatt att regissera en film mer än en gång. Betänk följande:
Kod:
title_id   direct_id
1                 1
1                 2
1                 1
Den där tabellstrukturen är fullt möjlig(men felaktig) om du inte ha bägge attributen som primärnyckel. PN har ju den trevliga egenskapen att den måste vara unik, försök att stoppa i rader som inte har unik PN kommer din databas stoppa. Hade däremot bägge attributen i ovanstående exempel varit PN tillsammans så hade det inte gått att stoppa i den sista raden eftersom det redan finns en sådan nyckel i tabellen.

Dessutom ska du ta bort direct_id från movies-tabellen i detta fall, den fyller ingen funktion där längre. Det är ju connect du använder för att hålla reda på vilken regissör som regisserat vilken film.

Men när jag skapar tabellen CONNECTS i databasen; ska jag då ange title_id eller direct_id som primärnyckel? Eller ingen av dem? Och som sagt; hur använder jag connects-tabellen att skapa en relation mellan movies och directors-tabellerna?

Tack för att du är ihärdig i dina svar, trots mina newbiekunskaper. Höhö!
Citera
2009-10-22, 13:51
  #7
Moderator
Protons avatar
Citat:
Ursprungligen postat av tropadeelite
Men när jag skapar tabellen CONNECTS i databasen; ska jag då ange title_id eller direct_id som primärnyckel? Eller ingen av dem? Och som sagt; hur använder jag connects-tabellen att skapa en relation mellan movies och directors-tabellerna?

Tack för att du är ihärdig i dina svar, trots mina newbiekunskaper. Höhö!
Som jag sa utgör både film_id och director_id primärnyckel TILLSAMMANS. Du ska således ange att BÄGGE TVÅ utgör primärnyckeln.

Förstår sedan inte vad du menar med att skapa en relation mellan dom 2? connect är ju relaterad till director-tabellen med sitt director_id och till movie-tabellen med movie_id. Förstår inte alls vad du är ute efter?
Citera
2009-10-22, 15:11
  #8
Medlem
Citat:
Ursprungligen postat av Proton
Som jag sa utgör både film_id och director_id primärnyckel TILLSAMMANS. Du ska således ange att BÄGGE TVÅ utgör primärnyckeln.

Förstår sedan inte vad du menar med att skapa en relation mellan dom 2? connect är ju relaterad till director-tabellen med sitt director_id och till movie-tabellen med movie_id. Förstår inte alls vad du är ute efter?

Jag missförstår säkert här, men det är väl en omöjlighet att ha två primärnycklar i en och samma tabell, som man själv skapar i databasen (använder mig av phpmyadmin)?
Citera
2009-10-22, 15:31
  #9
Moderator
Protons avatar
Citat:
Ursprungligen postat av tropadeelite
Jag missförstår säkert här, men det är väl en omöjlighet att ha två primärnycklar i en och samma tabell, som man själv skapar i databasen (använder mig av phpmyadmin)?
Du har helt rätt, du missförstår mej....

Det stämmer att det endast kan finnas en primärnyckel i en tabell, det är liksom det som är vitsen med en primärnyckel. Dessutom ska du med primärnyckeln kunna identifiera en unik rad.

Nånting helt annat, dvs det jag talar om, är att en primärnyckel inte nödvändigtvis behöver utgöras av ett och endast ett attribut, finns ett flertal tillfällen då endast ett attribut inte räcker för att unikt kunna identifiera en rad.

PN med 2 eller flera attribut i sej kallas en sammansatt primärnyckel. Jag har sett tabeller vars primärnyckel utgörs av inte mindre än 4 attribut. Inget av dessa attribut kan själv peka ut en rad i tabellen, utan alla 4 krävs för att åstadkomma detta.
Citera
2009-10-22, 15:36
  #10
Medlem
Som ett litet exempel som jag använt mig av, egentligen helt meningslöst att skriva men:

Hade en tabell Machine, och fälten MachineID och Revision som både utgjorde primärnyckeln. Mycket användbart.
Citera
2009-10-22, 16:29
  #11
Medlem
Citat:
Ursprungligen postat av Proton
Du har helt rätt, du missförstår mej....

Det stämmer att det endast kan finnas en primärnyckel i en tabell, det är liksom det som är vitsen med en primärnyckel. Dessutom ska du med primärnyckeln kunna identifiera en unik rad.

Nånting helt annat, dvs det jag talar om, är att en primärnyckel inte nödvändigtvis behöver utgöras av ett och endast ett attribut, finns ett flertal tillfällen då endast ett attribut inte räcker för att unikt kunna identifiera en rad.

PN med 2 eller flera attribut i sej kallas en sammansatt primärnyckel. Jag har sett tabeller vars primärnyckel utgörs av inte mindre än 4 attribut. Inget av dessa attribut kan själv peka ut en rad i tabellen, utan alla 4 krävs för att åstadkomma detta.


Tror jag är med i matchen nu. Tack!
Den match jag däremot inte är med i är hur nu detta i praktiken ska fungera med det formulär jag skrev om i första inlägget. Alltså, hur man som besökare ska kunna lägga in en film (Mulholland Dr.) och en regissör (David Lynch) som sedan databasen "kopplar" samman. Än mindre hur man ska undvika att det blir dubbletter av filmerna och regissörerna, men att besökaren ändock kan lägga till fler filmer med David Lynch som regissör?

Lämpar sig inlägget kanske bättre i php-tråden?
Citera
2009-10-22, 16:53
  #12
Moderator
Protons avatar
Nu börjar det gå över åt PHP-programmeringen ja.

Det finns ett antal olika sätt att åstadkomma det du är ute efter. I vilket fall som helst så kommer du behöva joina ihop tabellerna för att ta reda på vilka regissörer som har regisserat vilka filmer.
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