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
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 491
    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 : 67
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 191
    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 191
    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...
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 491
    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 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 427
    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 191
    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 191
    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...
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  6. #6
    Expert éminent
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 191
    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 191
    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
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

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, 16h16
  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, 18h00
  3. [MySQL] Contraintes sur les tables
    Par oranocha dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 01/02/2009, 17h55
  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, 19h52
  5. Réponses: 3
    Dernier message: 28/04/2005, 16h56

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