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 :

Détection des contraintes dans un fichier SQL


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 13
    Points : 7
    Points
    7
    Par défaut Détection des contraintes dans un fichier SQL
    Salut,
    s'il vous plait pouvez vous m'aider à comprendre comment peut on détecter l'existence des contraintes dans un fichier sql.

    Je vais essayer d'être plus précis :
    Nous savons que lors de la modélisation en UML on peut ajouter à notre modèle conceptuel des contraintes tels que disjoint, chevauchement, sous ensemble,etc.
    donc lors de la transformation du modèle conceptuel en modèle physique ces contraintes doivent figurer aussi dans le fichier sql. comment peut on donc les exprimer en sql et y a-t-il des moyens automatiques permettant de les détecter.

    Merci pour votre assistance.

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    disjoint, chevauchement, sous ensemble
    Étant plutôt spécialisé en Merise, tu peux donner des exemples de ce que tu entends par là ?

    Les contraintes natives dans un SGBDR sont :
    - les clés étrangères ;
    - les contraintes CHECK.

    Le reste doit être développé par des triggers, fonctions, procédures.

    Voir le site et/ou le livre de SQLPro pour plus d'informations sur les contraintes en SQL.

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 902
    Points : 53 143
    Points
    53 143
    Billets dans le blog
    6
    Par défaut
    Tout dépend des cardinalités des liens du modèle. Cela se réalise soit sous forme de contraintes CHECK soit sous forme de déclencheurs.

    Par exemple si je modélise des joueurs devant jouer des parties d'échec, j'aurais par exemple le modèle suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                      --1,n-->  association (joue les blancs) --1,1--> 
    Entité : Joueur                                                    entité : partie
                      --1,n-->  association (joue les noirs ) --1,1-->
    Dans ce cas une simple contrainte du type :
    joueur_id_blanc <> joueur_id_noir dans la table partie suffira !

    A +

  4. #4
    Futur Membre du Club
    Inscrit en
    Mai 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Étant plutôt spécialisé en Merise, tu peux donner des exemples de ce que tu entends par là ?
    la plupart de ces contraintes s'applique au niveau des concepts fils (définit avec l'héritage)
    par exemple la contrainte chevauchement désigne qu'une instance des spécialisations peut être simultanément une instance d'une autre

    si par exemple on a un lien généralisation/spécialisaion entre l'entité père "véhicule" et les entités fils : "à voile" , " à moteur", "terrestre", "marin"
    sachant que les deux premiers entités fils sont issus du critère "motorisation" et les deux derniers sont issus du critère "milieur"

    on peut ajouter la contrainte chevauchement entre les entités "terrestre " et " amoteur"

  5. #5
    Futur Membre du Club
    Inscrit en
    Mai 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Tout dépend des cardinalités des liens du modèle. Cela se réalise soit sous forme de contraintes CHECK soit sous forme de déclencheurs.
    Vous avez dit que cela se réalise par certaines moyens ..
    mais comment peut on juger qu'un fichier sql contient des contraintes de type chevauchement, disjoint..
    pour le modèle conceptuel il suffit de les voir présentés explicitement sur les diagrammes.
    est ce qu' au niveau physique il ya des règles bien déterminées ou des algorithmes permettant de détecter ces contraintes et dire qu'il existe une contrainte de type "..." entre les deux entités x et y ??

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par mariem_m Voir le message
    Vous avez dit que cela se réalise par certaines moyens ..
    mais comment peut on juger qu'un fichier sql contient des contraintes de type chevauchement, disjoint..
    pour le modèle conceptuel il suffit de les voir présentés explicitement sur les diagrammes.
    est ce qu' au niveau physique il ya des règles bien déterminées ou des algorithmes permettant de détecter ces contraintes et dire qu'il existe une contrainte de type "..." entre les deux entités x et y ??
    À ma connaissance non, sauf à aller chercher le code des contraintes dans information_schema et à l'analyser pour comprendre de quel type de contrainte il s'agit.

    si par exemple on a un lien généralisation/spécialisaion entre l'entité père "véhicule" et les entités fils : "à voile" , " à moteur", "terrestre", "marin"
    sachant que les deux premiers entités fils sont issus du critère "motorisation" et les deux derniers sont issus du critère "milieur"

    on peut ajouter la contrainte chevauchement entre les entités "terrestre " et " amoteur"
    Je ne suis pas sûr que les exemples soient bien choisis car un voilier peut être muni aussi d'un moteur pour les manoeuvres portuaires et un véhicule terrestre peut être amphibie.

    Le chevauchement est implicite puisqu'en fait ce n'est pas une contrainte mais une possibilité.
    L'exclusion par contre est une contrainte qui peut s'exprimer par une contrainte CHECK (sauf chez MySQL qui ignore ce mot clé et pour lequel il faut mettre en oeuvre un trigger) de type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CHECK NOT EXISTS 
    (
      SELECT *
      FROM autre_table
      WHERE une_colonne = NEW.colonne
    )
    Pas sûr de la syntaxe, ça fait un moment que je n'ai plus fait ça et je n'ai pas mon Brouard sous la main.

    Si le sous-ensemble est un héritage, alors on joue directement avec les clé étrangères.

    MCD Merise :
    Salarie -(1,1)----Etre----0,1- Personne

    Tables :
    Personne (prs_id, prs_nom, prs_prenom...)
    Salarie (slr_id_personne, slr_brut_mensuel...)

    slr_id_personne est une clé étrangère référençant Personne.prs_id, ce qui fait que la table Salarie est un sous-ensemble de la table Personne.

  7. #7
    Futur Membre du Club
    Inscrit en
    Mai 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Je ne suis pas sûr que les exemples soient bien choisis car un voilier peut être muni aussi d'un moteur pour les manoeuvres portuaires et un véhicule terrestre peut être amphibie.
    oui monsieur exactement. En faite j'ai choisi un exemple de chevauchement et il ya d'autres. je veux dire qu'entre ces différentes entité il peut y avoir un chevauchement qu'on doit le signaler par une contrainte explicite. c'est ça l'UML!! il offre plus de contrainte et de sémantique explicite

  8. #8
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Comme j'ai dit dans mon précédent message, le chevauchement est implicite en base de données. Rien n'interdit a priori qu'un véhicule à moteur soit aussi un véhicule à voile. Ce qu'il faut coder, ce sont les obligations et les interdictions.

    Et pour ça il y a les clés étrangères, les contraintes CHECK, les triggers, procédures et fonctions. Toutes ces choses peuvent être trouvées en consultant information_schema mais il faut éventuellement un interpréteur externe à la BDD pour détecter de quel type de contrainte il s'agit. D'autant plus qu'en ce qui concerne les procédures et fonctions, elles ne codent pas forcément des contraintes.

  9. #9
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 902
    Points : 53 143
    Points
    53 143
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par mariem_m Voir le message
    Vous avez dit que cela se réalise par certaines moyens ..
    mais comment peut on juger qu'un fichier sql contient des contraintes de type chevauchement, disjoint..
    pour le modèle conceptuel il suffit de les voir présentés explicitement sur les diagrammes.
    est ce qu' au niveau physique il ya des règles bien déterminées ou des algorithmes permettant de détecter ces contraintes et dire qu'il existe une contrainte de type "..." entre les deux entités x et y ??
    Certains outils de modélisation comme WinDesign permettent de modéliser au niveau conceptuel les contraintes d'exclusion, simultanéité, complétude...
    mais aussi de les réaliser dans le modèle physique soit par des contraintes soit par des déclencheurs.

    Citation Envoyé par mariem_m Voir le message
    oui monsieur exactement. En faite j'ai choisi un exemple de chevauchement et il ya d'autres. je veux dire qu'entre ces différentes entité il peut y avoir un chevauchement qu'on doit le signaler par une contrainte explicite. c'est ça l'UML!! il offre plus de contrainte et de sémantique explicite
    Heureusement que cela existe dans Merise 2 (dit Merise étendue) depuis bien plus longtemps que ce que UML 2, tgrés récent, a permis !
    Lisez les ouvrages de mon collègue Christian Soutou pour vous en convaincre.... Il a d'ailleurs consacré un chapitre entier de son livre à ce sujet

    A +

    A +

  10. #10
    Futur Membre du Club
    Inscrit en
    Mai 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Merci bien monsieur Philippe Leménager et monsieur Frédéric BROUARD pour votre assistance.

Discussions similaires

  1. Détection des erreurs dans un fichier texte (txt)
    Par M E H D I dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 25/05/2010, 10h14
  2. [ADO] Exécuter des requêtes contenues dans un fichier SQL
    Par Lucas Panny dans le forum Visual C++
    Réponses: 1
    Dernier message: 29/01/2008, 06h35
  3. Réponses: 3
    Dernier message: 22/02/2004, 20h09
  4. Temps d'accès à des données dans un fichier
    Par TONIAPEL dans le forum Assembleur
    Réponses: 5
    Dernier message: 28/09/2003, 15h21
  5. [debutant] preservation des espace dans un fichier xml
    Par Eric B dans le forum XML/XSL et SOAP
    Réponses: 7
    Dernier message: 03/09/2003, 09h43

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