Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2743 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  plobeme de "réflexion" pour la structure d'une base de données

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

plobeme de "réflexion" pour la structure d'une base de données

n°1374194
arkentiel
Quoi de neuf ?
Posté le 24-05-2006 à 14:56:45  profilanswer
 

Bonjour,
 
Je suis débutant en création et utilisation de base de donnée et j'ai un probleme de "réflexion" et non pas un probleme technique pour la création de ma base.
 
Je suis en train de créer un site qui permet de créer sa liste perso de films.
Le principe est que l'intenaute (que nous appelerons ici Mr Duppont) parcours le "catalogue" comprenant tous les films et lorsqu'ils tombe sur un film qu'il posséde (exemple matrix) , il clique sur un lien qui indique à la base de donné que Mr Duppont possede Matrix.
 
Pour infos je possede deja 2 tables et j'utilise MySQL :  
1. la table "film" qui comporte plusieurs champs : titre du films, année , duréee, acteurs, resumé ...
2.La table "membres" qui comporte 3 champs : pseudo, mot de passe, et e-mail.

 
Mon probleme est que je ne sais pas quelle "structure" il faut utiliser .
 
J'ai pensé à 2 solutions :  
 
1. soit l'orsque Mr duppont s'insrcrit on créer une table que l'on appelle "liste_perso_Duppont" , et à chaque fois que Mr Duppont ajoute un film à sa liste et bien on ajoute une entrée à la table "liste_perso_Duppont" comprenant le titre du film ajouté.
Cela voudrait dire qu'il faut créer autant de tables que de membres et je ne sait pas si une base de données et limité en nombre de table.
 
2. soit lorsque Mr Duppont ajoute un film à sa liste on indique dans la table "film" au niveau de l'entree "matrix" dans un champs supplémentaire, que monsieur duppont possede ce film.
 
soit on fait autrement mais je ne vois pas ...
 
d'avance merci.


---------------
Mon site...
mood
Publicité
Posté le 24-05-2006 à 14:56:45  profilanswer
 

n°1374204
orafrance
Posté le 24-05-2006 à 15:00:13  profilanswer
 

non, tu crées une table de liaison qui va associé la liste des films aux membres : film_membre (film_id,membre_id)
 
Tu auras donc :
Dupont Matrix
Dupont Matrix 2
Durand Matrix
Martin Matrix2
 
c'est la manière de modéliser une relation N-N ;)

n°1374237
arkentiel
Quoi de neuf ?
Posté le 24-05-2006 à 15:11:02  profilanswer
 

ok, merci pour cette réponse ultra rapide.
Je vais me pencher là dessus , mais effectivement çà à l'air d'être exactement ce dont j'avais besoin.
Merci encore.


---------------
Mon site...
n°1374523
Sve@r
Posté le 24-05-2006 à 18:36:30  profilanswer
 

arkentiel a écrit :

Cela voudrait dire qu'il faut créer autant de tables que de membres et je ne sait pas si une base de données et limité en nombre de table.


 
Une base n'est pas vraiment limité en nb de tables (elle doit accepter sans pb 32767 tables) mais le pb, c'est que tu n'arrives pas encore à faire le distinguo entre

  • l'organisation des données
  • la valeur des données


Une table est faite pour contenir des données de même type. Exemple: la table "acteur" contiendra tous les acteurs de ta base. Et la table "membres" contiendra tous les membres de ta bdd.
Ensuite, le contenu de "acteurs" importe peu dans la conception. Qu'il y ait "Nicolas Cage" ou "Sean Connery" n'entre pas en ligne de compte pour toi.
 
