|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() William BeausséÉtudiant Inscription : juillet 2011 Messages : 16 ![]() |
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. |
|
|
00
|
|
|
#2 | ||
|
Expert Confirmé Sénior
![]() ![]() ![]() Spécialiste en bases de données Inscription : septembre 2006 Messages : 2 882 ![]() |
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:
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) : Citation:
=> 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 !) |
||
|
|
00
|
|
|
#3 | |
|
Expert Confirmé Sénior
![]() Développeur informatique Inscription : novembre 2006 Messages : 4 215 ![]() |
Citation:
maintenant pour ce qui est de la théorie je m'en remets à d'autres personnes..
__________________
Alea Jacta Est |
|
|
|
00
|
|
|
#4 |
![]() ![]() |
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 ! |
|
00
|
|
|
#5 |
|
Invité régulier
![]() William BeausséÉtudiant Inscription : juillet 2011 Messages : 16 ![]() |
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 |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com