Précédent   Forum des professionnels en informatique > Général Développement > Conception > Méthodes > Merise
Merise Systémique, Cycle projet (V, W), flux, traitements ... Avant de poster -> F.A.Q Merise
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 15/07/2011, 12h45   #1
Invité régulier
 
Homme William Beaussé
Étudiant
Inscription : juillet 2011
Messages : 16
Détails du profil
Informations personnelles :
Nom : Homme William Beaussé
Localisation : France, Oise (Picardie)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2011
Messages : 16
Points : 6
Points : 6
Par défaut Algorithme de recherche de clé étrangère

Bonjour,

J'aimerais trouver un algorithme qui pourrait détecter la présence de clé étrangère dans une base de données.

Je dispose de plusieurs informations comme le nom de la table (mais celui-ci peut changer), le nom de la colonne (mais celui-ci aussi peut changer). Non, ces informations ne sont pas des plus utiles.

En revanche, je dispose des cardinalités entre les 2 tables.

Donc, déjà, voici un petit listing des cas où on intègre une clé étrangère :

0,1 - 1,1
0,1 - 0,n
0,1 - 1,n
1,1 - 0,n
1,1 - 1,n

(Si j'en ai oublié, n'hésitez pas)

Donc j'aurais 2 questions, et il ne s'agit pas de programmation, nous sommes d'accord mais de théorie en base de données :

Est-il juste de généraliser et de dire que :

si la cardinalité maximum de la relation A vers la relation B est 1
ET
que la cardinalité maximum de la relation B vers la relation A est n
ALORS
il y'a une clé étrangère dans A ?

Sauf pour la relation de spécialisation me direz-vous, et voici donc ma 2ème question :

Est-il juste de dire qu'une relation est dite de "spécialisation" si elle dispose d'une clé primaire et d'une clé étrangère sur le même attribut ?

Dans le pire des cas, si je n'arrive pas à généraliser, je programmerais au cas par cas en listant toutes les combinaisons de cardinalités et en indiquant si oui ou non elles impliquent la présence d'une clé étrangère.

Merci d'avance.

Bonne journée.
William-Brenouille est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2011, 15h23   #2
Expert Confirmé Sénior

 
Avatar de fsmrel
 
Spécialiste en bases de données
Inscription : septembre 2006
Messages : 2 882
Détails du profil
Informations professionnelles :
Activité : Spécialiste en bases de données
Secteur : Conseil

Informations forums :
Inscription : septembre 2006
Messages : 2 882
Points : 5 116
Points : 5 116
Bonjour,


Vous postez dans le forum Merise et recensez les cardinalités : 0,1-1,1, etc.
Vous vous situez donc au niveau conceptuel. Tout ce que vous pouvez conjecturer est qu’il est possible qu’au niveau logique on ait l’intention, l’envie de mettre en œuvre des clés étrangères : il est possible qu’on ne le fasse pas et du reste, avant 1988 aucun SGBDR ne le permettait. Seul IMS/DB (SGBD hiérarchique le permettait par le biais des RULES P, L, V dans les DBD logiques). Maintenant, si vous avez le pouvoir d'imposer la mise en oeuvre de l'intégrité référentielle, alors n'hésitez pas !

Cela dit, vous oubliez le cas 0,1-0,1. En plus, dans tous les cas où il existe la cardinalité 0,1, lors de la dérivation du MCD en MLD, si l’on se veut respectueux de la théorie relationnelle (qui a excommunié le bonhomme NULL), on doit produire une table « associative », donc deux clés étrangères référençant chacune les deux tables associées. De même, dans le cas des cardinalités x,n-y,n, il y aura production d’une table associative, donc de deux clés étrangères (en fait n clés étrangères dans le cas des associations-types n-aires, avec n > 1). Et puis toutes les entités-types ne font pas l’objet de tables lors du passage au MLD (cf. l’entité-type DATE).
Bref, on est dans le monde des possibles, du bon vouloir de celui qui code les CREATE TABLE, du flou artistique, que sais-je...