Ensuite, arrive le pb de la redondance et des liens entre les informations. Comment séparer les tables pour réduire la recopie d'infos tout en gardant la cohérence des infos liées entre elles
Exemple: Tu veux stocker tes films, leur genre et l'acteur principal. Tu crées alors une table "films" contenant
- nom du film
- genre du film
- acteur principal
Mais tu vas te retrouver avec un max d'infos redondantes. Exemple, pour "Moonraker" et "Octopussy", tu auras les infos suivantes
Moonraker - Roger Moore - Espionnage
Octopussy - Roger Moore - Espionnage
Tu vois le pb des infos recopiées inutilement; ce pb va se retrouver dès que tu voudras remplacer (pour raison de commodité) le libellé "Roger moore" par "Moore Roger" => tu seras obligé de parcourir toute ta table et modifier "x" lignes.
 
Pour résoudre ce pb, on découpe les tables par rapport aux cardinalités des éléments. Ici, pour un film, tu as un genre et un acteur principal mais pour un genre ou un acteur, tu as "x" films. Donc tu crées 3 tables

  • genre qui contiendra

- libellé
- identifiant
Ex: Espionnage - 1
 

  • acteurs qui contiendra

- nom
- identifiant
Ex: Roger Moore - 1
 

  • films qui contiendra

- titre
- identifiant_acteur
- identifant_genre
Ex:
Octopussy - 1 - 1
Moonraker - 1 - 1
 
Grace au SQL, tu peux aller chercher dans différentes tables les libellés correspondants aux identifiants de chaque film et les afficher quand t'en as besoin.
Ensuite, si tu veux modifier "Roger Moore" en "Moore Roger", tu n'as qu'une seule modif à faire.
 
Ce pb d'organisation de bdd a été développé dans une méthode appelé "Merise". Cette méthode t'aide à identifier les infos et les liens qui vont entre elles pour créer une bdd avec le moins de redondance possible.

Message cité 1 fois
Message édité par Sve@r le 24-05-2006 à 19:03:41

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1374533
0x90
Posté le 24-05-2006 à 19:00:07  profilanswer
 

Sve@r a écrit :

Ce pb d'organisation de bdd a été développé dans une méthode appelé "Merise". Cette méthode t'aide à identifier les infos et les liens qui vont entre elles pour créer une bdd avec le moins de redondance possible


 
Y'a une autre méthode appellée "deux sous de jugeotte" assez efficace aussi ;)


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°1374543
Sve@r
Posté le 24-05-2006 à 19:11:40  profilanswer
 

0x90 a écrit :

Y'a une autre méthode appellée "deux sous de jugeotte" assez efficace aussi ;)


 
Evidemment, avec mes 3 pauvres tables mises à titre d'exemple, Merise ne s'impose vraiment pas. Mais quand on commence à vouloir gérer des trucs comme les impôts, les assédics ou la sécu, il vaut mieux commencer par bien établir les cardinalités des éléments et concevoir une bdd solide parce que "2 sous de jugeotte" ce n'est pas suffisant. Quoi que, quand je vois le bordel de ces 3 organisations, je pense qu'ils n'ont appliqué ni Merise, ni "2 sous de jugeotte". Ptet qu'ils ont essayé la méthode "jetons nos tables au pif et voyons le résultat"... :sol:


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1374625
0x90
Posté le 24-05-2006 à 21:50:51  profilanswer
 

Sve@r a écrit :

Evidemment, avec mes 3 pauvres tables mises à titre d'exemple, Merise ne s'impose vraiment pas. Mais quand on commence à vouloir gérer des trucs comme les impôts, les assédics ou la sécu, il vaut mieux commencer par bien établir les cardinalités des éléments et concevoir une bdd solide parce que "2 sous de jugeotte" ce n'est pas suffisant. Quoi que, quand je vois le bordel de ces 3 organisations, je pense qu'ils n'ont appliqué ni Merise, ni "2 sous de jugeotte". Ptet qu'ils ont essayé la méthode "jetons nos tables au pif et voyons le résultat"... :sol:


 
Ouais pour du gros je veut bien, je parlais du cas présent ;) Encore que de ce que j'ai appris de Merise, j'ose espérer qu'on a trouvé mieux depuis ...


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°1374902
arkentiel
Quoi de neuf ?
Posté le 25-05-2006 à 13:55:45  profilanswer
 

