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 :

Modélisation inquiétante Clé Primaire et clé secondaire] [Modèle Relationnel]


Sujet :

Schéma

  1. #1
    Membre régulier Avatar de Sabact
    Inscrit en
    Septembre 2006
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 189
    Points : 91
    Points
    91
    Par défaut Modélisation inquiétante Clé Primaire et clé secondaire]
    Bonjour,
    J'ai trouvé quelque part le script de création suivant,
    -Je pense que ce deux création ne respecte pas la théorie d'integrité??
    -Il est impossible de faire une insertion sur le deux tables citées??
    J'attend votre avis, à quoi vraiment le but de la création d'une telle modélisation.
    Merci

    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
    create table produit(
    ref_produit integer primary key,
    nom_produit varchar2(50),
    ref_client  integer
    );
    
    alter table produit add (constraints fr_cl_pr 
    foreign key (ref_client) references client(ref_client));
     
    create table client(
    ref_client   integer primary key,
    nom_client   varchar2(50),
    ref_produit  integer);
    
    alter table client add 
    (constraints fr_pr_cl 
    foreign key (ref_produit)
    references produit(ref_produit));
    Un sot ne dit pas de choses intelligentes, mais un homme intelligent dit beaucoup de bêtises.

  2. #2
    Membre expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Points : 3 134
    Points
    3 134
    Par défaut
    Effectivement, avoir une référence croisée de clefs etrangères, ce n'est pas terrible... Mais en même temps, faire qu'un client ne peut avoir qu'un produit et un produit ne peut avoir qu'un client... Cela relève d'une erreur de conception , puisqu'au niveau MCD, on aurait eu une association 1,1 <-> 1,1 , ce qui se traduit par une fusion lors du passage au MLD, donc une table unique au niveau du MPD.
    Hervé Delannoy, Ingénieur études&développement.

    Je n'accepte pas les demandes de mise en relation MSN/yahoo sans motif.
    ------------------------------------------------------------------------
    Si , ni , ne peuvent vous aider, mais nous oui, pensez à un pti et au !
    Merci de vous relire
    ____________________________________________________________________________________
    Recherche joueurs de "Magic" sur Lille et environs.
    Donner plutôt que jeter.

  3. #3
    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
    Bonjour,


    Au vu des instructions CREATE et ALTER TABLE, un client donné peut être associé à plusieurs produits et un produit donné peut être associé à plusieurs clients.

    En effet, on pourrait avoir l’image suivante du contenu des tables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Produit (RefProduit, NomProduit, RefClient)
                p1       DB2           c1
                p2       Oracle        c1
    
    Client (RefClient, NomClient, RefProduit)
              c1       Sabact       p1
              c2       hed62        p1
    Mais hed62 a raison, la modélisation n’est pas du tout satisfaisante, il manque une table intermédiaire permettant de mettre en relation les produits et les clients de façon rationnelle :
    [Produit]---0,N---(ProdCli)---0,N---[Client]

    Remarque complémentaire :

    Avec le script proposé, les contrôles d'intégrité référentielle sont effectués immédiatement : impossible de charge la moindre ligne. Selon la norme SQL, à condition d’utiliser la clause INITIALLY DEFERRED au niveau des clés étrangères, on peut néanmoins différer le contrôle de l’intégrité référentielle lors des opérations d'INSERT.

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    alter table produit add (constraints fr_cl_pr 
            foreign key (ref_client) references client(ref_client)
               On DELETE RESTRICT INITIALLY DEFERRED DEFERRABLE);
    Suite à l’exécution des instructions de mise à jour des tables (INSERT, UPDATE, DELETE), le contrôle d’intégrité ne se produira qu’à la détection d’une instruction SET CONSTRAINTS ALL IMMEDIATE, ou à défaut au prochain COMMIT.
    Seuls certains SGBD permettent ce genre de contrôle différé, tels Oracle ou PostgreSQL (à vérifier).

    P.S.
    L’instruction ALTER TABLE Produit n’est pas à sa place dans le script proposé, elle doit se trouver à la suite de l’instruction CREATE TABLE Client.
    (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.

  4. #4
    Membre expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Points : 3 134
    Points
    3 134
    Par défaut
    Au vu des instructions CREATE et ALTER TABLE, un client donné peut être associé à plusieurs produits et un produit donné peut être associé à plusieurs clients.
    Effectivement, je n'avais pas pensé cela comme ça

    la clause INITIALLY DEFERRED
    Je ne connaissait pas, cela peut toujours servir.
    Hervé Delannoy, Ingénieur études&développement.

    Je n'accepte pas les demandes de mise en relation MSN/yahoo sans motif.
    ------------------------------------------------------------------------
    Si , ni , ne peuvent vous aider, mais nous oui, pensez à un pti et au !
    Merci de vous relire
    ____________________________________________________________________________________
    Recherche joueurs de "Magic" sur Lille et environs.
    Donner plutôt que jeter.

  5. #5
    Membre régulier Avatar de Sabact
    Inscrit en
    Septembre 2006
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 189
    Points : 91
    Points
    91
    Par défaut
    Bonjour,

    Citation Envoyé par fsmrel Voir le message
    Mais hed62 a raison, la modélisation n’est pas du tout satisfaisante, il manque une table intermédiaire permettant de mettre en relation les produits et les clients de façon rationnelle :
    [Produit]---0,N---(ProdCli)---0,N---[Client]
    D'après vous quelle colonne doit être insérée dans la table intermediaire (prodCli) pour qu'on a une bonne modélisation
    ProdCli(RefProduit,RefClient....)?


    Merci
    Un sot ne dit pas de choses intelligentes, mais un homme intelligent dit beaucoup de bêtises.

  6. #6
    Membre expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Points : 3 134
    Points
    3 134
    Par défaut
    D'après vous quelle colonne doit être insérée dans la table intermediaire (prodCli) pour qu'on a une bonne modélisation
    ProdCli(RefProduit,RefClient....)?
    La réponse est dans la question

    ProdCli(#RefProduit,#RefClient, autres champs comme date_achat par exemple)

    légende :
    #clef_primaire
    clef_etrangere
    Hervé Delannoy, Ingénieur études&développement.

    Je n'accepte pas les demandes de mise en relation MSN/yahoo sans motif.
    ------------------------------------------------------------------------
    Si , ni , ne peuvent vous aider, mais nous oui, pensez à un pti et au !
    Merci de vous relire
    ____________________________________________________________________________________
    Recherche joueurs de "Magic" sur Lille et environs.
    Donner plutôt que jeter.

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

Discussions similaires

  1. [WS 2003] Réplication d'un DNS primaire sur un DNS secondaire
    Par Théolude dans le forum Windows Serveur
    Réponses: 9
    Dernier message: 20/07/2009, 15h06
  2. cle primaire et secondaire
    Par paskal++ dans le forum Langage SQL
    Réponses: 2
    Dernier message: 08/07/2009, 01h02
  3. Différentiation acteurs primaires & secondaires
    Par Spout dans le forum BOUML
    Réponses: 3
    Dernier message: 29/09/2008, 08h07
  4. [Gadfly]Clef primaire et secondaire
    Par anthyme dans le forum Bibliothèques tierces
    Réponses: 3
    Dernier message: 23/08/2006, 20h35
  5. Groupes primaires et secondaires
    Par melmouj dans le forum Administration système
    Réponses: 6
    Dernier message: 21/06/2006, 08h14

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