|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre éprouvé
![]() Ingénieur développement logiciels Inscription : avril 2009 Messages : 501 ![]() |
Bonjour je cherche à trouver une requête mais je ne vois pas comment m'y prendre.
J'ai une table qui a trois a attributs : A B et C pour faire simple le triplet ABC est ma clé primaire. J'ai une dépendance fonctionnelle (non implémentée ici) en A et B C'est à dire que pour tout élément de A distinct, la valeur de B n'a qu'une seule possibilté Par exemple A B C --------- 1 2 3 1 2 4 1 2 5 8 9 4 8 9 0 8 9 5 7 2 1 7 2 8 Si A vaut 1 alors B vaut 2 ais si B vaut 2 alors je ne connais pas A (ici 1 et 7) Or dans ma base actuelle j'aimerais récupérer toutes les valeurs de A et B qui ne respecte pas cette condition. J'ai essayé avec des count(*), having count et group mais n'ai pas réussi. Comment dois-je m'y prendre ? |
|
|
00
|
|
|
#2 | ||
![]() ![]() |
Essaie ceci :
Code :
__________________
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
|
|
|
#3 | |
|
Membre Expert
![]() Responsable de service informatique Inscription : janvier 2009 Messages : 1 082 ![]() |
Bonjour,
Citation:
Dans l'exemple, quand A vaut 1, B vaut 2, quand A vaut 8, B vaut 9 et quand A vaut 7, B vaut 2. Il n'y a pas inversion de A et B quelquepart dans l'énoncé ? Tatayo. |
|
|
|
00
|
|
|
#4 | ||
|
Membre éprouvé
![]() Ingénieur développement logiciels Inscription : avril 2009 Messages : 501 ![]() |
C'est presque ça !
Il me sort quelque chose qui pourrait être ce que je cherche. Par contre il ne sort la ligne qu'une seule fois J'ai fais Code :
|
||
|
|
00
|
|
|
#5 | |
|
Membre éprouvé
![]() Ingénieur développement logiciels Inscription : avril 2009 Messages : 501 ![]() |
Citation:
Or visiblement j'ai ça : A B C --------- 1 2 3 1 2 4 1 2 5 8 9 4 8 9 0 8 9 5 7 2 1 7 2 8 7 9 4 7 6 1 Si A vaut 7 alors B vaut soit 2 soit 9 soit 6, mais pas plus d'un à la fois... J'aimerais intervenir pour corriger |
|
|
|
00
|
|
|
#6 | ||
|
Membre Expert
![]() Responsable de service informatique Inscription : janvier 2009 Messages : 1 082 ![]() |
Et avec ceci:
Code SQL :
Tatayo. |
||
|
|
00
|
|
|
#7 | |
|
Expert Confirmé Sénior
![]() ![]() ![]() Spécialiste en bases de données Inscription : septembre 2006 Messages : 2 882 ![]() |
Bonsoir,
Citation:
Par ailleurs, toujours du fait de la dépendance fonctionnelle, la table viole la deuxième forme normale et devrait théoriquement être décomposée en deux tables : T1 {A, B} de clé primaire {A}Quand vous aurez réparé les dégâts, normalisez en mettant en œuvre T1 et T2, et, pour respecter la 9e des 12 règles de Codd, définissez une vue qui soit la jointure naturelle de T1 et T2 et représente votre table actuelle. Si on vous empêche de procéder ainsi, mettez au moins en œuvre un trigger permettant de faire respecter la dépendance fonctionnelle {A} -> {B}.
__________________
_ 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 !) |
|
|
|
10
|
|
|
#8 |
|
Membre éprouvé
![]() Ingénieur développement logiciels Inscription : avril 2009 Messages : 501 ![]() |
Tatayo : merci beaucoup ça fonctionne niquel !! J'ai rajouté un distinct pour ne garder qu'un exemplaire des lignes
fsmrel : C'est vrai tu as raison, du fait que j'ai une dépendance fonctionnelle. Sinon, merci, je commence à comprendre l'intérêt des vues. Par contre, en quoi cette architecture poserait problème ? |
|
|
00
|
|
|
#9 | ||
|
Expert Confirmé Sénior
![]() ![]() ![]() Spécialiste en bases de données Inscription : septembre 2006 Messages : 2 882 ![]() |
La dépendance fonctionnelle {A} -> {B} est la traduction d’une règle de gestion de votre système d’information. Ne pas la prendre en compte conduit — entre autres — aux anomalies que vous êtes amené à corriger (et qui ne manqueront pas de se reproduire), et heureusement que des gens comme CinePhil et tatayo sont là pour vous aider à sortir du pétrin...
Par ailleurs, le viol de la deuxième forme normale engendre des redondances, du genre de celles qui apparaissent dans votre exemple : si l’on apprend n fois que A = 1, vous devez répéter n fois que B = 2 alors qu’une fois suffit. Si n = cent millions, avouez qu’il y a de la grosse gabegie. Si vous avez plusieurs tables dans cette situation, ça fait vraiment désordre et la situation devient plus que périlleuse. Par ailleurs, tenez compte des avertissements classiques concernant les difficultés de mise à jour inhérentes à votre architecture. Appliquez le théorème de Heath et après décomposition de votre table, les choses ressembleront à ceci, à supposer que si A vaut 1, B doit valoir 2, etc.) : Code :
Bref, visez à construire des structures saines, notamment en maîtrisant la normalisation des bases de données.
__________________
_ 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 !) |
||
|
|
10
|
Copyright © 2000-2012 - www.developpez.com