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 :

[Héritage] Hotline (Appels de plusieurs type)


Sujet :

Schéma

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2012
    Messages : 20
    Points : 17
    Points
    17
    Par défaut [Héritage] Hotline (Appels de plusieurs type)
    Bonjour,

    j'aurais besoin d'un coup de main de la part d'un utilisateur à l'esprit lucide et bourré de recul.

    Je vous vous explique mon problème je travail sur le développement d'une application de hotline, jusque là pas de problème.. J'ai donc finalement pensé répartir les appels selon le type de celui-ci : Probleme (avec sous catégorie)/Installation/Information/Enlevement. C'est à ce niveau que je bloque, vous l'aurez compris mes "type" d'appel héritent de la table appel (qui contient l'heure la date (le type?) etc...)

    Seulement je suis incapable de le mettre en place, l'idée est de pouvoir ressortir tous les appels (avec leurs détails en fonction du type) seulement je n'ai plus aucun recul sur le sujet et mon petit cerveau freeze.. devrais-je passer par une table "type_appel" ? Où bien, le cas contraire, comment savoir dans quel table précisement je dois recuperer les informations de l'appel(en fonction de son type donc).



    Dans l'ébauche ci-dessus, si je relie mes tables Probleme/Info/Install/Enlevement a "type_appel" ça n'a aucun interet (il me semble oO).
    Si je les relie à la table "Appel" ça a pour interet que je pourrais récuperer (en partant des tables enfants) les détails de l'appel. Mais en partant de la table appel je ne saurais pas dans quel table rechercher les détails du sujet.

    Je ne sais pas si j'ai été assez clair, si c'est le cas alors le moindre soutient sera le bienvenue

    Cordialement.

  2. #2
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Bqyben,

    Pas bien clair...

    Pour commencer :
    1 type d'appel comporte 1 ou plusieurs problème(s) ?
    1 problème n'est lié qu'à un seul type d'appel ?
    Dis-nous et à bientôt,
    Richard.
    ----------------------------------------------------------------------------------------------
    En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
    et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2012
    Messages : 20
    Points : 17
    Points
    17
    Par défaut
    Bonjour Richard, un appel peut être de plusieurs type, les types sont : Probleme/Installation/Information/Enlevement.
    Et un probleme est un type d'appel.

    Le soucis est donc que ces 4 types d'appel héritent de "appel" de manière exclusive, un appel ne pourra être que de type "probleme" ou bien "enlevement" ainsi de suite..

    J'ai continué et ai abandonné l'idée de la table "type_appel" en me disant que lors du développement je passerai tout en jointure mais ça me semble tordu et je suis persuadé qu'il y a plus propre..

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2012
    Messages : 20
    Points : 17
    Points
    17
    Par défaut
    En fait c'est une spécialisation obligatoire et exclusive, je pense que je devrais ajouter 4 colonnes dans ma table "appel" avec pour chaque colonne un type d'appel mais je ne suis pas sûr..

  5. #5
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Bqyben,

    OK (comme il y avais une flèche à droite dans ton schéma d'origine...).

    Et ton souci, c'est que les types d'appel Probleme, Installation, Information et Enlevement possèdent, chacun, des propriétés particulières (champs propres, en final) : c'est bien cela ?
    Dis-nous et à bientôt,
    Richard.
    ----------------------------------------------------------------------------------------------
    En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
    et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2012
    Messages : 20
    Points : 17
    Points
    17
    Par défaut
    exactement, mais pas seulement, car même si j'arrive à établir le lien entre ces tables, lorsque je voudrais lister l'ensemble des appels (dans leur ordre de saisie) je devrais systematiquement faire une jointure avec mes 5 tables..?
    C'est là que se trouve mon principale problème je ne sais pas si il éxiste une meilleur solution mais je trouve celle-ci trop "barbare"..

    J'ai comme relation :

    appel - 0,n ----- est de type ----- 1,1 - probleme
    appel - 0,n ----- est de type ----- 1,1 - installation
    appel - 0,n ----- est de type ----- 1,1 - enlevement
    appel - 0,n ----- est de type ----- 1,1 - information

    si je suis le billet que vous avez crée à ce sujet j'aurais donc l'id_appel dans chacune de mes tables enfant.

    (Oui désolé pour le schema j'ai du mal avec ces outils)

  7. #7
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    OK. Donc, effectivement, il va falloir faire intervenir la notion d'héritage... mais pas où tu le penses !...

    Suggestion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Appel -0,n---[Être de type]---1,1- TypeAppel -0,1---[Être problème]-------(1,1)- Probleme
                                           |------0,1---[Être installation]---(1,1)- Installation
                                           |------0,1---[Être enlevement]-----(1,1)- Enlevement
                                           |------0,1---[Être information]----(1,1)- Information
    TypeAppel distribue une clé primaire unique.
    Dis-nous et à bientôt,
    Richard.
    ----------------------------------------------------------------------------------------------
    En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
    et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !

  8. #8
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2012
    Messages : 20
    Points : 17
    Points
    17
    Par défaut
    Merci pour votre suggestion, j'ai tenté de la mettre en application, j'ai saisie quelques valeurs de test et executé une des requetes dont j'aurai besoin.

    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
    CREATE TABLE IF NOT EXISTS `appel` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `description` varchar(80) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
    
    CREATE TABLE IF NOT EXISTS `information` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `id_type_appel` int(11) DEFAULT NULL,
      PRIMARY KEY (`id`),
      KEY `id_type_appel` (`id_type_appel`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
    
    CREATE TABLE IF NOT EXISTS `probleme` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `id_type_appel` int(11) DEFAULT NULL,
      PRIMARY KEY (`id`),
      KEY `id_type_appel` (`id_type_appel`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
    
    CREATE TABLE IF NOT EXISTS `type_appel` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `id_appel` int(11) DEFAULT NULL,
      PRIMARY KEY (`id`),
      KEY `id_appel` (`id_appel`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
    
    -- Contraintes pour la table `information`
    --
    ALTER TABLE `information`
      ADD CONSTRAINT `information_ibfk_1` FOREIGN KEY (`id_type_appel`) REFERENCES `type_appel` (`id`);
    
    --
    -- Contraintes pour la table `probleme`
    --
    ALTER TABLE `probleme`
      ADD CONSTRAINT `probleme_ibfk_1` FOREIGN KEY (`id_type_appel`) REFERENCES `type_appel` (`id`);
    
    --
    -- Contraintes pour la table `type_appel`
    --
    ALTER TABLE `type_appel`
      ADD CONSTRAINT `type_appel_ibfk_1` FOREIGN KEY (`id_appel`) REFERENCES `appel` (`id`);
    La requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM appel WHERE id = (SELECT id_appel FROM type_appel WHERE id =(SELECT id_type_appel FROM probleme))
    Celle-ci devrait me permettre de récuperer tous les appels de type probleme mais ne fonctionne pas à partir du moment ou la table probleme contient plusieurs enregistrements. J'imagine que la requete est a travailler mais je me demande si j'ai construit correctement mes tables

  9. #9
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Tu sembles d'accord sur le principe, donc.

    Nous bifurquons vers le traitement proprement dit...

    En premier lieu, il faut utiliser des jointures plutôt que des "WHERE id=". Ensuite, avec le schéma qui semble te convenir, nous devrions obtenir les tables suivantes :
    Appel(IdAppel, DateAppel, ...)
    TypeAppel(IdTypeAppel, [champs communs à problème/installation/enlèvement/information] ...)
    Probleme(IdTypeAppel, [champs propres à problème] ...)
    Installation(IdTypeAppel, [champs propres à installation] ...)
    Enlevement(IdTypeAppel, [champs propres à enlèvement] ...)
    Information(IdTypeAppel, [champs propres à information] ...)
    Peut-être, prévoir un trigger de contrôle inter-tables, suivant ce que tu souhaites.
    Dès lors, les jointures (LEFT JOIN) deviennent relativement évidentes.
    Dis-nous et à bientôt,
    Richard.
    ----------------------------------------------------------------------------------------------
    En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
    et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !

  10. #10
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2012
    Messages : 20
    Points : 17
    Points
    17
    Par défaut
    En effet, ça fait un moment que je n'ai pas fait autre chose que des basic select.. j'était en train de tester les jointures et forcement, ça répond mieux !

    Merci pour le coup de main vraiment!

    Bonne journée

  11. #11
    Membre chevronné
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2007
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Août 2007
    Messages : 797
    Points : 2 057
    Points
    2 057
    Par défaut
    Bonjour Ben et Richard,

    Excusez-moi d'intervenir dans cette discussion alors qu'elle est résolue mais justement, pour moi, elle ne l'est pas. Elle mérite une rectification.

    Problème, Installation, Enlèvement et Information sont des sous-types de Appel et non pas de Type_appel.

    Le MLD devrait donc être comme ceci (les différences par rapport à la proposition de Richard sont en rouge) :

    appel (idappel, DateAppel, [champs communs à problème/installation/enlèvement/information],#idtype_appel, ...)
    type_appel (idtype_appel, libelle, description)
    probleme (#idappel, [champs propres à problème] ...)
    installation (#idappel, [champs propres à installation] ...)
    enlevement (#idappel, [champs propres à enlèvement] ...)
    information (#idappel, [champs propres à information] ...)


    La table appel contient les appels de tous types. Quand un appel est de type "problème" par exemple (ce que l'on sait grâce au lien avec type_appel), on obtient les données spécifiques à cet appel par jointure avec la table probleme sur idappel de même valeur.
    N'oubliez pas de consulter les Cours Merise et la F.A.Q. Merise
    _______________________________________________________

    Les Règles du Club Developpez.com
    Vous avez votre réponse ? Merci de cliquer sur

  12. #12
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour JPhi33,

    Pas tout à fait, car (en rouge) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Appel -0,n---[Être de type]---1,1- TypeAppel -0,1---[Être problème]-------(1,1)- Probleme
                                           |------0,1---[Être installation]---(1,1)- Installation
                                           |------0,1---[Être enlevement]-----(1,1)- Enlevement
                                           |------0,1---[Être information]----(1,1)- Information
    Mais, c'est vrai qu'il y a un oubli que Bqyben a, sans doute, vu (en rouge).
    Appel(IdAppel, DateAppel, ...)
    TypeAppel(IdTypeAppel, #IdAppel, [champs communs à problème/installation/enlèvement/information] ...)
    Probleme(IdTypeAppel, [champs propres à problème] ...)
    Installation(IdTypeAppel, [champs propres à installation] ...)
    Enlevement(IdTypeAppel, [champs propres à enlèvement] ...)
    Information(IdTypeAppel, [champs propres à information] ...)
    Dis-nous et à bientôt,
    Richard.
    ----------------------------------------------------------------------------------------------
    En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
    et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !

  13. #13
    Membre chevronné
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2007
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Août 2007
    Messages : 797
    Points : 2 057
    Points
    2 057
    Par défaut
    Bonjour Richard (et Ben ?),

    Justement, désolé de te contredire mais ceci est faux :
    Citation Envoyé par Richard_35 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Appel -0,n---[Être de type]---1,1- TypeAppel
    La modélisation correcte est celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Appel --1,1---(a pour type)---0,n-- TypeAppel
    Pourquoi ? Plusieurs éléments conduisent à cette conclusion.

    1) Le diagramme.
    Il est modélisé que "appel" a un seul "type_appel" et "type_appel" a plusieurs "appel".


    2) Les commentaires de bqyben
    Citation Envoyé par bqyben
    J'ai [...] pensé répartir les appels selon le type de celui-ci

    3) Le bon sens.
    Dire qu'un appel n'a qu'un seul type, c'est du bon sens. "L'appel que j'ai eu hier à 11h36 était un Problème mais celui de 11h40 était une Information".



    Ensuite, Ben dit :
    Citation Envoyé par bqyben
    si je relie mes tables Probleme/Info/Install/Enlevement a "type_appel" ça n'a aucun interet.
    Si je les relie à la table "Appel" ça a pour interet que je pourrais récuperer (en partant des tables enfants) les détails de l'appel.
    La conclusion est que les concept Problème, Information, Installation et Enlèvement sont des types d'appels et non pas des types de types d'appels ==> Ils héritent de Appel et non pas de Type_Appel.

    Et la modélisation induite est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [ Appel ]--1,1----( )----0,n->[ Type_Appel ]
        ^
        |
        +--0,1----(est_un)----1,1--[ Problème ]
        |
        +--0,1----(est_un)----1,1--[ Information ]
        |
        +--0,1----(est_un)----1,1--[ Installation ]
        |
        +--0,1----(est_un)----1,1--[ Enlèvement ]


    Son seul problème est :
    Citation Envoyé par bqyben
    Mais en partant de la table appel je ne saurais pas dans quel table rechercher les détails du sujet.
    La solution consiste à préparer 4 requêtes à exécuter en fonction du type d'appel. Chaque requête est une jointure entre Appel et l'une des 4 tables spécialisée. Par exemple, si le type d'appel est "Problème", il faut exécuter la requête faisant une jointure entre Appel et Problème.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Select * 
      From Appel, Probleme
     Where Appel.idAppel = Probleme.idAppel
       And Appel.idAppel = <idAppel recherché>
    N'oubliez pas de consulter les Cours Merise et la F.A.Q. Merise
    _______________________________________________________

    Les Règles du Club Developpez.com
    Vous avez votre réponse ? Merci de cliquer sur

  14. #14
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Jean-Philippe (et Ben ?),

    Citation Envoyé par JPhi33
    .../... désolé de te contredire .../...
    ==> aucun problème : les contradictions font avancer tous les sujets (et pas seulement dans le domaine informatique).

    Effectivement le noeud du problème est :
    Citation Envoyé par bqyben-11/04/2012 09h20
    Bonjour Richard, un appel peut être de plusieurs type, les types sont : Probleme/Installation/Information/Enlevement.
    Et un probleme est un type d'appel.
    ==> d'où :
    Appel -0,n---[Être de type]---1,1- TypeAppel
    En contradiction avec le premier post :
    Citation Envoyé par Bqyben-10/04/2012 16h43
    .../... J'ai donc finalement pensé répartir les appels selon le type de celui-ci .../...
    Le terme "type d'appel" est quelque peu trompeur...

    Attendons Ben...
    Dis-nous et à bientôt,
    Richard.
    ----------------------------------------------------------------------------------------------
    En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
    et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !

  15. #15
    Membre chevronné
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2007
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Août 2007
    Messages : 797
    Points : 2 057
    Points
    2 057
    Par défaut
    Richard,

    Citation Envoyé par Richard_35 Voir le message
    Effectivement le noeud du problème est :
    Envoyé par bqyben-11/04/2012 09h20
    Bonjour Richard, un appel peut être de plusieurs type, les types sont : Probleme/Installation/Information/Enlevement.
    Et un probleme est un type d'appel.
    Effectivement, je suis passé à côté de cette phrase

    Citation Envoyé par Richard_35 Voir le message
    ==> d'où :
    Appel -0,n---[Être de type]---1,1- TypeAppel
    En contradiction avec le premier post :

    Le terme "type d'appel" est quelque peu trompeur...
    Et non, les types d'appels étant "Probleme/Installation/Information/Enlevement" comme indiqué dans la 1e phrase de Ben ci-dessus, ce serait :

    Appel -0,n---[Être de type]---0,n- TypeAppel

    car un type d'appel s'applique forcément à plusieurs appels, sinon, il n'existerait au maximum que 4 appels.


    A mon avis, la 1e phrase de Ben ci-dessus est une erreur de formulation. Comme tu dis, attendons Ben...
    N'oubliez pas de consulter les Cours Merise et la F.A.Q. Merise
    _______________________________________________________

    Les Règles du Club Developpez.com
    Vous avez votre réponse ? Merci de cliquer sur

  16. #16
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Jean-Philippe (et Ben ?),

    Citation Envoyé par JPhi33
    Et non, les types d'appels étant "Probleme/Installation/Information/Enlevement" comme indiqué dans la 1e phrase de Ben ci-dessus, ce serait :
    Appel -0,n---[Être de type]---0,n- TypeAppel
    car un type d'appel s'applique forcément à plusieurs appels, sinon, il n'existerait au maximum que 4 appels.
    ==> nous sommes, justement, sur le problème du nom "TypeAppel" qui n'est pas une table des "types d'appel" dans le sens "catégories d'appel" comme, par exemple, {"urgent", "non bloquant", etc...}. Il s'agit, réellement, d'une extension d'un appel, mais une seule extension est permise avec des propriétés particulières à cette extension.
    Dans ce cas, le schéma
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Appel -0,n---[Être de type]---1,1- TypeAppel -0,1---[Être problème]-------(1,1)- Probleme
                                           |------0,1---[Être installation]---(1,1)- Installation
                                           |------0,1---[Être enlevement]-----(1,1)- Enlevement
                                           |------0,1---[Être information]----(1,1)- Information
    me paraît correct. Il faut, vraiment, changer le nom "type d'appel" en... ce que voudra Ben.

    Quoiqu'il en soit, Ben a du avancer dans son développement et tombera, sans doute, devant un "mur de conception", s'il existe. A partir de ce moment là, Ben ne devra surtout pas essayer de contourner ce mur par du code ou des suites de requêtes alambiquées !... Il devra retourner côté "conception" et reformuler ses règles de gestion, sinon Ben s'aventurera dans des contrées dangereuses...

    Si Ben écoute le son de la cloche de cette discussion (habituellement, c'est lui qui tintinnabule...), ce serait intéressant qu'il se manifeste...
    Dis-nous et à bientôt,
    Richard.
    ----------------------------------------------------------------------------------------------
    En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
    et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !

  17. #17
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 793
    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 793
    Points : 34 024
    Points
    34 024
    Billets dans le blog
    14
    Par défaut
    Il me semble que l'entité type "typeAppel" est inutile.

    Je suis d'acord avec la modélisation de JPhi33 mais en enlevant typeAppel qui ne sert à rien.

    probleme -(1,1)----être----0,1- appel
    information -(1,1)----être----0,1-|
    installation -(1,1)----être----0,1--|
    enlevement -(1,1)----être----0,1--|

    Puisque, apparemment, un appel peut être de plusieurs types, pour obtenir toutes les informations d'un appel, il faut faire une vue avec jointures externes vers les 5 tables.

    Tables :
    appel (apl_id, [colonnes communes à tous les types d'appels])
    probleme (prb_id_appel, [colonnes spécifiques aux problèmes])
    information (inf_id_appel, [colonnes spécifiques aux informations])
    installation (ins_id_appel, [colonnes spécifiques aux installations])
    enlevement (enl_id_appel, [colonnes spécifiques aux enlevements])

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE VIEW v_appel_complet AS
    SELECT -- colonnes communes de la table appel
    -- colonnes spécifiques de chaque table fille
    FROM appel a
    LEFT OUTER JOIN probleme p ON p.prb_id_appel = a.apl_id
    LEFT OUTER JOIN information if ON if.inf_id_appel = a.apl_id
    LEFT OUTER JOIN installation is ON is.ins_id_appel = a.apl_id
    LEFT OUTER JOIN enlevement e ON e.enl_id_appel = a.apl_id
    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 !

  18. #18
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Philippe,

    : tu fais la jonction avec brio !

    Citation Envoyé par CinePhil
    Il me semble que l'entité type "typeAppel" est inutile.
    ==> cela se tient, ainsi que ta modélisation.

    Mais comme (en rouge) :
    Citation Envoyé par CinePhil
    probleme -(1,1)----être----0,1- appel
    information -(1,1)----être----0,1-|
    installation -(1,1)----être----0,1--|
    enlevement -(1,1)----être----0,1--|
    alors :
    Citation Envoyé par CinePhil
    appel (apl_id, [colonnes communes à tous les types d'appels])
    ces colonnes seront nulles s'il n'y a pas encore de type d'appel.

    D'autre part, il me semblait "propre" et judicieux de prévoir une entité intermédiaire entre Appel et les différents types d'appel au cas où, dans l'avenir, il faille ajouter des propriétés à TypeAppel sans trop "alourdir" Appel.
    Dis-nous et à bientôt,
    Richard.
    ----------------------------------------------------------------------------------------------
    En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
    et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !

  19. #19
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 793
    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 793
    Points : 34 024
    Points
    34 024
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par Richard_35 Voir le message
    ces colonnes seront nulles s'il n'y a pas encore de type d'appel.
    Tu va chercher trop loin !
    Dès qu'un appel est enregistré, même en admettant qu'il ne soit pas encore catégorisé, il a un certain nombre de propriétés qui sont données dans le schéma du premier message :
    - magasin ;
    - opérateur ;
    - date ;
    - heure ;
    - correspondant.

    D'autre part, il me semblait "propre" et judicieux de prévoir une entité intermédiaire entre Appel et les différents types d'appel au cas où, dans l'avenir, il faille ajouter des propriétés à TypeAppel sans trop "alourdir" Appel.
    Je maintiens que c'est inutile !
    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 !

  20. #20
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut Ajout propriété(s) au "typage" d'appel.
    Citation Envoyé par CinePhil
    Tu va chercher trop loin !
    ==> peut-être pas si loin que ça. Imagines que nous voulions stocker la date de "typage" de l'appel et l'utilisateur qui l'a typé, pour une hotline à plusieurs niveaux, par exemple ("typage"=détermination du type de l'appel) :

    1°/ dans cette modélisation :

    Citation Envoyé par CinePhil
    probleme -(1,1)----être----0,1- appel
    information -(1,1)----être----0,1-|
    installation -(1,1)----être----0,1--|
    enlevement -(1,1)----être----0,1--|
    ==> il faut stocker la date de "typage" et le code utilisateur qui a typé :
    • soit, dans l'appel => date/user NULL si appel non typé ;
    • soit, dans probleme, information, installation ou enlevement => mais il faut prévoir ces 2 propriétés dans les 4 entités, dont 1 sera NULL car
      Citation Envoyé par Ben
      En fait c'est une spécialisation obligatoire et exclusive .../...


    2°/ dans cette modélisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Appel -0,n---[Être de type]---1,1- TypeAppel -0,1---[Être problème]-------(1,1)- Probleme
                                           |------0,1---[Être installation]---(1,1)- Installation
                                           |------0,1---[Être enlevement]-----(1,1)- Enlevement
                                           |------0,1---[Être information]----(1,1)- Information
    ==> la date de "typage" et le code utilisateur qui a typé sont stockés dans TypeAppel, sachant que TypeAppel ne sera créé qu'en cas de "typage" de l'appel.

    D'ailleurs, le nom TypageAppel serait, peut-être, plus approprié que TypeAppel, bien que "typage" soit un néologisme pas très esthétique (et pas très français).
    Dis-nous et à bientôt,
    Richard.
    ----------------------------------------------------------------------------------------------
    En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
    et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !

Discussions similaires

  1. [AJAX] Appel de plusieurs pages avec Ajax
    Par shadowbob dans le forum Général JavaScript
    Réponses: 16
    Dernier message: 13/02/2006, 19h29
  2. [HTML/CSS] Plusieurs types de liens.
    Par will-scs dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 23/08/2005, 18h12
  3. [héritage privé] appel du constructeur de base
    Par PINGOUIN_GEANT dans le forum C++
    Réponses: 4
    Dernier message: 19/10/2004, 15h05
  4. Renvoyer un OUTPUT de plusieurs types
    Par omlip dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 13/08/2004, 11h44
  5. Appel de plusieurs dll en statique
    Par jakouz dans le forum Langage
    Réponses: 6
    Dernier message: 28/06/2004, 11h09

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