Sve@r  > Merci beaucoup pour ton explication détaillé qui m'a vraiment eclaircit mon esprit...


---------------
Mon site...
n°1375012
Sve@r
Posté le 25-05-2006 à 18:32:54  profilanswer
 

arkentiel a écrit :

Sve@r  > Merci beaucoup pour ton explication détaillé qui m'a vraiment eclaircit mon esprit...


 
Une fois qu'on a les bonnes cardinalités, on crée la base selon les règles suivantes

  • table1 (1,1) <-> table2 (0,n)

Ca veut dire que pour un élément de "table1", on a de 0 à n éléments correspondants à "table2", mais pour un élément de "table2", on n'a qu'un élément de "table1"
On crée "table2" et on y insère l'identifiant de "table1"
Exemple
pour un genre (table1) -> on a plusieurs films (table2)
pour un film(table2) -> on n'a qu'un genre (table1)
On insère dans la table "films" (table2) l'identifiant de "genre" (table1)
Ca donne
[genre]
1 - Action
2 - SF
 
[films]
MI3 - 1
Star Wars - 2
 

  • table1 (0,n) <-> table2 (0,n)

Ca veut dire que pour un élément de "table1", on a de 0 à n éléments correspondants à "table2", et pour un élément de "table2", on a aussi de à à n éléments correspondants à "table1"
On crée une 3° table "table3" et on y insère les identifiants de "table1" et "table2"
Exemple
pour un acteur (table1) -> on a plusieurs films (table2)
pour un film (table2) -> on a plusieurs acteurs (table1)
On crée la table "jouer" (en général, ces tables de liaison portent souvent un nom de verbe) contenant "identifiant film, identifiant acteur"
Ca donne
[Acteur]
1 - Audrey Tautou
2 - Tom hanks
3 - Tom Cruise
 
[Films]
1 - MI3
2 - Da Vinci Code
3 - Top Gun
 
[Jouer (identifiant film, identifiant acteur)]
1 - 3
2 - 1
2 - 2
3 - 3


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1375581
Fiiies1
Jase From Outta Space
Posté le 26-05-2006 à 14:55:31  profilanswer
 

@ Sve@ar : personnellement, tu ne m'apprends rien, mais si les enseignants/intervenants/professionnels pouvaient s'inspirer de tes méthodes d'enseignement (je crois que le mot n'est pas trop fort), bon nombre d'étudiants comprendraient en deux temps trois mouvements ce que ces premiers s'obstinent à expliquer pendant des jours et des jours
...
 
Bref, concernant la Sécu, je suis actuellement en stage chez eux, et l'appli' que je développe m'a nécessité un mois d'analyse. BDD assez importante à vrai dire. ;)

mood
Publicité
Posté le 26-05-2006 à 14:55:31  profilanswer
 

n°1375690
arkentiel
Quoi de neuf ?
Posté le 26-05-2006 à 18:08:37  profilanswer
 

Fiiies1 a écrit :

@ Sve@ar : personnellement, tu ne m'apprends rien, mais si les enseignants/intervenants/professionnels pouvaient s'inspirer de tes méthodes d'enseignement (je crois que le mot n'est pas trop fort), bon nombre d'étudiants comprendraient en deux temps trois mouvements ce que ces premiers s'obstinent à expliquer pendant des jours et des jours
...
 
Bref, concernant la Sécu, je suis actuellement en stage chez eux, et l'appli' que je développe m'a nécessité un mois d'analyse. BDD assez importante à vrai dire. ;)


+1
 
Merci encore Sve@ar de cette explication vraiment ... explicite . :D  
Je n'ais encore eu le temps de l'appliquer à mon site mais si j'ai un probleme je repasserais par ici ... :p  
Bon week-end. :hello:


---------------
Mon site...
n°1375698
Sve@r
Posté le 26-05-2006 à 18:46:35  profilanswer
 

Fiiies1 a écrit :

