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

Langage SQL Discussion :

Contrainte sur les attributs des tables référencées


Sujet :

Langage SQL

  1. #1
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut Contrainte sur les attributs des tables référencées
    Bonjour,
    j'aimerais ajouter une contrainte un peu plus complexe que ce que je sais faire sur ma base. Je la simplifie en
    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
    CREATE TABLE A (
       idA int NOT NULL,
       plop int NOT NULL,
       PRIMARY KEY(idA)
    );
    CREATE TABLE B (
       idB int NOT NULL,
       plop int NOT NULL,
       PRIMARY KEY(idA)
    );
    CREATE TABLE Asso (
       idA int NOT NULL,
       idB int NOT NULL,
       PRIMARY KEY(idA,idB),
       FOREIGN KEY idA REFERENCES A(idA),
       FOREIGN KEY idB REFERENCES A(idB),
    );
    J'aimerais avoir une contrainte qui assure qu'une entrée dans la table Asso référence deux enregistrement dans A et B qui ont la même valeur pour l'attribut plop. Ainsi, pour chaque entrée dans Asso, "idA->plop=idB->plop" ... mais en SQL ^^

    Merci beaucoup pour votre aide.
    -- Yankel Scialom

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,


    Si idA et idB doivent être systématiquement identique pourquoi faire 2 champs ?
    (ou alors j'ai pas saisi la demande)

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    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 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Vous avez donc un problème de conception, votre modèle physique viole la première forme normale.

    Si vous aviez procédé à une modélisation conceptuelle avec un outil il vous aurait été impossible de concevoir vos entités ainsi !!!!

    Pour résoudre votre problème, vous devez passer par un héritage. Lisez ceci :
    http://sqlpro.developpez.com/cours/m...tion/heritage/

    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/ * * * * *

  4. #4
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut
    Je vous trouve durs avec moi ... je n'ai évidemment pas une base de cette forme ou des tables de ces formes, j'ai simplifié le problème au maximum afin de vous aider à m'aider.

    Qu'y a-t-il de si étrange ou de si non normalisé que de vouloir une contrainte sur des champs référencés dans une table d'association NxM ?

    Merci.
    -- Yankel Scialom

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    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 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par prgasp77 Voir le message
    Je vous trouve durs avec moi ...
    Rassurez vous, il n'y a pas qu'avec vous que je le sui !!!!

    je n'ai évidemment pas une base de cette forme ou des tables de ces formes, j'ai simplifié le problème au maximum afin de vous aider à m'aider.
    Visiblement si vous l'avez, mais comme vous ne modélisez pas au bon endroit, vous ne pouvez pas le voir... Pour médéliser correctement il faut faire un MODELEC CONCEPTUEL DE DONNÉES ou MCD. On ne peut pas modéliser correctement directement avec des tables !

    Qu'y a-t-il de si étrange ou de si non normalisé que de vouloir une contrainte sur des champs référencés dans une table d'association NxM ?

    Merci.
    Elle est stupide car un modèle bien fait n'a pas besoin d'une telle contrainte !!!

    Voici la solution :

    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
    CREATE TABLE AB
       id int NOT NULL,
       plop int NOT NULL,
       PRIMARY KEY(id)
    );
     
    CREATE TABLE A (
       idA int NOT NULL FOREIGN KEY REFERENCES AB (id),
       PRIMARY KEY(idA)
    );
    CREATE TABLE B (
       idB int NOT NULL FOREIGN KEY REFERENCES AB (id),
       PRIMARY KEY(idA)
    );
    CREATE TABLE Asso (
       idA int NOT NULL,
       idB int NOT NULL,
       PRIMARY KEY(idA,idB),
       FOREIGN KEY idA REFERENCES A(idA),
       FOREIGN KEY idB REFERENCES A(idB),
    );
    Ainsi vous n'avez aucune redondance, donc aucun besoin de dire que plop = plop dans une contrainte!!!
    Et si vous voulez des tables A et B avec votre plop en sus, il suffit de faire des vues :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE VIEW V_A
    AS
    SELECT idA, plop
    FROM   AB
           JOIN A
                ON ...
    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/ * * * * *

  6. #6
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut
    Très bien merci, je vérifie que cette solution attrayante soit compatible en tout point avec les outils que je vais utiliser. Je vous tiens au courant.

    Edit : c'est tout bon, merci encore ... y'a plus qu'à apprendre à ma surcouche à gérer les vues "en écriture"
    -- Yankel Scialom

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

Discussions similaires

  1. ET logique sur les attributs des lignes !
    Par izioto dans le forum Requêtes
    Réponses: 4
    Dernier message: 23/08/2010, 15h52
  2. [AC-2007] Question sur les relations des tables
    Par Abed_H dans le forum IHM
    Réponses: 2
    Dernier message: 21/03/2010, 21h10
  3. [E - 07] Aide sur les attributs des éléments du ruban
    Par conconbrr dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 05/01/2009, 18h29
  4. Réponses: 3
    Dernier message: 01/07/2008, 16h51
  5. Récupération des commentaires sur les champs des tables.
    Par mikef32 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 10/08/2006, 00h23

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