|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Futur Membre du Club
![]() Inscription : mars 2006 Messages : 24 ![]() |
Bonjour,
À la fin de mes études d'informatiques, l'entrée dans la vie professionnelle m'a vite faite comprendre que la théorie des formes normalles étaient souvent sabotées par les obligations de gain de temps de développement. J'ai donc fini par oublier le vocabulaire des formes normalles et créer mes tables plus par expérience qu'avec l'aide de la théorie. Maintenant, j'aimerai bien m'y remettre donc j'ai déjà lu Dénormalisation de table. Quand ? et entre la theorie et la pratique! mais j'ai encore des zones obscures dans la conception des tables. J'ai par exemple cette table Client ("id_client" est une clé primaire et "type_contrat" une clé étrangère) Code :
À partir de là, je me demande si en suivant la théorie des Formes Normales, j'aurais pu découper ma table dès le début ? Ou alors il s'agit uniquement d'optimisation et donc ça se rapporte à la question "Quand dénormaliser ?" qui a pour réponse "Après avoir analysé le système en production" ? |
||
|
|
00
|
|
|
#2 | ||||
|
Expert Confirmé Sénior
![]() ![]() ![]() Spécialiste en bases de données Inscription : septembre 2006 Messages : 2 887 ![]() |
Bonjour VH,
La théorie de la normalisation fait partie du Modèle Relationnel de Données alors que les valeurs nulles en sont bannies. Pour être en conformité (et en prime procéder à un dégraissage sérieux), il suffit de casser la table Client en deux (comme lorsqu’on normalise) : Code :
Concernant la contrainte qui veut que seuls les clients ayant un contrat de type B puissent figurer dans la table Offre_Du_Moment, du point de vue du standard (ou norme) SQL, vous pouvez coder quelque chose de ce genre : Code :
Pour vous rafraîchir la mémoire quant à la normalisation des tables, vous pouvez lire la discussion : http://www.developpez.net/forums/sho...d.php?t=281221
__________________
_ 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 | ||
|
Futur Membre du Club
![]() Inscription : mars 2006 Messages : 24 ![]() |
Citation:
donc j'aurais pu le prévoir dès le début Citation:
de plus j'ai tendance à gérer ce genre de contrainte dans mon code et comme ça je limite l'utilisation du SGBDR au simple stockage des données. Je pense que ça m'aide aussi à construire des tables correctes puisqu'il ne faut pas qu'on puisse remplir les tables avec des données qui ne sont pas cohérentes entre elles par contre en partant de ce principe, je mets systématiquement les champs en "NULL acceptés" puisque dans ma logique c'est à mon code de gérer l'insertion de valeurs correctes donc je vais revoir ce point |
||
|
|
00
|
|
|
#4 | ||||
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
Citation:
Citation:
Code :
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
||||
|
00
|
|
|
#5 | |
|
Futur Membre du Club
![]() Inscription : mars 2006 Messages : 24 ![]() |
Citation:
ce que j'ai prévu de faire c'est de concevoir mes prochaines tables avec uniquement des champs "NOT NULL" merci à vous tous pour vos explications |
|
|
|
00
|
|
|
#6 | |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
Citation:
Petite anecdote... Un jour j'audite une application dans laquelle les développeurs avient tout mis en NOT NULL. Il s'agissait d'un site web de vente de lingerie fine.... Or la date de naissance des clients étaient rarement renseigné et comme c'était du NOT NULL ils mettaient par défaut 01/01/1900. Quand on a voulu faire des statistiques de vente on s'est aperçut que la moyenne d'âge des clients qui achetaient des strings avec dentelles était de 84 ans. Je leur ait alors dit de se reconvertir dans le DAMART !!! A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
|
00
|
|
|
#7 | ||
|
Futur Membre du Club
![]() Inscription : mars 2006 Messages : 24 ![]() |
Citation:
ça veut dire que vous êtes plutot d'accord avec ce que j'ai écris plus haut là ? Citation:
Est ce que mon raisonnement tient la route ? |
||
|
|
00
|
|
|
#8 | ||||
|
Expert Confirmé Sénior
![]() ![]() ![]() Spécialiste en bases de données Inscription : septembre 2006 Messages : 2 887 ![]() |
Bonsoir,
Citation:
Au passage (vh, vous pouvez sauter ce point de détail !), qu’on les appelle valeurs nulles ou marqueurs, ça ne change rien au fait que SQL est obligé de se frotter à la logique ternaire et de se prendre les pieds dans le tapis. Je sais que Ted Codd préférait parler de marqueurs parce que, je cite et traduis : Citation:
— Fin du point de détail — N’oublions pas que l’optimiseur d’un SGBD SQL a de gros problèmes avec NULL, concernant ses règles de transformation des expressions (Query Rewrite). Là où en logique binaire il y a tautologie ou contradiction, ça n’est plus vrai en logique ternaire. Par exemple "p OU NON p" est toujours vrai, sauf en logique ternaire. Qu’advient-il des lois de De Morgan ? Etc. On aura beau triturer les tables de vérité, on finira toujours par être coincé. Je conseille à vh de méditer la discussion entamée par nat-0-0 et plutôt animée, dans laquelle nous avons pas mal débattu : http://www.developpez.net/forums/sho...d.php?t=267568 En aparté : Dans cette discussion, vous mettiez en cause le nombre de jointures dû à la façon de procéder de Hugh Darwen : n’oubliez pas que le jour où sera utilisé "The TransRelational Model" (qui agit au niveau physique), la jointure de 20 tables ne prendra que 2 fois le temps d'une jointure de 10 tables (performance linéaire) et on pourra dire "Adieu index devenus inutiles !" Citation:
1) Ces développeurs n’on pas dû tester leurs requêtes et devaient être bien tendres. Dans le cas précis des dates pouvant prendre ce genre de valeur par défaut, on doit avoir le réflexe de coder "... Date_xxx <> '01/01/1900'...". Il s’agit au demeurant d’un bug rapide à corriger, puisqu’on ne touche pas à la structure des tables, simplement aux requêtes. J’espère que votre audit ne vous a pas fait découvrir des anomalies du niveau de ce qui a provoqué le crash en 1999 de la sonde Mars Climate Orbiter sur la planète rouge parce qu’une équipe utilisait des unités de mesure anglo-saxonnes, tandis que l’autre utilisait le système métrique... 2) Comme je l’ai précisé dans cette discussion et dans celle avec nat-0-0 il y a quand même d’autres solutions que l’utilisation des NULLS et des valeurs par défaut pour traiter de l’absence de l’information.
__________________
_ 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
|
|
|
#9 | |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
Citation:
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
|
00
|
|
|
#10 | |
|
Expert Confirmé Sénior
![]() ![]() ![]() Spécialiste en bases de données Inscription : septembre 2006 Messages : 2 887 ![]() |
Bonsoir,
Citation:
Et même au niveau de la présentation des résultats, est-ce que cela a par exemple pour conséquence que AVG(montant) est désormais toujours égal à SUM(montant)/COUNT(quantité) ? Cela n’empêchera pas que EXISTS donne pour résultat TRUE ou FALSE, quand ce résultat attendu devrait être UNKNOWN. Comme dit Chris Date (qui m’a confirmé son excellente santé et est plus débordé que jamais), "EXISTS Is Not “Exists”!" (Cf. C. J. Date, Relational Database Writings 1985-1989 (Reading, Mass.: Addison-Wesley, 1990, pages 339-356). 17 pages consacrées à démontrer les anomalies provoquées par l’utilisation de EXISTS avec SQL. Vous dites que les NULL sont des valeurs avant ou après toutes les autres : donc vous les considérez comme des valeurs. En conséquence, les dépendances fonctionnelles concernées perdent leur statut. Etc. Quitte à me répéter je dis qu’il y a quand même d’autres solutions que l’utilisation des NULLS pour traiter de l’absence de l’information.
__________________
_ 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
|
|
|
#11 | ||
|
Futur Membre du Club
![]() Inscription : mars 2006 Messages : 24 ![]() |
Citation:
Citation:
|
||
|
|
00
|
|
|
#12 | |
|
Expert Confirmé Sénior
![]() ![]() ![]() Spécialiste en bases de données Inscription : septembre 2006 Messages : 2 887 ![]() |
Citation:
Vous observerez que dans mon exemple (message du 20/02/2007), j’ai codé NOT NULL sans clause DEFAULT : ceci m’oblige à toujours fournir une valeur. SGBD utilisé : SQL Server.
__________________
_ 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
|
|
|
#13 | |
|
Futur Membre du Club
![]() Inscription : mars 2006 Messages : 24 ![]() |
Citation:
avec MySQL point de "NOT NULL" sans valeur pas défaut donc je vais concerver l'idée de tout mettre en "NULL" et code de tel façon que si un NULL apparait, c'est obligatoirement un fonctionnement anormal merci à vous fsmrel, pendant ces quelques jours sur le forum vous avez fait évoluer ma façon de développez plus rapidement que par 6 ans d'expérience donc merci à vous et merci à developpez.com qui a permis cette magie |
|
|
|
00
|
|
|
#14 | |
|
Expert Confirmé Sénior
![]() ![]() ![]() Spécialiste en bases de données Inscription : septembre 2006 Messages : 2 887 ![]() |
Citation:
Je suis heureux d'avoir pu vous donner quelque éclairage. Bonne continuation, Fsmrel
__________________
_ 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
|
Copyright © 2000-2012 - www.developpez.com