@ Sve@ar : personnellement, tu ne m'apprends rien, mais si les enseignants/intervenants/professionnels pouvaient s'inspirer de tes méthodes d'enseignement (je crois que le mot n'est pas trop fort), bon nombre d'étudiants comprendraient en deux temps trois mouvements ce que ces premiers s'obstinent à expliquer pendant des jours et des jours

 
:love:  
Euh... j'ai pas tellement de méthode. Et pis la règle décrite ci-dessus est une règle de Merise, pas de moi.
Et pis il y a un monde énorme entre un exemple théorique à 3 balles (non 3 tables) et une analyse complète d'un pb pour créer la bdd correspondante. Je me souviens encore d'exercices sur des sujets comme "gestion vidéo-club" où je me prenais la tête entre les clients à carte, les clients sans carte, les promos du WE et toussa quoi...
 
Mais c'est vrai que j'ai enseigné Unix et C pendant 4 ans et que j'ai adoré faire de l'enseignement (j'enseigne d'ailleurs encore Unix en tant que "vacataire" 3 x 3 jours/an)


Message édité par Sve@r le 26-05-2006 à 18:49:04

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1385773
arkentiel
Quoi de neuf ?
Posté le 12-06-2006 à 13:50:04  profilanswer
 

Bon , j'ai bien compris ce que vous m'avez expliqué et je l'ai appliqué :
 
j'ai donc créer 1 table de liaison entre ma table de films et ma table de membre,
ainsi lorsque le membre ajoute un film à sa liste, un lien se créer dans la table de liaison entre le film et e membre.
 
J'ai un autre soucis  :sweat:  :
 
Je voudrais que les membres puissent ajouter un films eux même à la BDD :
pour cela il devrait remplir un formulaire avec :
 
titre du film
résumé
...
acteurs
 
et c'est là où çà se complique (pour moi) car je voudrais créer (comme çà m'a été coseillé plus haut) une table a part pour les acteurs :
 
ainsi j'aurai 5 tables  :
 
- une table pour les films
- une table pour les membres
- une table pour les acteurs
- une table de liaison entre films et membres
- une table de liaison entre films et acteurs

 
Mon problème et que je ne sais pas comment faire pour que quand un membre veut ajouter un film à la base de données il puisse y associé un (et même plusieurs ) acteur(s).
 
 
quelqu'un aurait il une idée ?  :??:  :??:  
Merci... :)  
 
ensuite quand j'aurais compris le truc je pourrais même créer une table supplémentaire pour chaque genre de film...


---------------
Mon site...
n°1385901
fifiz
Posté le 12-06-2006 à 16:39:16  profilanswer
 

"ensuite quand j'aurais compris le truc je pourrais même créer une table supplémentaire pour chaque genre de film..."
 
Ce qui est dit un peu plus haut c'est que ça n'a pas d'intérêt de faire une table par genre de film.
 
Sauf si il faut y stocker des informations qui varient d'un genre a l'autre et que dans un soucis d'économie de place et de structure d'info tu souhaites que ce soit stocké dans des tables différentes. ex:
 
Qualité des effets spéciaux pour les film de SF.  
Respect des aspect historique pour des film d'Histoire. (probablement toujours à blanc pour les films de SF)

n°1386098
arkentiel
Quoi de neuf ?
Posté le 12-06-2006 à 21:52:46  profilanswer
 

ok...merci de l'info.
 
As tu une idee pour mon probleme ?


---------------
Mon site...

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  plobeme de "réflexion" pour la structure d'une base de données

 

Sujets relatifs
[Access 2003] Fusionner 2 valeurs en SQL lors d'un import de donnéesUtiliser Fmod pour acquérir des données sonores
génération de fichier XML à partir d'une base de données SQL ??Base de donnée
AWK: Probleme avec longueur des noms de fichiers de donnéesStructure de requete compliquée HELP PLEASE
attacher base de donnéesDeux données dans un seul champ d'une table ?
Plus de sujets relatifs à : plobeme de "réflexion" pour la structure d'une base de données


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR