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 :

Gestion de la programmation d'une salle de cinéma


Sujet :

Schéma

  1. #1
    Membre à l'essai
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Août 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Août 2012
    Messages : 8
    Points : 10
    Points
    10
    Par défaut Gestion de la programmation d'une salle de cinéma
    J'ai un problème de conception de mon modèle : Imaginez la base qui permettra de gérer au quotidien la programmation d'une salle de cinéma. J'ai créé une table référençant tous les titres films et leurs attributs (Metteur en scène, genre, durée, semaine de diffusion, etc.. ainsi que 3 champs Acteur1, Acteur2, Acteur3 . Je souhaiterais mettre ceux-ci en relation avec une table acteurs qui décrit chacun d'eux.
    Je ne parviens pas à modéliser ce schéma qui ferait correspondre chacun des 3 champs acteurs individuellement avec la table du même nom !
    Comment s'appelle une telle relation ? Devrai-je passer par une table intermédiaire ? mais sous quelle forme ?
    Merci de votre aide

    En PJ le mcd actuel complet
    mcd.pdf

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 084
    Points : 38 377
    Points
    38 377
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Renseignez vous sur les règles et notamment sur les formes normales. Ce que vous proposez avec 3 colonnes (les champs sont des attributs d'un formulaire et non d'une base de données), est une hérésie. Il faut une seule colonne acteur, et multiplier autant de fois les lignes qu'il y a d'acteurs dans le film. Si vous modélisez 3 colonnes, vous avez 2 colonnes inutiles pour les cas (sans doute rares) ou le film n'est joué que par un seul acteur, et il vous manque plein d'acteurs pour les films qui en ont plus de 3 !

    Bref, avant de modéliser, documentez vous sur les fondamentaux, vous trouverez de l'aide ici :
    http://www.developpez.net/forums/d34...ls-f-q-merise/

    Il y a des documents gratuits que vous pourrez télécharger

    Bonne lecture

  3. #3
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 695
    Points
    10 695
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    J'ai un peu de mal à cerner le problème. Il s'agit de faire avec la table Acteurs exactement la même chose que pour la table Réalisateurs. Le fait qu'il y a 3 colonnes pointant sur la même table n'est absoluement pas un soucis.

    Maintenant, le problème que je relève est plus au niveau de la table Films, où au lieu d'avoir 3 colonnes ActeurX, je n'aurais aucune colonne, mais une table supplémentaire, faisant la correspondance entre un film et un acteur. Ainsi:
    • il sera plus facile de faire des recherches du style, quels sont les films dans lequel à jouer tel acteur ;
    • cela fera sauté la limité des 3 acteurs. Tu pourras en spécifier autant que tu le souhaites.
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 736
    Points : 52 448
    Points
    52 448
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par clrenaud Voir le message
    J'ai un problème de conception de mon modèle : Imaginez la base qui permettra de gérer au quotidien la programmation d'une salle de cinéma. J'ai créé une table référençant tous les titres films et leurs attributs (Metteur en scène, genre, durée, semaine de diffusion, etc.. ainsi que 3 champs Acteur1, Acteur2, Acteur3 . Je souhaiterais mettre ceux-ci en relation avec une table acteurs qui décrit chacun d'eux.
    Je ne parviens pas à modéliser ce schéma qui ferait correspondre chacun des 3 champs acteurs individuellement avec la table du même nom !
    Comment s'appelle une telle relation ? Devrai-je passer par une table intermédiaire ? mais sous quelle forme ?
    Merci de votre aide

    En PJ le mcd actuel complet
    mcd.pdf
    Vous commettez une erreur gravissime de modélisation en violant la première forme normale : pas de répétition !

    Voici un modèle classique pour ce cas de figure :

    Nom : MCD film acteur.jpg
Affichages : 3329
Taille : 50,6 Ko

    L'entité fonction recense toutes les fonctions dans un film : acteur, réalisateur, scénariste, dialoguiste...
    Comme ceci, une même personne peut être acteur et réalisateur et plusieurs acteurs peuvent être présentes pour le même film.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 084
    Points : 38 377
    Points
    38 377
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par dorinf Voir le message
    Bonjour,

    Maintenant, le problème que je relève est plus au niveau de la table Films, où au lieu d'avoir 3 colonnes ActeurX, je n'aurais aucune colonne, mais une table supplémentaire, faisant la correspondance entre un film et un acteur. Ainsi:
    • il sera plus facile de faire des recherches du style, quels sont les films dans lequel à jouer tel acteur ;
    • cela fera sauté la limité des 3 acteurs. Tu pourras en spécifier autant que tu le souhaites.
    C'est exactement ce que j'indiquai
    Le renvoi vers les règles de modélisation est justement fait pour éviter la modélisation "à plat" caractérisée par l'attribut acteur positionné à tort et répété encore à tort dans l'entité-type film

  6. #6
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 695
    Points
    10 695
    Billets dans le blog
    21
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    C'est exactement ce que j'indiquai
    Quand j'ai commencé mon message, tu n'avais pas encore répondu J'ai mis du temps à l'écrire car M. Téléphone a sonné !

    Et la remarque de SQLPro est des plus pertinentes aussi : un réalisateur peut être acteur et vice-versa. Tellement obnubilé par les 3 acteurs que je ne l'ai pas vu. On va mettre ça sur le dos du coup de fil qui m'a dérangé
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 736
    Points : 52 448
    Points
    52 448
    Billets dans le blog
    5
    Par défaut
    Pour compléter, voici le MPD, le script de création des tables, un jeu de test et la requête finale...

    1) le MPD pour MS SQL Server :
    Nom : MPD film acteur.jpg
Affichages : 2261
Taille : 44,8 Ko

    2) le script de création de la base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    CREATE DATABASE DB_FILMS
    GO
    
    USE DB_FILMS
    GO
    
    
    /*==============================================================*/
    /* Table : T_E_FILM_FLM                                         */
    /*==============================================================*/
    create table T_E_FILM_FLM (
       FLM_ID               int                  identity,
       FLM_TITRE_ORIGINAL   varchar(250)         null,
       FLM_TITRE_FRANCAIS   varchar(250)         not null,
       FLM_ANNEE            smallint             null,
       FLM_DUREE_MINUTE     smallint             null,
       constraint PK_T_E_FILM_FLM primary key nonclustered (FLM_ID)
    )
    go
    
    /*==============================================================*/
    /* Table : T_E_PERSONNE_PRS                                     */
    /*==============================================================*/
    create table T_E_PERSONNE_PRS (
       PRS_ID               int                  identity,
       PRS_NOM              char(32)             not null,
       PRS_PRENOM           varchar(25)          null,
       PRS_DATE_NAISSANCE   date                 null,
       PRS_DATE_DECES       date                 null,
       constraint PK_T_E_PERSONNE_PRS primary key nonclustered (PRS_ID)
    )
    go
    
    /*==============================================================*/
    /* Table : T_J_PARTICIPE_PTC                                    */
    /*==============================================================*/
    create table T_J_PARTICIPE_PTC (
       PRS_ID               int                  not null,
       FCT_ID               int                  not null,
       FLM_ID               int                  not null,
       constraint PK_T_J_PARTICIPE_PTC primary key (PRS_ID, FCT_ID, FLM_ID)
    )
    go
    
    /*==============================================================*/
    /* Index : T_J_PARTICIPE_PTC_FK                                 */
    /*==============================================================*/
    create index T_J_PARTICIPE_PTC_FK on T_J_PARTICIPE_PTC (
    PRS_ID ASC
    )
    go
    
    /*==============================================================*/
    /* Index : T_J_PARTICIPE_PTC2_FK                                */
    /*==============================================================*/
    create index T_J_PARTICIPE_PTC2_FK on T_J_PARTICIPE_PTC (
    FCT_ID ASC
    )
    go
    
    /*==============================================================*/
    /* Index : T_J_PARTICIPE_PTC3_FK                                */
    /*==============================================================*/
    create index T_J_PARTICIPE_PTC3_FK on T_J_PARTICIPE_PTC (
    FLM_ID ASC
    )
    go
    
    /*==============================================================*/
    /* Table : T_R_FONCTION_FCT                                     */
    /*==============================================================*/
    create table T_R_FONCTION_FCT (
       FCT_ID               int                  identity,
       FCT_CODE             char(8)              not null,
       FCT_LIBELLE          varchar(64)          null,
       constraint PK_T_R_FONCTION_FCT primary key nonclustered (FCT_ID),
       constraint AK_UK_FCT_COD_T_R_FONC unique (FCT_CODE)
    )
    go
    
    alter table T_J_PARTICIPE_PTC
       add constraint FK_T_J_PART_T_J_PARTI_T_E_PERS foreign key (PRS_ID)
          references T_E_PERSONNE_PRS (PRS_ID)
    go
    
    alter table T_J_PARTICIPE_PTC
       add constraint FK_T_J_PART_T_J_PARTI_T_R_FONC foreign key (FCT_ID)
          references T_R_FONCTION_FCT (FCT_ID)
    go
    
    alter table T_J_PARTICIPE_PTC
       add constraint FK_T_J_PART_T_J_PARTI_T_E_FILM foreign key (FLM_ID)
          references T_E_FILM_FLM (FLM_ID)
    go
    3) le jeu d'essais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    --> insertion des principales fonctions
    SET IDENTITY_INSERT dbo.T_R_FONCTION_FCT ON;
    INSERT INTO dbo.T_R_FONCTION_FCT (FCT_ID, FCT_CODE, FCT_LIBELLE) VALUES
    (1, 'REAL', 'Réalisateur / Metteur en scène'),
    (2, 'ACT',  'Acteur, comédien'),
    (3, 'SCN',  'Scénariste'),
    (4, 'DIAL', 'Dialoguiste'),
    (5, 'PROD', 'Producteur');
    SET IDENTITY_INSERT dbo.T_R_FONCTION_FCT OFF;
    
    --> insertion de George Clooney, Jean Dujardin et Matt Damon
    SET IDENTITY_INSERT dbo.T_E_PERSONNE_PRS ON;
    INSERT INTO dbo.T_E_PERSONNE_PRS (PRS_ID, PRS_NOM, PRS_PRENOM, PRS_DATE_NAISSANCE, PRS_DATE_DECES) VALUES 
    (1, 'CLOONEY',  'George', '1961-05-06', NULL),
    (2, 'DUJARDIN', 'Jean',   '1972-06-18', NULL),
    (3, 'DAMON',    'Matt',   '1970-10-08', NULL);
    SET IDENTITY_INSERT dbo.T_E_PERSONNE_PRS OFF;
    
    --> insertion du film "Monument Men"
    SET IDENTITY_INSERT dbo.T_E_FILM_FLM ON;
    INSERT INTO dbo.T_E_FILM_FLM (FLM_ID, FLM_TITRE_ORIGINAL, FLM_TITRE_FRANCAIS, FLM_ANNEE, FLM_DUREE_MINUTE)  VALUES 
    (1, 'Monuments Men', 'The Monuments Men', 2014, 119);
    SET IDENTITY_INSERT dbo.T_E_FILM_FLM OFF;
    
    --> insertion des participants au film
    INSERT INTO dbo.T_J_PARTICIPE_PTC (PRS_ID, FCT_ID, FLM_ID) VALUES
    (1, 1, 1),
    (1, 5, 1),
    (1, 3, 1),
    (1, 2, 1),
    (2, 2, 1),
    (3, 2, 1);
    4) La requête finale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT FLM_TITRE_FRANCAIS, FLM_ANNEE, FLM_DUREE_MINUTE, PRS_PRENOM + ', ' + PRS_NOM AS PARTICIPANT, FCT_LIBELLE
    FROM   dbo.T_E_FILM_FLM AS F
           LEFT OUTER JOIN dbo.T_J_PARTICIPE_PTC AS PTC
                ON F.FLM_ID = PTC.FLM_ID
                LEFT OUTER JOIN dbo.T_E_PERSONNE_PRS AS P
                     ON PTC.PRS_ID = P.PRS_ID
                LEFT OUTER JOIN dbo.T_R_FONCTION_FCT AS FC
                     ON PTC.FCT_ID = FC.FCT_ID
    Et pour apprendre à modéliser correctement une base, veuillez lire notre ouvrage :
    Nom : Soutou Brouard Modélisation bases de données.jpg
Affichages : 1830
Taille : 40,3 Ko

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  8. #8
    Membre à l'essai
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Août 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Août 2012
    Messages : 8
    Points : 10
    Points
    10
    Par défaut Merci SqlPro
    Merci.
    C'était parfait, clair, argumenté et commenté.

    Je viens de télécharger le bouquin chez Decitre

Discussions similaires

  1. help oscommerce svp
    Par shogun1 dans le forum E-Commerce
    Réponses: 0
    Dernier message: 05/04/2011, 11h12
  2. Quelqu'un pour critiquer mon MCD, SVP
    Par jilow dans le forum Modélisation
    Réponses: 34
    Dernier message: 10/07/2009, 00h09
  3. Probléme prog en C(help me svp)
    Par conceicao dans le forum C
    Réponses: 7
    Dernier message: 02/11/2006, 14h15

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