[norm.] Film's database
Ik vroeg mij af of dit een goed genormaliseerde database is:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
+Database: film
+films
-id INT auto_increment
-titel VARCHAR
-jaar INT
-lengte INT
-audio INT
-subs INT
-omschrijving TEXT
-plaatje VARCHAR
+regisseurs
-id INT auto_increment
-regisseur VARCHAR
+genres
-id INT auto_increment
-genre VARCHAR
+acteurs
-id INT auto_increment
-acteur VARCHAR
+kijkwijzers
-id INT auto_increment
-kijkwijzer VARCHAR
-plaatje VARCHAR
+audios
-id INT auto_increment
-audio VARCHAR
+subtitles
-id INT auto_increment
-subtitle VARCHAR
--Koppeltabellen:
+filmregisseurs
-id INT auto_increment
-film INT
-regisseur INT
+filmgenres
-id INT auto_increment
-film INT
-genre INT
+filmacteurs
-id INT auto_increment
-film INT
-acteur INT
+filmkijkwijzers
-id INT auto_increment
-film INT
-kijkwijzer INT
+films
-id INT auto_increment
-titel VARCHAR
-jaar INT
-lengte INT
-audio INT
-subs INT
-omschrijving TEXT
-plaatje VARCHAR
+regisseurs
-id INT auto_increment
-regisseur VARCHAR
+genres
-id INT auto_increment
-genre VARCHAR
+acteurs
-id INT auto_increment
-acteur VARCHAR
+kijkwijzers
-id INT auto_increment
-kijkwijzer VARCHAR
-plaatje VARCHAR
+audios
-id INT auto_increment
-audio VARCHAR
+subtitles
-id INT auto_increment
-subtitle VARCHAR
--Koppeltabellen:
+filmregisseurs
-id INT auto_increment
-film INT
-regisseur INT
+filmgenres
-id INT auto_increment
-film INT
-genre INT
+filmacteurs
-id INT auto_increment
-film INT
-acteur INT
+filmkijkwijzers
-id INT auto_increment
-film INT
-kijkwijzer INT
-audio INT
-subs INT
Je maakt een een-op-een relatie.
Verder ziet het er goed uit.
ps. @ Webmakerij: dat is een meer-op-een relatie. Meerdere films kunnen namelijk bij 1 sub horen. Maar goed, zie mijn commentaar dat ik eerder gaf.
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
Je zou ook het veld regisseur kunnen toevoegen aan de tabel films
regisseur INT
Gewijzigd op 01/01/1970 01:00:00 door Thijs X
Zou ook kunnen. Ligt er aan hoe je de tabel audio en sub gebruikt (in mijn denkspinsel werd het nu gebruikt al verlengde van de films tabel).
@Thijs
Je kan meerdere regisseurs hebben per film.
@Webmakerij: als dat zo is, heb je die tabellen in dit geval niet nodig. In die tabellen staat namelijk alleen maar een id en een audio/sub. Als je te maken hebt met een 1-op-1 relatie, kun je ook gewoon de naam van de audio/sub opslaan in je films tabel ;)
Webmakerij schreef op 26.04.2007 12:16:
@Thijs
Je kan meerdere regisseurs hebben per film.
@Thijs
Je kan meerdere regisseurs hebben per film.
Ah ok dan snap ik het.
Blanche schreef op 26.04.2007 12:19:
@Webmakerij: als dat zo is, heb je die tabellen in dit geval niet nodig. In die tabellen staat namelijk alleen maar een id en een audio/sub. Als je te maken hebt met een 1-op-1 relatie, kun je ook gewoon de naam van de audio/sub opslaan in je films tabel ;)
Ja dat dacht ik dus eerst ook maar je zou het dan bijvoorbeeld zo kunnen doen:
Echter vraag ik me af of dit een voordeel is,
je zou namelijk een extra veld toe kunnen voegen aan films:
- regisseurs TEXT
of iets dergelijks waarin je alle regisseur ID's zet gescheiden met een comma bijvoorbeeld:
1,4,6,7
Gewijzigd op 01/01/1970 01:00:00 door Thijs X
-jaar INT
-lengte INT
Hebben niet per definitie met de film te maken. Dat moet eigenlijk in een koppeltabel
Quote:
Echter vraag ik me af of dit een voordeel is,
je zou namelijk een extra veld toe kunnen voegen aan films:
- regisseurs TEXT
of iets dergelijks waarin je alle regisseur ID's zet gescheiden met een comma bijvoorbeeld:
1,4,6,7
je zou namelijk een extra veld toe kunnen voegen aan films:
- regisseurs TEXT
of iets dergelijks waarin je alle regisseur ID's zet gescheiden met een comma bijvoorbeeld:
1,4,6,7
En op dit moment help je dus je datamodel om zeep! Je gaat nooit en te nimmer meerdere waarden in 1 veld opslaan. Nu moet je namelijk al php gaan gebruiken om te kijken welke regisseurs er bij een bepaalde film horen.
In het geval van de regisseurs heb je zeker een koppeltabel nodig omdat je de maken hebt met een meer-op-meer relatie. Een film kan namelijk meerdere regisseurs hebben en een regisseur kan meerdere films gemaakt hebben.
Mijn opmerking die jij gequote hebt sloeg op een 1-op-1 relatie. Hierbij hoort 1 bepaald gegeven maar bij 1 film en dat kun je dus in de films tabel opslaan. Maar aangezien 1 bepaalde sub bij meerdere films kan horen (e.g. meerdere films kunnen nederlandse subs hebben) heb je in ieder geval te maken met een 1-op-meer relatie.
En als je verder gaat denken zou je zeggen dat een film ook meerdere subs kan hebben dus heb je te maken met een meer-op-meer relatie en dus heb je een koppeltabel nodig. Precies zoals ik in mijn allereerste reactie ook al aangaf. Ditzelfde geldt natuurlijk voor de audiostreams.
waarom maak je geen domain voor genres.. dit is iets waar nooit meer een nieuw iets bij komt.. dat kun je dus in een domain zetten.. scheelt weer een koppeltabel...en een genretabel..
Webmakerij:
Je hebt gelijk. Ik was uitgegaan van dat een film maar 1 audio kan hebben, en maar 1 ondertiteling. Dit verander ik naar een koppeltabel. Dit klopt nog niet:
-audio INT
-subs INT
Je maakt een een-op-een relatie.
-audio INT
-subs INT
Je maakt een een-op-een relatie.
Thijs:
Je zou ook het veld regisseur kunnen toevoegen aan de tabel films
regisseur INT
regisseur INT
Webmakerij:
Inderdaad. @Thijs: Je kan meerdere regisseurs hebben per film.
Klaasjan:
Om elk jaar in een aparte tabel te doen, oké, daar kan ik nog wel mee akkoord gaan. Maar lengte ga je toch niet in een aparte tabel doen? Dat vind ik wel overdreven, maar het is wel logisch inderdaad. Toch is het niet logisch, maar het is wel logisch. Ja ik weet niet hoe ik dit moet zeggen :-P Ik zal er voor de compleetheid ook een koppeltabel van maken. Als je het echt genormaliseerd hebben wil:
-jaar INT
-lengte INT
Hebben niet per definitie met de film te maken. Dat moet eigenlijk in een koppeltabel
-jaar INT
-lengte INT
Hebben niet per definitie met de film te maken. Dat moet eigenlijk in een koppeltabel
Blanche:
Inderdaad. En op dit moment help je dus je datamodel om zeep!
Marvin:
Ik weet niet precies wat een domain is, maar zoals je het vertelt klinkt het mij als een soort ENUM ofzo. Ondanks dat het niet veranderlijk is, houd ik het toch graag veranderlijk. waarom maak je geen domain voor genres.. dit is iets waar nooit meer een nieuw iets bij komt.. dat kun je dus in een domain zetten.. scheelt weer een koppeltabel...en een genretabel..
Wat ik nu dus ga aanpassen:
Audio en sub met een koppeltabel•Jaar en lengte in een aparte tabel, en ook een koppeltabel
Bedankt :-)
Bovendien heb je nog een ander groot nadeel: hoe wil jij bijvoorbeeld makkelijk een select box genereren met alle genres waaruit je kunt kiezen? Als je de genres in een aparte tabel hebt staan is dat een fluitje van een cent.
Een ander groot nadeel is dat je op zo'n moment niet meerdere genres aan een film kunt koppelen. En films hebben vaak meerdere genres waar ze in vallen. Dit zou je evenwel kunnen ondervangen door een SET als datatype te gebruiken, maar het nadeel is dan weer dat je maximaal 64 genres kunt gebruiken.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
+Database: stipnl_film
+films
-id INT auto_increment
-titel VARCHAR
-jaar INT (het id van de desbetreffende rij in de tabel jaren)
-lengte INT (het id van de desbetreffende rij in de tabel lengtes)
-omschrijving TEXT
-plaatje VARCHAR
+regisseurs
-id INT auto_increment
-regisseur VARCHAR
+genres
-id INT auto_increment
-genre VARCHAR
+acteurs
-id INT auto_increment
-acteur VARCHAR
+kijkwijzers
-id INT auto_increment
-kijkwijzer VARCHAR
-plaatje
+audios
-id INT auto_increment
-audio VARCHAR
+subtitles
-id INT auto_increment
-subtitle VARCHAR
+lengtes
-id INT auto_increment
-lengte INT (in minuten dus)
+jaren
-id INT auto_increment
-jaar INT
--Koppeltabellen:
+filmregisseurs
-id INT auto_increment
-film INT
-regisseur INT
+filmgenres
-id INT auto_increment
-film INT
-genre INT
+filmacteurs
-id INT auto_increment
-film INT
-acteur INT
+filmkijkwijzers
-id INT auto_increment
-film INT
-kijkwijzer INT
+filmaudios
-id INT auto_increment
-film INT
-audio INT
+filmsubtitles
-id INT auto_increment
-film INT
-subtitle INT
+films
-id INT auto_increment
-titel VARCHAR
-jaar INT (het id van de desbetreffende rij in de tabel jaren)
-lengte INT (het id van de desbetreffende rij in de tabel lengtes)
-omschrijving TEXT
-plaatje VARCHAR
+regisseurs
-id INT auto_increment
-regisseur VARCHAR
+genres
-id INT auto_increment
-genre VARCHAR
+acteurs
-id INT auto_increment
-acteur VARCHAR
+kijkwijzers
-id INT auto_increment
-kijkwijzer VARCHAR
-plaatje
+audios
-id INT auto_increment
-audio VARCHAR
+subtitles
-id INT auto_increment
-subtitle VARCHAR
+lengtes
-id INT auto_increment
-lengte INT (in minuten dus)
+jaren
-id INT auto_increment
-jaar INT
--Koppeltabellen:
+filmregisseurs
-id INT auto_increment
-film INT
-regisseur INT
+filmgenres
-id INT auto_increment
-film INT
-genre INT
+filmacteurs
-id INT auto_increment
-film INT
-acteur INT
+filmkijkwijzers
-id INT auto_increment
-film INT
-kijkwijzer INT
+filmaudios
-id INT auto_increment
-film INT
-audio INT
+filmsubtitles
-id INT auto_increment
-film INT
-subtitle INT
Ik niet :)
Ik ook niet
dat is inderdaad waar meerdere genres kan,
daar had ik niet aan gedacht ;)..
in het geval van een jaartal 'zou' het toch wel kunnen?
dan check je met dat domain of de input uit min-max 4 cijfers bestaat..
(2004) (1963) etc...
ofniet?
ik probeer altijd zoveel mogelijk door de database te laten doen vandaar..
Een bijkomend nadeel is dan wel weer de behandeling van jaartallen in de toekomst. Wou je die van tevoren ook allemaal al in je ENUM opnemen?
Ik zou de Jaartallenbox gewoon door PHP laten doen, niet via een ENUM in SQL. Met PHP kan je bijvoorbeeld -> Vanaf het jaar van de 1e film, (of de oudste film die in je DB komt) tot aan het jaar waar we nu zitten. Een film uit 2008 kan je nog niet toevoegen, omdat het pas 2007 is. -> Gewoon een selectfieldje voor maken.
Maar goed, ook dat is natuurlijk geen probleem. Je zou je selectbox daar immers gewoon aan kunnen aanpassen.
@Blanche volgens mij bedoelt Robert dat juist. Daarom moet je gewoon een selectbox maken
Quote:
(...) tot aan het jaar waar we nu zitten. Een film uit 2008 kan je nog niet toevoegen, omdat het pas 2007 is.
Daar reageerde ik op. Maar uiteindelijk nog steeds geen probleem ;)