par
iclo » 23 sept. 2006, 22:00
Je vais détailler un peu plus la solution "normalisée" que j'ai proposée plus haut.
Un des principes de base à avoir à l'esprit quand on concoit une base de donnée, c'est d'éviter d'avoir de l'information en double. (redondance) Principalement pour deux raisons:
- Eviter de perdre de l'espace de stockage (ça peut représenter un coût, ou une limite sur un hébergement)
- Problème de cohérence: si on doit modifier l'information, il faut le faire à plusieurs endroit: on peut oublier de faire certaines modifications, ça demande du travail en plus au serveur, bref c'est lourd...
Pour éviter ça, on va décomposer les tables contenant de la redondances en ajoutant une ou des tables.
On va donc avoir une table film et une table acteur. Comme ça chaque donnée sera unique, un enregistrment par acteur et par film (bien-sur dans chaque table on aura un identifiant unique, logiquement un champ autoincrémenté)
Ensuite, il va falloir lié ces deux tables, commençons par analyser le lien entre les deux:
Un film peut avoir été joué par un ou plusieurs acteurs (0 si c'est un dessin animé muet

)
Un acteur peut jouer dans un, plusieurs ou 0 films. (ça dépend de son talent en gros

)
Il va donc falloir une troisième table, qu'on pourrait appeler "joue dans"
qui ne contiendra que deux identifiants : l'identifiant du film et l'identifiant de l'acteur.
Si on a 5 acteurs dans un film, on aura 5 enregistrement dans cette table.
Un petit exemple :
Code : Tout sélectionner
Table film:
id titre
1 Film A
2 Film B
Acteur
id Nom
1 Tom Cruise
2 Donald Duck
Joue dans
idFilm idActeur
1 1
1 2
2 1
Ce qui en français, veut dire que Tom Cruise et Donald Duck, on joué dans le film A, et que seul Tom Cruise a joué dans le film B.
Je sais bien, qu'une telle structure peut paraitre compliqué à mettre en oeuvre pour un débutant en php/mysql, mais il faut résonner à moyen et long terme: Il vaut mieux prendre le temps, de mettre en place une solution correcte, qui permettra de faire à peu près toutes les manipulations possibles (tris, recherche, ajout/ suppressions d'acteurs et de films) dès le début, que de devoir modifier la base de donnée par après, outre le fait de devoir recommencer le boulot, ça pose des problèmes de récupérer les données déja encodées pour passer d'une solution à une autre.
C'est souvent une erreur chez les gens qui débutent de vouloir aller trop vite, et de partir sur de mauvaises bases.
ps: pas très originial mon exemple, suis pas un très grand cinéphile

Je vais détailler un peu plus la solution "normalisée" que j'ai proposée plus haut.
Un des principes de base à avoir à l'esprit quand on concoit une base de donnée, c'est d'éviter d'avoir de l'information en double. (redondance) Principalement pour deux raisons:
- Eviter de perdre de l'espace de stockage (ça peut représenter un coût, ou une limite sur un hébergement)
- Problème de cohérence: si on doit modifier l'information, il faut le faire à plusieurs endroit: on peut oublier de faire certaines modifications, ça demande du travail en plus au serveur, bref c'est lourd...
Pour éviter ça, on va décomposer les tables contenant de la redondances en ajoutant une ou des tables.
On va donc avoir une table film et une table acteur. Comme ça chaque donnée sera unique, un enregistrment par acteur et par film (bien-sur dans chaque table on aura un identifiant unique, logiquement un champ autoincrémenté)
Ensuite, il va falloir lié ces deux tables, commençons par analyser le lien entre les deux:
Un film peut avoir été joué par un ou plusieurs acteurs (0 si c'est un dessin animé muet :D)
Un acteur peut jouer dans un, plusieurs ou 0 films. (ça dépend de son talent en gros :D)
Il va donc falloir une troisième table, qu'on pourrait appeler "joue dans"
qui ne contiendra que deux identifiants : l'identifiant du film et l'identifiant de l'acteur.
Si on a 5 acteurs dans un film, on aura 5 enregistrement dans cette table.
Un petit exemple :
[code]
Table film:
id titre
1 Film A
2 Film B
Acteur
id Nom
1 Tom Cruise
2 Donald Duck
Joue dans
idFilm idActeur
1 1
1 2
2 1
[/code]
Ce qui en français, veut dire que Tom Cruise et Donald Duck, on joué dans le film A, et que seul Tom Cruise a joué dans le film B.
Je sais bien, qu'une telle structure peut paraitre compliqué à mettre en oeuvre pour un débutant en php/mysql, mais il faut résonner à moyen et long terme: Il vaut mieux prendre le temps, de mettre en place une solution correcte, qui permettra de faire à peu près toutes les manipulations possibles (tris, recherche, ajout/ suppressions d'acteurs et de films) dès le début, que de devoir modifier la base de donnée par après, outre le fait de devoir recommencer le boulot, ça pose des problèmes de récupérer les données déja encodées pour passer d'une solution à une autre.
C'est souvent une erreur chez les gens qui débutent de vouloir aller trop vite, et de partir sur de mauvaises bases.
ps: pas très originial mon exemple, suis pas un très grand cinéphile :D :D