IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Schéma Discussion :

programme de cinéma sur plusieurs semaines [MCD]


Sujet :

Schéma

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut programme de cinéma sur plusieurs semaines
    Bonjour à tous,

    n'en pouvant plus de tourner en rond , je me résigne à demander de l'aide pour avancer un peu dans mon MCD ...

    Avant toute chose, j'avoue sans grande honte que le degré zéro d'avancement dans lequel je me trouve est certainement du à ma perfectionnite aigü, couplée à mon manque d'expérience (voir à mon faible QI, mais n'anticipons-pas : je vous prierais d'attendre quelques messages avant de confirmer ce dernier point ).

    Précisions importantes : ceci n'est pas un exercice à rendre pour dans trois jours... mais juste un modèle que j'aimerais réussir à concevoir "du mieux que je peux" à titre perso et en tant que... loisir. On s'amuse comme on peut .

    D'autre part, j'ai fait une recherche sur le forum sans trouver un réel espoir d'avenir meilleur , si ce n'est de me rendre compte que le mot débutant est peut-être encore un peu trop fort pour moi .

    Mais je suis peut-être un cas particulier : car mon soucis, finalement, est peut-être plus lié à la compréhension du français qu'à un problème d'analyse.

    Je m'explique : après voir lu quasiment tout le PDF de Cyril Gruau sur la Conception d'une base de donnée, ainsi que toute la partie du livre Parlez-vous Merise de Michel Divine consacré au MCD, je me retrouve dès le début de la conception, coincé entre plusieurs options et en ayant l'impression qu'aucune d'elle ne correspond à la bonne solution. Alors ou bien j'ai beaucoup lu (les PDF pré-cités) sans rien capter , ou bien je n'arrive pas à "transposer" les exemples de ces PDF dans mon cas de figure (ce qui me parait être le coeur du problème... et accessoirement confirmer mon petit QI ).

    Bien, assez de blabla et passons aux données du problème (j'omets volontairement quelques infos pour faire plus simple ) :
    • Un cinéma exploite des films.
    • Le cinéma édite un programme sur plusieurs semaines (nombre de semaines variables) et contenant donc plusieurs films.
    • Un film est diffusé au minimum pendant une semaine cinématographique (du mercredi au mardi).
    • Un programme (sur deux semaines par ex.) peut donc très bien contenir un film qui ne sera diffusé que pendant une partie de ce programme (la 1ere semaine par exemple).
    • Un programme contient des informations propres (ex : édito).
    • Un programme met toujours un film particulier en valeur.
    Bon ensuite ça se complique pas mal avec des histoires de festivals, d'évènements, etc, mais je ne vais pas plus loin, car déjà à ce stade, croyez-le ou non, je suis largué .

    Evidement, en lisant les données précédentes, je me suis dit :
    1. FILMS(film_id, film_titre, film_duree, etc)
    2. PROGRAMMES(programme_id, programme_edito, etc)
    Pour la suite, rien ne me convaincs vraiment :
    • J'aurais tendance à créer une association "Films(1,N)-APPARTENIR-(1,N)Programmes".
    • Mais après... est-ce qu'il faut simplement deux attributs "Semaine_num" et "Année" à cette association APPARTENIR ?
    • Ou bien est-ce qu'il me faut plutôt transformer l'association en "Entité" SEMAINES(semaine_id, annee) ?
    • Et dans ce cas, je devrais certainement créer une association sans attribut entre FILMS et SEMAINES, et une association sans attribut entre SEMAINES et PROGRAMMES.
    • En fait je pense être paumé à cause des dates que je n'arrive pas à intégrer sans réticence. D'où la remarque concernant un manque de compréhension du français. Pour moi, l'idéal serait que j'arrive à utiliser une phrase simple pour tester des cas de figure. Un peu comme avec les cardinalités que l'on détermine en disant "Est-ce que un(e) {ENTITE} peut {ACTION} plusieurs {AUTRE ENTITE}". Ca me permettrait de déterminer (facilement ?) si oui ou non un attribut "Date" est bien placé, ou si une association avec un attribut "Date" ne devrait pas se transformer en Entité, etc).
    • Une autre interrogation se présente pour le film qui est mis en valeur dans un programme : est-ce que je peux créer par exemple une "Entité" du genre FOCUS(focus_id, focus_titre, focus_texte) qui serait lié à la fois à FILMS et à PROGRAMMES ?
    Bon, comme vous le voyez, c'est pas gagné ...

    En tout cas, ce qui est sûr, c'est que dès que je veux normaliser le modèle, je n'ai plus aucune certitude sur ce j'ai sous les yeux .

    Du coup j'ai voulu changer de méthode et plutôt commencer par écrire les dépendances fonctionnelles (décrites dans le PDF de Cyril Grua) et créer le "graphe de couverture minimale". Malheureusement ça ne résoud pas le problème. Parce que j'ai toujours en tête les futures tables et requêtes SQL du genre :
    • avec un film_id, je dois être capable de sortir tous les programmes dans lequel ce film a joué.
    • Où bien je dois pouvoir connaître les semaines où il a été projeté.
    • Où bien encore, s'il a été mis en valeur dans un programme, je peux retrouver le texte correspondant.
    Or je crois que je mélange ça avec des DF ...

    Finalement pour construire ce MCD, j'ai l'impression d'être "déconcentrer" par la base de données qui en résultera : car évidemment, une fois le MCD terminé, je souhaite générer automatiquement ou créer manuellement cette base. Et le comble du paradoxe, c'est parce que j'avais du mal à créer cette base directement (tu m'étonnes ) que je me suis décidé à commencer par un MCD . J'abandonne ?



    Si nécessaire, je peux fournir un début d'MCD et un début de "graphe de couverture minimale", mais bon ça ne servira pas à grand-chose. Je préférerais que l'un d'entre vous m'explique calmement pourquoi mettre telle association plutôt qu'une autre, ou telle entité sous forme d'association, etc...

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Ca c'est un sujet pour moi !

    Citation Envoyé par mullinski Voir le message
    • Le cinéma édite un programme sur plusieurs semaines (nombre de semaines variables) et contenant donc plusieurs films.
    • Un film est diffusé au minimum pendant une semaine cinématographique (du mercredi au mardi).
    • Un programme (sur deux semaines par ex.) peut donc très bien contenir un film qui ne sera diffusé que pendant une partie de ce programme (la 1ere semaine par exemple).
    1ère solution : Faire une entité Semaine et une entité Programme et faire les associations :
    Film -0,n----Programmer----1,n- Semaine -1,1----Inclure----1,n- Programme

    2ème solution : Donner des attributs DateDebut et DateFin aux entités Film et Programme. Il sera ainsi possible de trouver les films à publier dans un programme. Mais plusieurs discussions sur les forums montrent que les opérations sur les périodes calendaires ne sont pas toujours simples.
    • Un programme contient des informations propres (ex : édito).
    • Un programme met toujours un film particulier en valeur.
    Ce sont donc des attributs de l'entité Programme.

    Évidemment, en lisant les données précédentes, je me suis dit :
    1. FILMS(film_id, film_titre, film_duree, etc)
    2. PROGRAMMES(programme_id, programme_edito, etc)

    Pour la suite, rien ne me convainc vraiment : [*]J'aurais tendance à créer une association
    • "Films(1,N)-APPARTENIR-(1,N)Programmes".
    • Mais après... est-ce qu'il faut simplement deux attributs "Semaine_num" et "Année" à cette association APPARTENIR ?[
    • Ou bien est-ce qu'il me faut plutôt transformer l'association en "Entité" SEMAINES(semaine_id, annee) ?
    • Et dans ce cas, je devrais certainement créer une association sans attribut entre FILMS et SEMAINES, et une association sans attribut entre SEMAINES et PROGRAMMES.
    Jusque là on est à peu près d'accord. Voir ma réponse ci-dessus. Personnellement, je ne mets pas le nom de la table en entier dans le nom de colonne mais seulement l'initiale ou un groupe de lettres en guise de moyen mnémotechnique. C'est plus court à écrire dans les requêtes ensuite.

    [*]En fait je pense être paumé à cause des dates que je n'arrive pas à intégrer sans réticence. D'où la remarque concernant un manque de compréhension du français. Pour moi, l'idéal serait que j'arrive à utiliser une phrase simple pour tester des cas de figure. Un peu comme avec les cardinalités que l'on détermine en disant "Est-ce que un(e) {ENTITE} peut {ACTION} plusieurs {AUTRE ENTITE}". Ca me permettrait de déterminer (facilement ?) si oui ou non un attribut "Date" est bien placé, ou si une association avec un attribut "Date" ne devrait pas se transformer en Entité, etc). [*]Une autre interrogation se présente pour le film qui est mis en valeur dans un programme : est-ce que je peux créer par exemple une "Entité" du genre FOCUS(focus_id, focus_titre, focus_texte) qui serait lié à la fois à FILMS et à PROGRAMMES ? [/list]
    Bon, comme vous le voyez, c'est pas gagné ...
    Bon alors écrivons les règles de gestion avec des phrases simples en français...

    1) Un film est programmé une à plusieurs semaines et une semaine programme un à plusieurs films
    MCD : Film -0,n----Programmer----1,n- Semaine
    Tables :
    Films(F_Id, F_Titre, ...)
    Semaines(S_Id, S_DateDebut, S_DateFin) Films_Semaines(FS_IdFilm, FS_IdSemaine)

    2) Un programme inclut de une à plusieurs semaines et une semaine est incluse dans un seul programme.
    MCD : Semaine -1,1----Inclure----1,n- Programme
    Tables :
    Programmes(P_Id, P_Edito, ...)
    Semaines(S_Id, S_DateDebut, S_DateFin, S_IdProgramme)

    3) Un programme met en valeur un film et un film peut être mis en valeur dans un programme
    MCD : Programme -1,1----Valoriser----0,1- Film
    Tables :
    Programmes(P_Id, P_Edito, P_IdFilmValorise...)

    C'est plus clair ?

    Courage pour la suite !

    PS : C'est un cas réel pour un cinéma ? Lequel ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Merci Cinephil pour le coup de main. Ton nom de pseudo y est surement pour quelque chose .

    Bon quelque part, ça me rassure : mon MCD actuel inclus les mêmes entités et associations que celles que tu me proposes . En ce qui concerne les cardinalités, en revanche ...

    Désolé d'y aller doucement, mais j'ai envie de bien maitrisé ce que je fais :
    Citation Envoyé par CinePhil Voir le message
    Bon alors écrivons les règles de gestion avec des phrases simples en français...

    1) Un film est programmé une à plusieurs semaines et une semaine programme un à plusieurs films
    MCD : Film -0,n----Programmer----1,n- Semaine
    Tables :
    Films(F_Id, F_Titre, ...)
    Semaines(S_Id, S_DateDebut, S_DateFin) Films_Semaines(FS_IdFilm, FS_IdSemaine)
    Pourquoi si "un film est programmé une à plusieurs semaines", la cardinalité minimale entre l'entité Film et l'association Programmer est à 0 (1 semblerait plus juste) ?
    C'est une erreur d'écriture ?
    1. Il fallait lire "un film peut ne jamais être programmé (cardinalité minimale : 0) ou bien être programmé une ou plusieurs semaines (cardinalité maximale : N) ?
    2. Ou bien il fallait lire "MCD : Film -1,n----Programmer----1,n- Semaine" ?
    Je parierai plutôt sur la 1ère réponse : un film, à un moment donné, peut ne jamais avoir été programmé. Auquel cas je comprends pourquoi cette cardinalité minimale est à 0 .

    Finalement cet exemple illustre bien ma difficulté qui consiste à mélanger MCD et BDD/SQL : je sais que dans l'absolu, un film sera toujours programmé au minimum une semaine, mais en même temps je sais aussi que dans la BDD, en pratique, on créera d'abord plusieurs entrées (lignes) film dans une table Films puis ultérieurement on créera une entrée dans la table Film_Semaine dans laquelle sera indiqué l'id des films précédement créé et l'id des semaines pendant lesquels ils sont programmés.

    Donc au final, la cardinalité minimale entre Films et Programmer doit être à 0... parce qu'au moment ou l'on crée le MCD, il faut avoir en tête qu'un film, à un instant t, peut ne jamais avoir été programmé, simplement parce qu'il a été saisis pour une programmation à venir . J'ai bon ou je mélange tout ?

    PS : Oui c'est un cas réel. Et si j'arrive à m'en sortir, c'est promis, je donnes le nom du cinéma .

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    En gros tu as donné toi-même la réponse à ta question.

    J'imagine très bien le directeur du cinéma choisir les films qu'il va programmer plus tard mais il ne sait pas encore quand. Notamment pour les festivals... ton prochain problème non ?

    De plus, même si ça retire parfois de la rigueur dans le MCD, l'implémentation d'une association avec deux cardinalités minimales à 1 est plus complexe que quand il y a au moins un zéro.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Merci CinePhil d'avoir confirmer mon analyse .
    Maitenant, imaginons un tutoriel pour trouver les cardinalités du couple entité-assocation Films-?,?-(Programmer)-?,?-Semaines, ça resemblerait à ça :

    1) Films-?,?-(Programmer)

    1.1) Cardinalité minimale :
    • Est-ce qu'un film peut ne jamais avoir été programmé ? Oui car un film peut être stocké dans la base sans pour autant avoir été déjà lié à une semaine (voir message précédent ).
    • Films-0,?-(Programmer)-?,?-Semaines

    1.2) Cardinalité maximale :
    • Est-ce qu'un film peut être programmé pendant plusieurs semaines ? Oui.
    • Films-0,N-(Programmer)-?,?-Semaines

    2) (Programmer)-?,?-Semaines

    2.1) Cardinalité minimale :
    • Est-ce qu'une semaine contient au minimum un film ? En règle générale, oui... mais que se passe-t'il en cas de fermeture temporaire ? Imaginons que le cinéma ferme pendant le mois de juillet. Est-ce qu'il faut considérer que les semaines correspondantes ne seront pas saisies dans la BDD ? Ne serait-il pas plus juste/logique de considérer ces semaines comme existantes mais sans film ? Ce qui permettrait de tenir compte de ces semaines pour... des stats éventuelles ? Pour pouvoir afficher, par exemple, le nombre de films joués par semaine réelles. Bon j'exagère peut-être mais l'idée ne me parait pas ridicule . Je pourrais même imaginé que l'entité Semaines ait un attribut de type boolean "Cinéma ouvert". En même temps, si une semaine n'est lié à aucun film, ça signifit que le cinéma est fermé, donc cet attribut serait à priori inutile. Quoi qu'il en soit, la cardinalité minimale est 0.
    • (Programmer)-0,?-Semaines

    2.2) Cardinalité maximale :
    • Est-ce qu'une semaine peut contenir plusieurs films ? Oui.
    • (programmer)-0,N-Semaines

    Au final on obtient le couple entité-relation Films-0,N-(Programmer)-0,N-Semaines.

    D'accord avec moi ? Les bases sont bonnes ? Je peux donc passer à la suite sans risquer de me tromper ? En espérant ne pas avoir à vous demander de l'aide avant plusieurs jours ...

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Le raisonnement est juste.

    J'ajouterais que si cette base est étendue à la gestion du cinéma, la cardinalité mini à zéro du côté Semaine peut se justifier aussi par le fait que, si ça n'a pas changé depuis que je ne suis plus exploitant, le cinéma doit, je crois me souvenir, quand même émettre un bordereau de recette pour le CNC même si le cinéma est fermé temporairement.

    Pour compléter ton mini tutoriel, le dernier prof du CNAM qui nous a pas mal parlé de Merise disait, pour trouver les cardinalités d'une association : "arrêtez-vous à la patate !"

    Un film peut être programmé combien (sous-entendu 'de semaines') ?
    Une semaine peut programmer combien (sous entendu 'de films') ?

    C'est un exercice plus difficile avec des associations concernant plus de deux entités.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Valoriser un film
    Poursuivons le raisonnement et attaquons-nous à la valorisation d'un film dans le programme :

    En règle générale, le principe est simple : un programme met en valeur un film, soit la relation : Programmes-1,1-(Valoriser)-0,1-Films

    Mais comme je suis méfiant , je me dis qu'il arrivera bien un jour où l'on décidera que pour une raison quelconque tel programme ne mettra en valeur aucun film alors que tel autre programme mettra en valeur deux films ...

    Donc pour éviter d'être bloqué si ce cas de figure se présente dans le futur, je penche plutôt pour une relation : Programmes-0,N-(Valoriser)-0,N-Films

    Reste une précision importante à gérer : "la mise en valeur d'un film dans un programme" se concrétise par un texte spécifique à inclure dans ce programme d'où ma question :
    • Est-ce que je rajoute simplement une propriété "Val_texte" à la relation Valoriser ?
    • Ou bien je crée une entité "Focus" contenant la propriété "Focus_Texte" et reliée avec les autres entités de la façon suivante :
      Programmes-0,N-(Contenir)-1,1-Focus-1,1-(Valoriser)-0,N-Films
      C'est-à-dire :
      • Un programme peut contenir aucun ou plusieurs focus
      • Un focus peut être contenu dans un seul programme
      • Un focus valorise toujours un seul film
      • Un film peut ne jamais avoir été valorisé ou peut-être valoriser plusieurs fois. A la rigeur je pourrai mettre cette dernière cardinalité à 0,1 car il y a peu de chance qu'un film soit plusieurs fois mis en valeur, mais on ne sait jamais : soyons prudent .
    Qu'en pensez-vous ?

  8. #8
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Je ne vois pas l'intérêt de l'entité Focus. On peut se contenter de l'attribut dans l'association à mon avis.

    De toute façon, comme c'est une association n,m, ça engendrera la création d'une table que vous pourrez appeler Focus si ça vous chante mais dans le MCD je ne laisserais qu'une association porteuse de donnée.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Merci de ta remarque CinePhil . Tu as tout à fait raison .
    Citation Envoyé par CinePhil Voir le message
    De toute façon, comme c'est une association n,m, ça engendrera la création d'une table que vous pourrez appeler Focus si ça vous chante mais dans le MCD je ne laisserais qu'une association porteuse de donnée.
    Encore une fois, ça illustre bien ma difficulté à penser uniquement "MCD". Sans doute à cause de mon expérience en BDD, j'ai toujours tendance à visualiser la BDD en travaillant le MCD .
    Finalement je devrais peut-être directement travailler le MLD ?

    Mais pour répondre à cette question, je dois préciser mes motivations :
    • L'objectif final recherché est la création d'un site internet pour ce cinéma.
    • Pour qu'il n'y pas tout à créer, l'idéal serait d'utiliser un Système de Gestion de Contenu (Wordpress, Dotclear, Joomla) basé sur une BDD.
    • Le problème, c'est que ces CMS ne sont pas forcément adapté à la communication d'un cinéma. J'ai testé Wordpress qui offre pas mal de possibilités et qui surtout est très ouvert et bien fourni en documentation. Mais en réfléchissant aux différentes catégories à créer et à leur limitations, je me suis vite rendu compte que penser en amont aux besoins serait plus judicieux. Ce qui explique ma présence dans un forum sur la création de MCD .
    • J'envisage donc comme solution de trouver un CMS ou un moteur de blog exploitant une BDD la plus proche de celle que j'obtiendrais à partir de mon MCD puis de l'adapter (via du PHP et des API si nécessaire) pour qu'il réponde à mes attentes.
    Bon évident, vu que je débute en PHP, ça va me prendre des années m'enfin j'aime bien m'amuser.

    Passons...

    Gestion des horaires :

    Au début, je ne comptais pas tenir compte des horaires de séances des films. Mais finalement, en y réfléchissant, je me dis que ce serait utile de pouvoir savoir quels sont les films qui passent, pour un jour donné (imaginons que le site internet soit capable d'afficher les films du jour en page d'accueil ) . Donc en BDD, ça donnerait un truc comme ça :

    Table Horaires (Film_id,date,seance,salle_id)

    Exemple :
    Film_id | date | seance | salle_id
    film 1 | 16/01/09 | 14h | 1
    film 1 | 16/01/09 | 16h | 1
    film 1 | 16/01/09 | 18h | 2
    film 1 | 17/01/09 | 14h | 1
    film 2...

    Maintenant en MCD, ça ressemblerait à quoi sachant que :
    • A une date et un horaire donné, un film ne peut être projeter que dans une seule salle.
    • A une date et un horaire donné, une salle ne peut projeter qu'un seul film.

    Films--(Projeter)--Salles

    Avec date et séance comme attributs de projeter, comment je dois exprimer les cardinalités avec la méthode PATATE ?
    • Un fillm peut être projeté dans combien de salles : ben plusieurs...mais pas en même temps...
    • Une salle peut projeter combien de films : idem
    Dois-je me mettre à la rétro-conception ?


  10. #10
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut Symétrie, rétroconception, AGL et Cie
    Bonsoir,


    Citation Envoyé par mullinski Voir le message
    A une date et un horaire donné, un film ne peut être projeter que dans une seule salle.
    A une date et un horaire donné, une salle ne peut projeter qu'un seul film.
    Considérons donc les deux contraintes :
    (C1) A une date et un horaire donné, un film ne peut être projeté que dans une seule salle.
    (C2) A une date et un horaire donné, une salle ne peut projeter qu'un seul film.
    Abrégeons ainsi les noms :
    F pour film
    S pour salle
    D pour Date (de projection)
    H pour horaire (de projection)
    Du point de vue du Modèle Relationnel de Données l’expression des contraintes ne pose aucun problème.
    (C1) et (C2) donnent respectivement lieu aux DF (dépendances fonctionnelles) suivantes (parmi d’autres) :
    (DF1) : {F, D, H} → {S}
    (DF2) : {S, D, H} → {F}
    N.B. L’utilisation des accolades signifie que les DF mettent en jeu non pas des attributs, mais des ensembles d’attributs.

    Soit T la table dont l’en-tête est composée des attributs S, F, D, H.
    Selon le Modèle Relationnel de Données, je devrais utiliser le terme variable relationnelle (relvar), plutôt que celui de table, mais il est inutile d’exposer ici ce qui les différencie.

    T fait l’objet de la déclaration suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    VAR T {S INT, F INT, D DATE, H TIME}
        KEY {F, D, H}
        KEY {S, D, H}
        FOREIGN KEY {F} REFERENCES FILM
        FOREIGN KEY {S} REFERENCES SALLE ;
    Selon le modèle SQL, la déclaration devient la suivante :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CREATE TABLE T {S INT, F INT, D DATE, H TIME}
        PRIMARY KEY {F, D, H}
        UNIQUE {S, D, H}
        FOREIGN KEY {F} REFERENCES FILM
        FOREIGN KEY {S} REFERENCES SALLE ;
    Vous noterez que cette deuxième déclaration met en évidence un problème de symétrie qui n’existe pas dans la première déclaration. En effet, alors que le Modèle Relationnel de Données ne propose pas de privilégier une clé par rapport à une autre, le modèle SQL vous y oblige : une des deux clés {F, D, H} ou {S, D, H} est nécessairement clé primaire, {F, D, H} dans l’exemple, tandis que l’autre est clé est dite alternative, en l'occurrence {S, D, H}. Évidemment, les rôles auraient pu être inversés, et mon choix a été purement subjectif.

    Avec Power AMC, on peut par exemple définir le MLD (SQL) correspondant suivant (dans lequel j’ai remplacé le nom de la table T par Projection) :




    Dans cette représentation graphique, <pk> est l’abréviation de <primary key>, <ak> celle de <alternate key> (équivalent de la clause UNIQUE de SQL) et <fk> l’abréviation de <foreign key>.
    Ainsi, dans la représentation, la table Projection a les propriétés suivantes :
    Clé primaire : {FilmId, DateProj, HoraireProj}
    Clé alternative : {SalleId, DateProj, HoraireProj}
    Clé étrangère 1 : {FilmId}
    Clé étrangère 2 : {SalleId}.
    Tout va bien. Maintenant, les choses se compliquent si l’on veut procéder à la rétroconception du MLD en MCD. En effet, par propagation de l’effet d’asymétrie, l’AGL fournit la représentation graphique suivante :



    Représentation dans laquelle, la cardinalité 1,1 mise entre parenthèses, traduit l’identification relative (cf. la patte connectant Projection et PF). L’entité-type Projection est identifiée relativement à l’entité-type Film, ce qui fait que l’identifiant de celle-ci participe implicitement à l’identifiant de celle-là. Maintenant, il y a une mauvaise nouvelle : l’attribut SalleId apparaît à la fois dans les entités-types Salle et Projection, mais le comportement de l’AGL est parfaitement justifié. Cela est dû au fait, à ma connaissance, que selon l’approche Entité/Relation (Merise en particulier), il n’a pas été prévu de pouvoir signifier que l’identifiant d’une l’entité-type (Salle en l’occurrence) participe à un identifiant alternatif d’une autre l’entité-type (Projection dans cet exemple). Ainsi, on est coincé quant aux processus de dérivation/rétroconception, la redondance inhérente fait que le résultat ci-dessus est incorrect, puisque lors de la dérivation, la table Projection comportera deux attributs SalleId : il faudra intervenir manuellement pour parvenir à une situation correcte.

    Maintenant, changeons d’AGL. Win’Design est peut-être capable de produire un résultat correct dans le cas de la rétroconception, je n’en sais rien. En revanche, du point de vue de la dérivation, il s’en sort sans problème si l’on transforme l’entité-type Projection en une association-type (appelons-la Projeter) et si l’on utilise des CIF (contraintes d’intégrité fonctionnelle) pour en arriver à une modélisation du genre (qui font les yeux se croiser...) :



    CIF1 se comporte comme une DF : le triplet Film, Date, Horaire joue le rôle de déterminant (source) et Salle celui de dépendant (cible).
    CIF2 se comporte comme une DF : le triplet Salle, Date, Horaire joue le rôle de déterminant (source) et Film celui de dépendant (cible).

    Le lien figurant entre l’association-type Projeter et une CIF est représenté en pointillés, et explicite ce qu’on appelle le pivot, liste des entités-types composant la source de la CIF. Je vous renvoie à la FAQ Merise.

    En principe, le résultat de la dérivation devrait être le MLD décrit ci-dessus.


    Citation Envoyé par mullinski Voir le message
    Finalement pour construire ce MCD, j'ai l'impression d'être "déconcentrer" par la base de données qui en résultera : car évidemment, une fois le MCD terminé, je souhaite générer automatiquement ou créer manuellement cette base. Et le comble du paradoxe, c'est parce que j'avais du mal à créer cette base directement (tu m'étonnes) que je me suis décidé à commencer par un MCD. J'abandonne ?
    La construction d’un MCD relève d’une approche synthétique, descendante, tandis que celle d’un MLD relève d’une approche analytique, ascendante. Pour s’en sortir, il est préférable de pratiquer simultanément les deux approches, descendre, remonter, redescendre, etc., autrement dit faire du yoyo. J’ai vu bien des projets partir à la poubelle, ou à rafistoler au niveau MLD parce qu’en amont on s’était contenté de synthétiser, sans validation analytique. Et ça en a fait des sous dilapidés. Évidemment, l’approche synthétique est plus tentante, parce que l’on s’occupe de sémantique, alors que l’approche analytique est plus austère, aride, mathématique, sans que l’on ait à s’intéresser au «métier» (la vie des cinémas par exemple). Il faut s’entraîner à la double approche.

    Quant aux goûts de chacun, tendance sémantique ou mathématique, c’est un peu comme en programmation. Certains ne jurent que par l’approche récursive, d’autres par l’approche impérative, Là encore, l’idéal est d’être à l’aise dans les deux styles.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2013] Programme de recherche sur plusieurs critères
    Par romain19 dans le forum Access
    Réponses: 1
    Dernier message: 22/04/2015, 04h54
  2. Programmation Concurente sur plusieurs coeurs
    Par Beginer dans le forum Windows
    Réponses: 4
    Dernier message: 25/01/2010, 18h50
  3. [C++ Builder] Programme sur plusieur Unit
    Par Fabien50 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/06/2009, 13h16
  4. Exécuter un programme java sur plusieurs machine
    Par sinfos dans le forum Langage
    Réponses: 4
    Dernier message: 23/09/2008, 11h14
  5. recuperer les n° de semaine sur plusieurs années
    Par meredith dans le forum Langage SQL
    Réponses: 1
    Dernier message: 27/11/2007, 09h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo