Rechercher : dans
Par :

Normaliser une base de donnée

Dernière réponse le 5 déc 2004 à 03:21:37 gregof, le 4 oct 2004 à 16:21:51 
 Signaler ce message aux modérateurs

Salut a tous,
je voulais savoir comment vous vous y prendriez pour normaliser une table comme celle ci dessous


TABLE
--------

Ch1                      Ch2                      ch3
-----                     -----                    -----
aa                         zzz                      mmmm
aa                         zzz                      ppppp
aa                         kkk                     mmmm
aa                         kkk                     ppppp
aa                         jjj                        mmmm
aa                         jjj                        ppppp
bb                         zzz                      mmmm
bb                         zzz                      ppppp
bb                         kkk                     mmmm
bb                         kkk                     ppppp
bb                         jjj                        mmmm
cc                         zzz                      mmmm
cc                         zzz                      ppppp
cc                         kkk                     mmmm
cc                         kkk                     ppppp
cc                         jjj                        mmmm


si vous avez une idée je suis preneur

Meilleures réponses pour « Normaliser une base de donnée » dans :
Connexion à une base Oracle en php Voir1. Périmètre Cet article est un exemple de connexion à une base Oracle par le biais d'un script php. Cet article ne traite pas la configuration de votre serveur Oracle, et de votre client Oracle. Nous partons du principe que vous pouvez accéder à...
Affichage des paramètres Oracle VoirEn complément du fichier init.ora, il est possible de consulter la base de données pour prendre connaissance d'autres paramètres tels que max_open_cursors defined, taille d'un bloc ... Il suffit de lancer la commande suivante : SELECT name,...
Access - Rétablir les menus par défaut VoirRétablir le démarrage d'une base de données Access Cette astuce vous permettra de retrouver les menus par défaut et la fenêtre de gestion de la base d'Access si ceux-ci ont été modifiés. Vous avez configuré le démarrage de votre base de données...
PHP - Bases de données VoirPhp permet un interfaçage très simple avec un grand nombre de bases de données. Lorsqu'une base de données n'est pas directement supportée par Php, il est possible d'utiliser un driver ODBC, pilote standard pour communiquer avec les bases de...
Connexion à la base de données avec JDBC VoirConnexion à la base de données L'API (Application Programming Interface) JDBC, c'est-à-dire la bibliothèque de classes JDBC, se charge de trois étapes indispensables à la connexion à une base de données : la création d'une connexion à la...
Administrateur de bases de données VoirAdministrateur de bases de données L'administrateur de bases de données (parfois appelé responsable de bases de données ou en anglais database administrator, noté DBA) est chargé du maintien et de l'évolution des bases de données constituant le...

1

gregof, le 4 oct 2004 à 16:27:41

Ah oui, j'oubliais,
On effectue les recherches a partir du champ Ch1 et du champ Ch2 pour trouver le champ Ch3

ainsi que l'on effectue des recherches du Ch1 pour trouver le champ Ch2

Répondre à gregof

2

teebo, le 4 oct 2004 à 16:50:11

Salut,

Faudrait peut etre dire quelle norme tu veux :o)

*,*  Ce post a été écrit entièrement *,*
\_/  avec des molécules recyclées   \_/

Répondre à teebo

3

mohammed, le 4 oct 2004 à 21:45:11

Salut,
d'après ma ptite expériance où est la clé primaire.
à+.
Merci

Répondre à mohammed

4

gregof, le 5 oct 2004 à 08:14:17

Teebo :

...quelle norme tu veux ...


Oula, jen sais rien ????
tu parles de SQL89, SQL92, SQL99 ?
ca a une incidence a ce niveau?

Moi je parlais de lui appliquer simplement les regles de Codd

mohammed : effectivement, c'est justement ca qu'il faut lui appliquer en partie mais je ne sais pas comment m'y prendre pour normaliser tout en gardant a l'esprit que je dois optimiser l'exploitation de la BD (la recherche)


Sinon pour l'instant jai créé une table 3
PKCh3.1              Ch3.2
----------             --------
1                            a
2                            b
3                            c

jai créé une table 2
PKCh2.1              Ch2.2
----------             --------
1                            zzz
2                            kkk
3                            jjj

jai créé une table 1
PKCh1.1              Ch1.2
----------             --------
1                            ppppp
2                            mmm



Ensuite jai créé 2 tables liaisons
La premiere entre la table 3 et la table 2
FKCh3.1              FKCh2.1
----------             ----------
1                            1
2                            1
1                            2
2                            2
1                            3
2                            3


et la 2eme entre la table 2 et la table 1
FKCh2.1              FKCh1.1
----------             ----------
1                            1
2                            1
3                            1
1                            2
2                            2
3                            2
1                            3
2                            3
3                            3


Mais bon, déja je me demande si cest juste et en plus quand je ferai une recherche a partir de la table 1 (ex champ 1) pour trouver les relations avec la table 3 (ex champ 3) je doute que ce soit hyper optimisé car je devrais passer par la table 2 (ex champ 2)
Le seul avantage cest que jai supprimer la redondance d'info.
Quel est votre avis ?

PS : javais oublié : tout les (ex) champs sont obligatoires

Répondre à gregof

5

teebo, le 5 oct 2004 à 09:26:37
  • +1

Donc si tu utilises les regles de Codd tu es en 3eme Forme Normal de Boyes and Codd (heu orthographe?) enfin en 3FNBC quoi :o)

Je ne comprend pas l'interet de tes tables de liaisons 8-) A part de passer de aa a 1 mais ca reste la meme chose... tu peux faire les memes tables de liaisons sans passer par ta traduction du dessus...

Ce que tu peux faire par contre c'est

1 aa zzz
2 aa kkk
3 aa jjj
4 bb zzz .......

et une table

(1) 1 mmmm
(2) 1 pppp

Tu auras donc deux tables avec une cle primaire dans chaque...Si ma memoire est bonne ca devrait marcher mais verifie ca fait un moment que je ne suis plus dans la database...

*,*  Ce post a été écrit entièrement *,*
\_/  avec des molécules recyclées   \_/

Répondre à teebo

6

blux, le 5 oct 2004 à 10:35:44

Boyce-Codd, mon teebo, Boyce-Codd... :-)

A+ Blux

 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

7

teebo, le 5 oct 2004 à 10:37:27

Je savais bien qu'il y avait un truc qui deconnait aussi :o)
Boycott tu dis, OK je le note :o)

*,*  Ce post a été écrit entièrement *,*
\_/  avec des molécules recyclées   \_/

Répondre à teebo

8

blux, le 5 oct 2004 à 11:05:09

Voui !!!

http://fr.wikipedia.org/wiki/Boycott

A+ Blux

 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

9

gregof, le 8 oct 2004 à 01:13:21

Salut teebo et les autres

teebo ta solution cest bien ca ?

Table 1 
---------
PK_id        ch1        ch2    
-------       -----       -----
1                aa           zzz
2                aa           kkk
3                aa           jjj
4                bb           zzz
5                bb           kkk
6                bb           jjj
7                cc            zzz
8                cc            kkk
9                cc            jjj

PK_id étant la clef primaire

Table 2 
---------
PK_id        FKT1     ch2    
-------       -----      -----
1                1             mmmm
2                1             ppppp
3                2             mmmm 
4                2             ppppp
5                3             mmmm 
6                3             ppppp
7                4             mmmm 
8                4             ppppp
9                5             mmmm 
10              5             ppppp
.....


PK_id étant la clef primaire et FKT1 étant une clef étrangere référent a la clef primaire de la table 1 ?


parce que dans la table 1, elle peut quand meme etre encore normalisée quand on vois le champ ch1

pareil quand on voit la table 2 champ ch2 non?

c'est pour ca que jutilise mes fameuse table liaisons. elles permettent de faire des relation 1->n, 1->n

je m'explique :

Table 1 1 - n liaisontable1_2 n - 1Table 2 1 - n liaisontable2_3 n - 1Table 3

ainsi, on ne répete pas les chaines de caractères tel que aa ou pppp mais plutot des champs uniquement numérique (moins lourd donc plus rapide)

mais le probleme cest qu'avec mon systeme je dois faire plein de jointures (pas terrible question performance) surtout dans le cas ou quand je fait une recherche dans la table 1 par rapport a la table 3, je suis obligé de passer par la table 2 chose que dans le systeme teebo il ne faut pas

en gros, je suis un peu perdu :-|

qu'en pensez vous?

Répondre à gregof

10

teebo, le 8 oct 2004 à 07:41:32

Bonjour,
Tres vite (peut etre plus long cet apres midi si j'ai le temps et si j'y penses)

La normalisation n'a rien a voir avec l'optimisation (enfin rien a voir faut pas exagerer, elle fait partie du processus quand meme), il n'est nulle part question de taille des champs dans la normalisation. Que ce soit un booleen ou une chaine de 250 characteres, ca nous est egal :o)

Ensuite si tu veux optimiser un peu plus tu peux aussi prendre dans ta table un le champ 1 et 3 par exemple.

J'ai pas verifie qu'elle etait en 3FNBC j'avoue, c'est un premier jet, et comme je le dis je ne me souvien plus comment rapidement verifie ca, mais il me semble que tu auras du mal a faire mieux de maniere efficace (note que la 3FNBC n'est pas toujours la panacee non plus, ca depend si c'est pour un exo/TP ou si c'est pour la vraie vie ;o) )



*,*  Ce post a été écrit entièrement *,*
\_/  avec des molécules recyclées   \_/

Répondre à teebo

11

gregof, le 11 oct 2004 à 10:11:57

Bien en fait cest pour la "vraie vie" et ayant un existant, le commenditaire s'attend a une amélioration notable par rapport a l'ancienne version.
Donc, le but est d'etre le + performant dans la pratique et non dans la théorie :)

Répondre à gregof

12

teebo, le 11 oct 2004 à 10:22:49

Le probleme est que je n'ai pas la base sous les yeux :o)
Vu les exemples que tu donnes, une base de donnees object pourrait eventuellement arranger les choses...
Sinon ca depend aussi des requetes qui sont effectuees, lesquelles sont souvent faites, lesquelles doivent etre rapides,...

 . . C'est quoi une signure
\_/ 

Répondre à teebo

13

blux, le 11 oct 2004 à 10:36:38

Salut,

pour accélerer les requêtes, on peut effectivement "doublonner" des informations, créer des index, voir des tables supplémentaires...

Si cela peut accélérer les recherches, cela rend aussi les mises à jour plus longues...

De deux maux, il faut choisir le moindre...

A+ Blux

 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

14

 johnny cash, le 5 déc 2004 à 03:21:37

Citation ::

Ah oui, j'oubliais,
On effectue les recherches a partir du champ Ch1 et du champ Ch2 pour trouver le champ Ch3

ainsi que l'on effectue des recherches du Ch1 pour trouver le champ Ch2


loooooooooooooooooooooooool
merisement parlant, c'est pô bien du tout ca.
en merise ( nomenclature relationnelle , en 2 mots :p ) et bé :
A donne B et A + B donnent C est strictement interdit .
ca s'appelle la transitivitée .
c'est a dire que logiquement si A donne B et A+B donne C alors A donne C .

bye
ps : dsl g jamais eude dons d'explication. +

Répondre à johnny cash