Quand vous êtes au niveau tabulaire, disons SQL, la réalité des clés étrangères mises en oeuvre est connue grâce au catalogue relationnel qui fournit les tables système, le métamodèle comme dirait l’autre, contenant tout ce qui a été défini en termes de clés étrangères et il suffit de l’interroger à coups de requêtes SQL.


Citation:
Envoyé par William-Brenouille Voir le message
il ne s'agit pas de programmation, nous sommes d'accord mais de théorie en base de données
Quelle théorie des bases de données ? Définissez synthétiquement mais avec précision la théorie à laquelle vous pensez.
En attendant voici la définition la plus pertinente :
Le Modèle Relationnel de Données, ou théorie relationnelle (qui relève de la logique et des mathématiques appliquées) est défini par les cinq composants suivants (pour plus de détails, voyez l’ouvrage de C. J. Date (Database in depth: relational theory for practitioners) :
  1. Une collection non limitée de types scalaires (dont notamment le type booléen (valeur de vérité)),
  2. Un générateur de type Relation et l’interprétation attendue des types de relations générés par ce moyen,
  3. Les mécanismes pour définir des variables relationnelles du type de relation voulu,
  4. L’opération d’affectation relationnelle permettant d’affecter des valeurs de relations à ces variables,
  5. Une collection non limitée d’opérateurs relationnels génériques (« l’algèbre relationnelle »), pour produire des valeurs de relations à partir d’autres valeurs de relations.
Citation:
Envoyé par William-Brenouille Voir le message
Est-il juste de dire qu'une relation de spécialisation si elle dispose d'une clé primaire et d'une clé étrangère sur le même attribut ?
La relation de spécialisation dont vous faites mention est du niveau MCD, donc étrangère à la théorie relationnelle. Dans cette théorie, la relation de spécialisation existe (avec héritage et tout le toutim), mais au niveau TYPE seulement (par exemple, le type CERCLE est une spécialisation du type ELLIPSE).

=>

Commencez par détricoter les niveaux, MCD d’un côté et MLD de l’autre, et préciser ce que vous envisagez exactement de faire à chaque niveau. Pour résumer, quand vous écrivez :
« détecter la présence de clé étrangère dans une base de données »,
cela suppose en effet une exploration du catalogue relationnel, un travail simple, et radicalement différent de l’exploitation des cardinalités merisiennes, a priori manuelle, à moins que votre AGL ne vous permette d’automatiser votre tâche.
__________________
_
Faites simple, mais pas plus simple ! (A. Einstein)
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 (Bonne lecture !)
fsmrel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2011, 17h16   #3
Expert Confirmé Sénior
 
Développeur informatique
Inscription : novembre 2006
Messages : 4 215
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : novembre 2006
Messages : 4 215
Points : 5 291
Points : 5 291
Citation:
Envoyé par William-Brenouille Voir le message
J'aimerais trouver un algorithme qui pourrait détecter la présence de clé étrangère dans une base de données.
d'un point de vue pratico pratique avec l'API ODBC c'est possible de trouver la présence de clé étrangère dans une table...
maintenant pour ce qui est de la théorie je m'en remets à d'autres personnes..
__________________
Alea Jacta Est
Mat.M est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2011, 20h54   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 007
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 : 11 007
Points : 18 278
Points : 18 278
Envoyer un message via MSN à CinePhil
Voir cet article de mon blog qui explore toutes les cardinalités et leurs conséquences en terme de clés étrangères et de tables associatives.
__________________
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 17/07/2011, 22h00   #5
Invité régulier
 
Homme William Beaussé
Étudiant
Inscription : juillet 2011
Messages : 16
Détails du profil
Informations personnelles :
Nom : Homme William Beaussé
Localisation : France, Oise (Picardie)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2011
Messages : 16
Points : 6
Points : 6
Désolé pour les différents abus de langage dans ma question. Malgré ça, toutes les réponses m'auront aidées donc merci à tous.

Bonsoir
William-Brenouille est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h04.


 
 
 
 
Partenaires

Hébergement Web