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 avant insertion


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2011
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 196
    Par défaut Contrainte avant insertion
    Bonjour,
    Je vous expose mon problème :
    J'ai une application où il y a 3 tables : Utilisateur, Mot et Thème.

    Un mot peut appartenir à 1 et 1 seul utilisateur, et un utilisateur peut avoir 0..* mots.
    Un thème appartient à 1 et 1 seul utilisateur.
    Un mot est relié à 0..1 thème et à 1 et 1 seul utilisateur.

    J'obtiens le MLD suivant :

    Utilisateur : id_utilisateur.
    Theme : id_theme, id_utilisateur
    Mot : id_mot, id_utilisateur, id_theme

    Je voudrais pour chaque insertion d'un mot, vérifier que l'id_utilisateur dans la table Mot soit le même que l'id_utilisateur dans la table Theme.

    J'utilise MySQL, est-il nécessaire de créer un trigger pour gérer cela ?

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2011
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 196
    Par défaut
    Je viens de penser à la solution suivante :
    Que le colonne id_utilisateur dans la table Mot ait une contrainte de clé étrangère à la fois sur la table Utilisateur et également sur la table Thème.

    Est-ce une solution plausible ?

  3. #3
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 572
    Par défaut
    Bonjour,
    Ca ne marchera pas: il suffit que le theme existe, que l'utilisateur existe et que l'utilisateur soit associé à un thème (et pas forcément le même) pour que les deux contraintes soient vérifiées.

    Il faut tester que le couple (utilisateur/theme) de la table mot existe aussi dans la table theme.

    Tatayo.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2011
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 196
    Par défaut
    oui tu as raison, mais comment faire cela ? Mise en place d'un trigger avant insertion ?

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 955
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 955
    Par défaut
    id_utilisateur n'a pas vraiment à être référencé dans la table mot.
    Un thème est associé à un utilisateur, un mot est associé à un thème.
    Le lien entre l'utilisateur et le mot se fait en passant par la table thème.

    Pour que l'utilisateur soit référencé dans la table mot et vérifier qu'il s'agit bien du même utilisateur que celui associé au thème, il faut que l'id_utilisateur soit inclu dans la clé primaire de la table thème (ou créer une contrainte d'unicité sur le couple (id_theme,id_utilisateur)), ce qui permettra de créer une clé étrangère dans la table mot sur le couple (id_theme, id_utilisateur) qui référencera la clé primaire (id_theme, id_utilisateur) de la table thème... Suis je clair ? En gros l'intégrité référentiel se fait en créant une clé étrangère vers une contrainte d'unicité (généralement la clé primaire)

    Mais ce choix me semble inutile car l'information id_utilisateur dans la table mot est alors redondante.

  6. #6
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2011
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 196
    Par défaut
    oui je comprends, mais je me suis trompé dans l'énoncé, en fait un mot peut ne pas avoir de thème, du coup id_theme dans la classe Mot peut être null. Je dois donc garder la colonne id_utilisateur dans la table Mot pour garder une référence vers l'utilisateur dans le cas où le thème n'est pas renseigné.

    Et un thème ne peut appartenir qu'à un seul utilisateur, donc je ne peux pas mettre comme clé primaire id_theme et id_utilisateur dans la table theme car dans ce cas on pourrait avoir plusieurs utilisateurs pour un seul thème...

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/11/2009, 16h28
  2. Supprimer espace avant insertion dans état
    Par aCe_GiK dans le forum Access
    Réponses: 5
    Dernier message: 24/04/2006, 17h34
  3. Modification avant insertion
    Par KernelControl dans le forum Oracle
    Réponses: 2
    Dernier message: 21/12/2005, 13h54
  4. [MySQL] Vérification de doublons avant insertion
    Par Nicos77 dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 09/12/2005, 13h37
  5. [MySQL] Vérification de la présence d'enregistrement avant insertion
    Par Odilon dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 28/09/2005, 15h30

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