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

SQL Procédural MySQL Discussion :

Contrainte d'exclusion avec mySQL et moteur innoDB


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut Contrainte d'exclusion avec mySQL et moteur innoDB
    Tout d'abord j'aimerais savoir si les contraintes de partition XT (entre deux entité filles) existe avec innoDB de mySQL.
    Et si c'est le cas comment ca se traduit en SQL je ne trouve pas de doc.

    J'ai :
    Participation, PartAbonnee (fille de Participation), PartAnonyme(fille de Participation), et un XT entre PartAbonnee et PartAnonyme

    Comment se traduirait cette contrainte en SQL ?

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 288
    Par défaut
    En gros, je n'ai rien compris à ta question... pourrais-tu par exemple expliciter les points suivants :
    1. Qu'est-ce qu'une partition XT ?
    2. Quels sont les attributs de tes entités ?
    3. les "entités filles" sont-elles filles par spécialisation ou par appartenance ?

  3. #3
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    Excuse moi pour ce manque de précision que je vais corriger.

    Voici le MLD

    Participation(dateParticipation, ip)
    PartAbonnee(#dateParticipation, nbTickets)
    PartAnonyme(#dateParticipation)

    Et je voudrais que l'existance d'une Participation ne soit jamais présente dans PartAbonne et PartAnonyme en meme temps.

    La contrainte "XT" dont je parlais fait reference au modèle merisien.

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 288
    Par défaut
    Si je comprends bien, dateParticipation est la clé primaire de ta table participation, et une clé étrangère sur les deux tables PartAbonee et PartAnonyme ?

    ça veut dire que pour chaque participation, il y a soit plusieurs parts abonné, soit plusieurs parts anonymes, mais jamais les deux ?

    J'en déduirais que chaque Participation a un type "abonné" ou "anonyme". Ton modèle deviendrais donc le suivant :

    Participation(dateParticipation, ip, type)
    Part(#dateParticipation, nbTickets)

    avec évidemment un nbTickets NULL pour les parts anonymes.

  5. #5
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    Non le modèle est plus complexe et les deux filles ont lieu d'exister, nbTickets concerne seulement les Partabonnees, mais outre une semantique un peu moins précise, faire disparaitre les PartAnonymes rendrait le modèle faux puisque d'autres entités sont liés a cette entité fille.

    La conception est fini et bonne (je pense), mon soucis est d'ordre syntaxeique. Comment puis-je definir les contraintes SQL permettant d'avoir l'existance d'une fille, ou de l'autre, mais pas les deux a la fois.
    Une participation ne peut pas etre d'abonnees et d'anonyme à la fois si tu préfère.

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 288
    Par défaut
    Citation Envoyé par kazou Voir le message
    Une participation ne peut pas etre d'abonnees et d'anonyme à la fois si tu préfère.
    Ce qui revient à dire que ta participation a un type, "abonné" ou "anonyme".

    Citation Envoyé par kazou Voir le message
    La conception est fini et bonne (je pense),
    ... sauf qu'elle ne permet pas d'implémenter la contrainte dont tu as besoin

    Plus largement, l'impression que tu donnes est que c'est un modèle objet... qui ne se traduit pas directement en MPD relationnel.
    Citation Envoyé par kazou Voir le message
    mon soucis est d'ordre syntaxique. Comment puis-je definir les contraintes SQL permettant d'avoir l'existance d'une fille, ou de l'autre, mais pas les deux a la fois.
    MySQL ne permettant pas les contraintes CHECK, je crains que la seule solution "propre" ne soint celle que je t'ai indiquée. Tu peux par contre utiliser une solution "sale", à savoir un trigger qui fait échouer l'insertion s'il existe déjà des lignes dans la table soeur. Ce qui est sale est que tu n'auras jamais de message d'erreur explicite, mais un message faisant référence à l'astuce que tu auras utilisé pour faire échouer l'insertion (ajout d'un NULL dans une colonne NOT NULL, d'un VARCHAR dans une colonne INT, etc.).
    Citation Envoyé par kazou Voir le message
    Non le modèle est plus complexe et les deux filles ont lieu d'exister, nbTickets concerne seulement les Partabonnees,
    d'où ma suggestion de le mettre à NULL pour les anonymes

    Citation Envoyé par kazou Voir le message
    mais outre une semantique un peu moins précise, faire disparaitre les PartAnonymes rendrait le modèle faux puisque d'autres entités sont liés a cette entité fille.
    Normalement, ça ne change rien, à part effectivement une sématique amoindrie.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/10/2009, 14h06
  2. [MySQL] Moteur de recherche avec MySQL
    Par Davidlouiz dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 28/10/2008, 16h29
  3. [MySQL] requête avec une contrainte d'exclusion portant sur une liste de valeurs
    Par vincounet dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 25/08/2008, 14h54
  4. Probleme pour une contrainte CHECK avec MySQL
    Par dave260888 dans le forum Requêtes
    Réponses: 2
    Dernier message: 18/07/2008, 22h11
  5. Contrainte avec MySql
    Par BRAUKRIS dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 22/04/2005, 12h16

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