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 :

Contrainte sur les tables de spécialisation


Sujet :

Schéma

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 516
    Par défaut Contrainte sur les tables de spécialisation
    Bonjour,

    Je ne sais pas si je suis sur le bon forum, car ma question ne porte pas sur la modélisation des tables de spécialisation en tant que tel, mais sur la gestion 'opérationnelle' de ces tables

    Prenons l'exemple suivant :

    Nom : bdd.jpg
Affichages : 149
Taille : 103,0 Ko

    Dans la table ADHERENT, on a la clé primaire numAdherent qui prendra par exemple les valeurs numAdh1, numAdh2, numAdh3
    Dans la table ETUDIANT, on aura la variable numAdherent qui prendra la valeur numAdh1
    Dans la table ENSEIGNANT, on aura la variable numAdherent qui prendra les valeurs numAdh2, numAdh3

    Ca c'est dans un fonctionnement optimal.

    Mais qu'est ce qui m'empêche de faire une requête INSERT dans la table ETUDIANT, ou la variable numAdherent prendrait la valeur numAdh2 ?
    Du coup on se retrouverait avec un étudiant qui a une clé primaire=numAdh2, et un enseignant qui a une clé primaire=numAdh2

    Si on considère que la relation de spécialisation est XT, comment faire pour eviter ce cas? quelle contrainte mettre en place ? (Trigger ?)


    Merci,
    Nico

  2. #2
    Expert éminent
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 235
    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 235
    Billets dans le blog
    16
    Par défaut
    Bonjour diverSIG,

    Selon la norme SQL, on utiliserait une assertion, mais les éditeurs de SGBD SQL sont frileux et ne proposent pas l’instruction CREATE ASSERTION. Moralité : mettre en oeuvre un trigger.

    Voyez par exemple la discussion :

    https://www.developpez.net/forums/d2.../#post12015094

    Quel est votre SGBD ? la grammaire de l’instruction CREATE TRIGGER est très différente d’un SGBD à l’autre...

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 516
    Par défaut
    pour l'instant, rien n'est fixé, c'est du défrichage pour un futur projet, mais à priori, ce serait du postgreSQL

    Nico

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 515
    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 515
    Par défaut
    Bonjour,
    Je ne sais pas pour les autres SGBD, mais SqlServer permet de déclarer des contraintes CHECK sur une table, qui permet de vérifier une assertion.
    On peut donc ici envisager une fonction qui va renvoyer le nombre d'enseignant ayant l'id passé en paramètre, et une contrainte sur la table Etudiant qui va vérifier que cette fonction renvoie bien 0 pour l'identifiant renseigné.
    Et la même chose dans l'autre sens.

    Tatayo.

  5. #5
    Expert éminent
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 235
    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 235
    Billets dans le blog
    16
    Par défaut
    Bonjour Tatayo,

    Citation Envoyé par Tatayo
    SqlServer permet de déclarer des contraintes CHECK sur une table, qui permet de vérifier une assertion
    Un exemple concret serait le bienvenu...

  6. #6
    Expert éminent
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 235
    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 235
    Billets dans le blog
    16
    Par défaut
    Tatayo, en fouillant, j’ai retrouvé ce qui va dans votre sens, dans une discussion avec dalinbm, où effectivement je crée une fonction et la contrainte concernée par la table impliquée (SGBD SQL Server).

    C’est ici :

    https://www.developpez.net/forums/d2.../#post12027028

Discussions similaires

  1. Contraintes sur les clés primaires des tables?
    Par Kristen Saphiroz dans le forum MkFramework
    Réponses: 4
    Dernier message: 16/09/2015, 17h16
  2. Contrainte sur les attributs des tables référencées
    Par prgasp77 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 02/12/2010, 19h00
  3. [MySQL] Contraintes sur les tables
    Par oranocha dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 01/02/2009, 18h55
  4. Quel ordre utiliser pour les contraintes sur les tables ?
    Par Icewall dans le forum Langage SQL
    Réponses: 14
    Dernier message: 20/04/2008, 20h52
  5. Réponses: 3
    Dernier message: 28/04/2005, 17h56

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