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 :

appartenance à un pays ou à un site de l'entreprise [MCD]


Sujet :

Schéma

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 385
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut appartenance à un pays ou à un site de l'entreprise
    Bonjour,

    j'ouvre un sujet particulier pour plus de clarté (on peut isoler cette discussion).

    Je manipule plusieurs types d'utilisateurs. Pour certains, on sait qu'ils appartiennent à un site de l'entreprise, site localisé dans un pays. Pour d'autres, on connaît seulement le pays d'appartenance mais pas le site.

    J'ai donc modélisé cela comme ça :

    Nom : country.png
Affichages : 105
Taille : 21,7 Ko
    Selon vous, cette modélisation est-elle correcte ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Bonjour Laurent

    Avec ce modèle, il est possible de faire résider un client à Madrid localisé en Espagne (branche gauche du schéma) et dans le même temps, de situer ce client en Ukraine (branche droite)...

    Pour éviter cette incohérence, il faut donc indiquer que seul l'un des deux trajets est possible pour un client.
    Je vous laisse deviner par quel moyen

  3. #3
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 385
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Bonjour escartefigue,

    merci pour votre réponse.

    Je pense qu'il faut faire ça :

    Nom : country700.png
Affichages : 80
Taille : 21,8 Ko

    Mais là où je coince, c'est pour écrire la requête SQL de la contrainte. Je pensais à CHECK mais pouvez-vous m'aider ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    C'est bien une contrainte qu'il faut utiliser éventuellement de type XT si l'on oblige à établir obligatoirement l'un ou l'autre lien, sinon X est le bon choix.
    Une contrainte "check" ne sera pas applicable ici, MySQL ne les connaissant pas . MySQL ne connait que les "ENUM", ersatz de check, en bien plus pauvre .

    On pourra utiliser un TRIGGER qui vérifie, lors de l'insertion dans la table US_USER que seulement l'une des deux FK est "NOT NULL"

  5. #5
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 385
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Il existe 3 types d'utilisateurs :
    - les license_owners ;
    - les submitters (ceux qui écrivent les tickets) ;
    - les customers (les demandeurs de création d'un ticket)

    Les submitters, on ne connait pas leur rattachement, donc je choisis une contrainte X et pas XT.

    Pour l'instant voici le DDL de la table US_user :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TABLE US_user(
       US_ident INT UNSIGNED AUTO_INCREMENT,
       sesa INT,
       firstname VARCHAR(30),
       lastname VARCHAR(30),
       COU_ident_direct INT UNSIGNED,
       LO_ident INT UNSIGNED,
       PRIMARY KEY(US_ident),
       FOREIGN KEY(COU_ident_direct) REFERENCES COU_country(COU_ident),
       FOREIGN KEY(LO_ident) REFERENCES LO_location(LO_ident)
    );
    Il y a bien 2 clés étrangères et le TRIGGER doit donc vérifier que seule l'une d'elles est "NOT NULL". Mais comment peut-on écrire ça ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Ok pour une contrainte "X" du coup.

    On créera donc un TRIGGER, qui contrôlera qu'au moins l'une des colonnes COU_ident_direct ou LO_ident est marquée "null".

    Le script ressemblera à quelque chose comme ce qui suit :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TRIGGER US_TR01 BEFORE INSERT ON US_user
        FOR EACH ROW
        BEGIN
            IF  NEW.LO_ident IS NOT NULL
            AND NEW.COU_ident_direct IS NOT NULL  THEN
                SIGNAL   SQLSTATE '61000' SET MESSAGE_TEXT = 'une des deux FK au moins doit être nulle.' ;
            END IF ;
        END ;

  7. #7
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 385
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Merci, je ne risquais pas de générer un tel script, vu que c'est la première fois que je vois ça !
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 11/11/2016, 22h15
  2. Réponses: 7
    Dernier message: 17/01/2012, 14h19
  3. Réponses: 1
    Dernier message: 13/10/2008, 17h46
  4. Site de mon entreprise.
    Par FraK dans le forum Mon site
    Réponses: 13
    Dernier message: 03/09/2007, 12h21
  5. Réponses: 14
    Dernier message: 12/08/2007, 14h39

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