Nomalisation et couverture minimale - SQL/NoSQL - Programmation
Marsh Posté le 21-07-2003 à 19:43:48
ya rien qui explique ca dans mon cours et google ne pas aide !!!!
Marsh Posté le 21-07-2003 à 19:48:25
j'ai RIEN compris
C'est quoi cette histoire de dépendances ?
Tu peux être plus expolicite ?
Tu veux quoi au juste ?
Marsh Posté le 21-07-2003 à 19:57:49
ok dependances :
un vol part tjs a la meme heure...
vol est fonction de lheure
donc heure -> vol
(heure determine un vol)
ok ?????
ici ca ete remplace par A,B,C,... par ce que le nom des colonnes napporte rien
bon ta les regles aussi
par exemple
A-> B (A determine B)
B-> C
donc
A -> C
ensuite je doit trouver la couverture minimale c a dire eliminer toutes ce qui peut etre deduit par les regles de transitivité ...
Marsh Posté le 21-07-2003 à 20:07:48
ok.
bah y'a pas besoin de faire de matrice pour ça...
PS: pis moi, je réfléchis mieu avec des noms aux colonnes, ça me permet de me réprésenter le problème. Avec A, B, ... ça me saoule, j'y comprends rien, c'est pour ça que j'ai pas voulu faire d'école d'ingé
Marsh Posté le 21-07-2003 à 20:09:15
ptet que quelqun dautre saura maider , je desepere ,.. c pourtant pas super dur
Marsh Posté le 21-07-2003 à 20:11:05
AB->C
AB->D
AB->E
AB->F
B->C
D->E
D->F
G->A
Donnc donc :
B -> C
G -> A
GB -> D, E, F
Simple comme choux.
Après, tu te démerde avec ça, parceque je sais pas ce que veulent dire "couverture minimale", "identifiants de R" et "décomposer en BCFN"... Comment rendre compliqué un problème quand il est simple
Marsh Posté le 21-07-2003 à 20:13:36
PS: la recomposition de la matrice que j'ai faite, le cerveau humain est capable de la faire dès l'âge de 4 ans, et sans éducation, ça fait partie des capacités primaires de résolution des problèmes de notre cerveau.
Les tests psychologiques faits à la maternelle pour détecter les attardés graves contiennent ce genre de test. Donc ceux qui peuvent pas résoudre le problème doivent aller faire un tour en hôpital psy, ils ont un bout du cerveau qui n'est pas fini
Marsh Posté le 21-07-2003 à 20:15:08
MagicBuzz a écrit : B -> C |
On peut d'ailleurs réduire encore un coup, mais à ce moment, avec perte d'infos, mais sans risque d'incohérence :
GB -> A, C, D, E, F
En fait, seuls B et G participent à la clé primaire.
Marsh Posté le 22-07-2003 à 09:39:52
La couverture minimale:
décomposer les dépendances : elles le sont deja
degager les redondances et transitivités:
AB->C
B->C ==> AB->C ne sert a rien
AB->D
D->E ==> AB->E ne sert a rien
AB->D
D->F ==> AB->F ne sert a rien
je crois que c tout
il reste
AB->D
B->C
D->E
D->F
G->A
regroupons les DF
E1 : AB->D
E2 : B->C
E3 : D->EF
E4 : G->A
voila ta couverture minimale(et donc tes relations en 3NF)
Identifiant de R:
La clé de R doit contenir au minimum les attributs qui ne sont determinés par rien (jamais a DROITE dans les DF)
B et G appartiennent a la clé
BG est il clé?
G->A (ABG)
AB->D (ABDG)
B->C (ABCDG)
D->EF (ABCDEFG)=R donc BG est une clé possible de R
Pour une modélisation de R en BCNF on va utiliser la couverture minimale (qui est en 3NF pour le moment):
est elle en BCNF?
je crois que oui parce qu il n y a pas de dépendance autre que celle de chaque clé dans la relation (mais je suis plus sur de comment ca marche
Edit:boulette inside
Marsh Posté le 22-07-2003 à 09:44:13
hop le fou a écrit : |
jamais à droite, non ?
Marsh Posté le 22-07-2003 à 09:45:10
ReplyMarsh Posté le 22-07-2003 à 16:45:33
hop le fou a écrit : La couverture minimale: |
wow ca va now jai presque tout capté
cependant qd tu fait
AB->C
B->C ==> AB->C ne sert a rien
si ta elimine ab->c au lieu de b->c cest parce que c dependait dun plus grand nb de cle (ab) au lieu de (a) cest ca??
si tavait eu
b->c
e->c
on faisait comment ???? tu garde b, e ou les deux ?
et enfin tu commence par eliminer lequels des groupes en preimer
ici ta commence par toccuper de
AB->C
B->C ==> AB->C ne sert a rien
puis
AB->D
D->E ==> AB->E ne sert a rien
bon ici ca navait pas dimportance parce qu'apparament il ny a pas de lien entre eux mais sinon on commence par lequel???????
pour bcnf c attribut cle determine attribut non clé....
AB->D ????
B->C ok
D->EF ??
G->A ok
Marsh Posté le 22-07-2003 à 17:04:37
red faction a écrit : |
pour simplifier tu peux voir ca comme une transitivité
AB->B (forcement)
B->C ==> AB->C donc tu pe la degager c une dependance transitive (mais c juste une facon de voir les choses pour mieux comprendre)
b->c et e->c doivent etre gardé tous les 2 (sauf si il y a une relation entre les 2 du genre b->e par exemple)
bof normalement on s en fout je crois qu on arrivera toujours au meme résultat (je crois)
en général on commence par ceux qu on voit en premier
ben oui c qd ta une clé qui détermine une clé que ca marche pas je crois (m en souviens plu...) mais c dans la meme relation il me semble...
la tes clés sont AB, B, D et G
il n'y a plu de pb
c qd tu avais une seule relation que tu avais ce pb
la je crois que c bon...
Marsh Posté le 22-07-2003 à 17:11:30
Euh... Pour le coup du B -> C
Je trouve ça chelou...
Parceque d'un point de vue de pure logique, c'est complètement faux :
Si AB -> C
=> à tout couple unique AB correspond un C différent
Si B -> C
=> à toute valeur de B correspond un C différent
Ca veux pas dire du tout pareil !
Exemple :
Pour AB -> C
A = 1
B = 1
-> J'ai une valeur de C "c11"
A = 1
B = 2
-> J'ai une valeur de C "c12"
Maintenant, avec B -> C
A = 1
B = 1
=> C = "c11"
A = 2
B = 1
=> C = "c11" (bah ouais, B n'a pas changé, donc C non plus...)
Tu perds donc l'info comme quoi C n'est pas dépendant de A.
Je sais pas à quoi vous servent ces calculs qui me semble aussi débiles que le reste du programme d'école d'ingé, mais d'un point de vue SGBD, c'est capital.
Dans la pratique, vous allez lire deux fois plus d'infos pour rien quand vous allez vouloir retrouver C. C'est purement débile.
Marsh Posté le 22-07-2003 à 17:13:57
MagicBuzz a écrit : |
jaloux
Marsh Posté le 22-07-2003 à 17:15:10
je risque pas d'être jaloux de gens qui se font chier à bouffer des trucs aussi indigestes qu'inutile pendant 5 ans, qu'ils doivent ensuite oublierpour apprendre à travailler...
Marsh Posté le 22-07-2003 à 17:15:28
MagicBuzz a écrit : je risque pas d'être jaloux de gens qui se font chier à bouffer des trucs aussi indigestes qu'inutile pendant 5 ans, qu'ils doivent ensuite oublierpour apprendre à travailler... |
désolé, tu trollais, je pouvais pas te louper
et tu retrolles par dessus en plus pfff
Marsh Posté le 22-07-2003 à 17:16:05
noldor a écrit : désolé, ct un troll, je pouvais pas te louper |
et moi, je ne pouvais pas ne pas répondre à ta réponse
Marsh Posté le 22-07-2003 à 17:16:22
ReplyMarsh Posté le 22-07-2003 à 17:20:40
oula comme ca par en sucette
sinon finalement je garde quoi pour etre coherent
B->C
ou
AB->C
jcrois que jvais faire un sondage pour finir
Marsh Posté le 22-07-2003 à 17:21:37
red faction a écrit : oula comme ca par en sucette |
si tu as B->C ET AB->C, la relation AB->C est superflu
je pourrais aussi bien écrire BZ->C
Marsh Posté le 22-07-2003 à 17:47:35
ReplyMarsh Posté le 22-07-2003 à 17:49:19
T'ain comment chuis trop fort, chais même pas de quoi on parle et j'ai bon quand même
Heureusement que j'ai pas fait une école, je me serais trop fait chier
Marsh Posté le 22-07-2003 à 17:53:39
MagicBuzz a écrit : T'ain comment chuis trop fort, chais même pas de quoi on parle et j'ai bon quand même |
les cours de BDD sont les plus soporifiques auxquels il m'ait été donné d'assister
Marsh Posté le 22-07-2003 à 22:55:35
sinon, juste comme ça, ça correspond à quoi les différents termes dont vous avez parlé, et votre recherche de la couverture minimale (suffit de mettre une bonne femme dans la base, y'a pas de problème, restera plus qu'un tout petit bout de couverture) ça sert à quoi ?
quels sont les objectifs de ces trucs barbares ? quelle réalité ?
parceque grossomodo, mise à part de la masturbation intélectuelle, je vois pas trop quelle réalité se cache derrière.
une table possédant de telles dépendances est par essence ma modélisée (du moins, certaines dépendances me semblent grotesques et me font penser à une CIF mal modélisée, genre le coup du G->A)
Sinon, je vois vaguement une réalité au niveau des indexes... Mais à nouveau, cette démarche me semble au niveau des ingénieurs à la sortie des écoles : on s'en fout du théorique, si ton champs sert à rien parcequ'aucune requête s'appuie dessus, ben tu le crées pas, et si un index est non-unique et non discriminant, c'est pas pour autant qu'il ne faut pas le créer, tu te bases sur tes besoins, pas sur de la théorie, qui généralement très détachée de la réalité, surtout quand il s'agit de bdd.
Donc chuis un peu paumé là... C'est quoi, et c'est censé servir à quoi ?
Marsh Posté le 22-07-2003 à 23:04:52
MagicBuzz a écrit : sinon, juste comme ça, ça correspond à quoi les différents termes dont vous avez parlé, et votre recherche de la couverture minimale (suffit de mettre une bonne femme dans la base, y'a pas de problème, restera plus qu'un tout petit bout de couverture) ça sert à quoi ? |
Les formes normales (ouh là, j'ai failli me faire mal à un neurone pour me rappeler de ça ... ), ça te dit qqchose ?
Marsh Posté le 22-07-2003 à 23:14:21
Zzozo a écrit : |
nope. sinon, je pense que j'aurais fais le raprochement
je veux pas une explication dans le détail, juste un bout d'explication pour avoir une idée de ce que c'est et de ce à quoi ça sert.
genre si je veux t'expliquer la notion de descripteur, qui fait l'objet de la thèse d'un de mes anciens chefs de projets, je vais pas chercher à rentrer dans le détail. je vais juste de dire que c'est une modélisation dans une série de tables à deux dimensions avec des relations par couple de dimension qui permet de géréer un nombre infini de dimensions de façon totalement générique (jamais tu n'as à faire évoluer le modèle pour ajouter une dimension à un élément ou à un groupe d'élément).
ça sert par exemple quand sur un site marchant tu vends de la moquette : t'as une dimension pour la couleur, pour le type de lavage, pour les prix en fonction de la surface, pour le type de poil, mais aussi pour affecter une tranche d'unités pour la mesure de la surface, ou pour affecter des unités de mesure à des attributs... et puis sur ce site, tu vends aussi des stylo, qui mise à part la couleur, n'ont aucune dimension commune. et pourtant on peut utiliser le même modèle et les mêmes requêtes pour chercher les infos rattachées.
voilà, en gros, je veux une sorte d'explication dans ce genre : pas dans le détail, juste histoire de me faire une idée de ce que c'est et de ce à quoi ça sert
n'hésite pas à illustrer d'un exemple concrèt comme moi, c'est bien plus simple à comprendre que des notions méthématiques qui ne veulent rien dire (pour moi en tout cas )
Marsh Posté le 23-07-2003 à 08:59:25
Salut salut
Bon, la décomposition en formes normales, c'est les bases de l'algèbre relationnelle qui a donné naissance au modèle relationnel qu'on nomma SQL si j'ai bonne mémoire
bouquin de référence (entre autres), de Gardarin chez Eyrolles
Le pb posé initialement, il devient + clair si on essaie de pondre un algo propre qui détermine les clés à partir de la liste des dépendances fonctionnelles, & pour çà on est obligé d'en passer par la production de la couverture minimale du graphe des D.F
La 3e forme normale de Boyce-Codd Kent doit dire que tout attribut non clé est pleinement et directement dépendant d'un attribut clé mais chuis pas tout à fait sur
alors si C dépend fonctionnellement de A et de B et que C dépend fonctionnellement de B, on garde B->C et B est la clé primaire
mais en général, pas besoin de çà pour produire un modèle correct, on peut le faire de tête...
Cela étant, l'expérience m'a montré que les clés composées doivent être proscrites...
Marsh Posté le 23-07-2003 à 16:53:22
instantdharma a écrit : Salut salut |
Je bosse énormément avec des bases d'ERP, et les clés composées sont très courantes, tout comme les clés alternatives.
J'ai souvent des clés composées de plus de 5 champs, et parfois jusqu'à 10 clés alternatives pour une même table (même pas peur )
Bah ça permet d'avoir des performances excellentes alors qu'une clé primaire unique sera généralement trop détâchée des infos que la table contient pour qu'un index unique correspondant soit performant.
Marsh Posté le 24-07-2003 à 11:19:02
Oui mais magicBuz
1. tu assimiles clé primaire et index de clé primaire, ce qui est fondamentalement différent.
2. A partir du moment ou tu "navigues" dans ta base, les jointures sur une clé primaire unique ne sont pas plus lentes que des jointures sur des clés composées, dans le fond cela revient au même puisque les clés primaires sont indexées, mais si ta clé primaire est composée alors les indexs sont simplement + lourds à gérer et à traiter lors des mises à jour, + longues à développer & à maintenir, + lourdes à faire évoluer, et bien + lourdes à traiter dans une application cliente.
3. Pour un accès direct à la table source (table d'origine de cette fameuse clé primaire composée), la clé composite est une excellente clé concurrente unique, que l'on peut gérer au moyen d'un index unique supplémentaire... avantage : l'unicité de la clé composite peut être gérée au moyen d'une contrainte simple sur la table, que l'on peut supprimer très simplement le cas échéant...
sur le plan du nombre et de la taille des indexs, la balance est vite faite : une seule table possède un index supplémentaire, tous les indexs de clé étrangère sont + simples et + rapides car fondés sur la clé unique redondante
sur le plan de la documentation, il est aisé de garder une trace explicite de ce choix de modélisation
En ce qui concerne ta base avec des clés énormes et si nombreuses sur une seule table, je serais curieux d'en voir le modèle , parce que tu dois avoir en + bp de problèmes de maintenance et des soucis de mise à jour. En outre, à première vue, tant de clés alternatives sur une seule table traduisent quasi-immanquablement un lourd problème de modélisation.
De toute façon, ce sujet de discussion mérite d'être approfondi...
Marsh Posté le 24-07-2003 à 17:14:50
Pas reop d'accord pour ce qui est de la rapidité : une clé composée peut être beaucoup plus rapide qu'une clé unitaire.
En effet, selon les paramètres de l'index unique et de tes données, le premier champ permettra souvent à partir d'un nombre limité de valeurs de filtrer énormément les données des autres champs et ainsi de suite.
Ainsi, la recherche d'une ligne sera bien plus rapide avec une clé composée, puisqu'on a pas besoin de scanner tout l'index.
Idem pour les mises à jour.
Imagine une table avec deux champs :
A et B qui servent de clé primaire.
A est un int allant de 0 à 9
B est un int allant de 0 à 9
La combinaison des deux donne donc un ensemble de 100 valeurs possibles.
Si j'insère 5 et 3 les vérifications d'intégrité sont bien plus rapides :
-> La première vérification porte sur 10 lignes
-> Le seconde porte sur 10 lignes
J'ai donc un maximum de 20 lignes scannées
Maintenant, si j'ai une clé unitaire, pour retrouver le même nombre de possibilité, je doit être capable d'aller de 0 à 99
Donc lors d'une mise à jour, j'aurai jusqu'à 100 lignes à scanner.
C'est donc 5 fois plus lent. (dans la pratique, ce n'est pas vrai, parcequ'un index est généralement trié, donc j'aurai 3 niveaux suppérieurs de recherche (si on se base sur une recherche dicotomique)
Marsh Posté le 24-07-2003 à 17:25:49
Deplus, imagine une table produit, et un catalogue étant sur 3 niveaux maximum.
Tu veux afficher :
Famille > Sous-Famille > Sous-sous-famille > Produit
Si tu te base sur un "famid", alors tu vas devoir rechercher la sous-sous-famille en premier, rechercher sa mère, puis là mère de la mère. Tu dois faire des traîtements relativement complexes pour pas grand chose.
Avec une clée composée, tu n'a qu'à faire une requête dans la table des familles avec fam, ' ', ' ' pour récupérer la famille, fam, subfam, ' ' pour la sous-famille, et fam, subfam, subsubfam pour récupérer la sous-sous-famille.
Les traîtement est donc plus simple et plus rapide, puisque tu as déjà toutes les infos dès le départ... Imagine que tu ne veuille qu'afficher les codes au lieu des libellés, avec la clé composée, tu les as déjà.
Marsh Posté le 21-07-2003 à 19:42:45
J?ai un table R(A,B,C,D,E,F,G)
et les dependances :
AB->C
AB->D
AB->E
AB->F
B->C
D->E
D->F
G->A
Je doit trouver la couverture minimale
Les identifiants de R
Decomposer en BCFN
Apres avoir mit les dependances dans un matrice jobtient ca :
Par transitivité : fermeture transitive
Le probleme apres cest pour trouve la couverture minimale je vois pas tres bien ce quil faut eliminer et surtout quoi en premier
Apres ici jelimine quoi ???????????????
Soit jelimine le dessus et je laisse AB jobtient :
AB->C
AB->D
AB->E
AB->F
G->A
Avec A,B,G comme identifiant
ou alors :
B->C
D->E
D->F
G->A
Bref si qqn pouvait me dire par quoi on commencer...
Message édité par red faction le 22-07-2003 à 16:28:42