Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/11/2010, 16h55   #1
Invité de passage
 
Inscription : mai 2010
Messages : 13
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 13
Points : 0
Points : 0
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.
mariem_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 17h26   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 957
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 957
Points : 18 165
Points : 18 165
Envoyer un message via MSN à CinePhil
Citation:
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.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 18h06   #3
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 937
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 937
Points : 17 745
Points : 17 745
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 :
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 +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 23h05   #4
Invité de passage
 
Inscription : mai 2010
Messages : 13
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 13
Points : 0
Points : 0
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"
mariem_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 23h52   #5
Invité de passage
 
Inscription : mai 2010
Messages : 13
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 13
Points : 0
Points : 0
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 ??
mariem_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2010, 09h40   #6
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 957
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 957
Points : 18 165
Points : 18 165
Envoyer un message via MSN à CinePhil
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.

Citation:
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 :
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.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2010, 10h21   #7
Invité de passage
 
Inscription : mai 2010
Messages : 13
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 13
Points : 0
Points : 0
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
mariem_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2010, 10h38   #8
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 957
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 957
Points : 18 165
Points : 18 165
Envoyer un message via MSN à CinePhil
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.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/11/2010, 10h44   #9
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 937
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 937
Points : 17 745
Points : 17 745
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 +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/11/2010, 10h51   #10
Invité de passage
 
Inscription : mai 2010
Messages : 13
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 13
Points : 0
Points : 0
Merci bien monsieur Philippe Leménager et monsieur Frédéric BROUARD pour votre assistance.
mariem_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h15.


 
 
 
 
Partenaires

Hébergement Web