|
Publicité ' | ||||||||||||||||||||||||
|
|
#21 |
|
Membre Expert
![]() ![]() Franck PachotDBA Oracle Inscription : novembre 2007 Messages : 706 ![]() |
Bonjour dba01,
Je me souviens d'avoir paramétré un 13ème puis un 14ème mois pour des comptables il y a longtemps... Il faudrait avoir tout le contexte fonctionnel et en discuter avec le business. D'une part, un report me semble devoir être identifié clairement, avec un flag, ou un type d'opération. C'est même peut-être quelque chose à stocker dans une autre table. et on doit savoir ce qu'on interroge vraiment. D'autre part, on trouve souvent plusieurs dates. En compta, on peut avoir des périodes comptables par mois et ce n'est pas un format DATE mais une foreign key sur une table des périodes comptables. Celle-là peut avoir des périodes spéciales si ça a un sens au niveau du business. Mais c'est mieux de ne pas tout mélanger. Une colonne qui contient plusieurs informations (une date, un type d'opération, etc.) posera des problèmes. Cordialement, Franck.
__________________
A lire sur mon blog Oracle - Articles d'Experts des articles traduits en français de Jonathan Lewis, Tom Kyte, Doug Burns, Cary Millsap, Greg Rahn ...
|
|
00
|
|
|
#22 | |||||||||||||||||
|
Expert Confirmé Sénior
![]() ![]() ![]() Spécialiste en bases de données Inscription : septembre 2006 Messages : 2 884 ![]() |
Hello,
A propos des dates floues. Citation:
Une proposition parmi d’autres ; Considérez l’instruction ci-dessous (j’utilise ici SQL Server) : Code SQL :
La date de naissance est contrainte à être du type Date (à cause de la fonction ISDATE), mais avec la possibilité que le jour de naissance soit inconnu (marqué '??'), même chose pour le mois. On peut aussi programmer une fonction de contrôle du type (Est_Valide_Date ci-dessous), qui puisse être appelée en d’autres endroits (par d’autres fonctions ou des CREATE TABLE). Exemple. Prenons en compte en passant la date de décès : Code SQL :
Pour généraliser, on accepte de ne pas connaître l’année pour une date, auquel cas on autorise le marqueur '????' (que l’on peut récuser pour la date de naissance). Fonction : Code SQL :
On peut définir d’autres fonctions, par exemple pour calculer la différence entre dates (calculer par exemple l’âge d’un artiste), pour savoir si une date est postérieure une autre date, etc., tout en tenant compte des marques '??'. Exemple (je ne prétends pas avoir testé tous les cas de figure...) : Code SQL :
Un début de jeu d'essai (pour les besoins de tests, certains artistes sont très jeunes et d’autres beaucoup plus vieux !) : Code :
Calcul de l’âge des artistes au 15 avril 2012 : Code SQL :
=> Quand il y a un doute, la fonction valorise l’âge à '??' , mais si une date est incomplète, on détermine malgré tout l'âge quand c'est faisable. Certains artistes n’on pas encore soufflé leur 1re bougie... Code :
Code SQL :
Dans tout ça, il doit rester quelques fonctions à mettre en œuvre, cette approche n’est pas la meilleure à cause de la programmation, mais bon...
__________________
_ 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 !) |
|||||||||||||||||
|
|
20
|
|
|
#23 |
|
Expert Confirmé
![]() Inscription : juillet 2007 Messages : 2 178 ![]() |
Bonjour Fsmrel (et à tous ceux qui suivent),
Pourrais-tu donner ton avis sur le sujet évoqué par Franck dans le post #13, commenté par le post #15 ? Merci d'avance de tes observations.
__________________
Dis-nous et à bientôt, Richard. ---------------------------------------------------------------------------------------------- . et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
|
|
|
00
|
|
|
#24 | |
|
Expert Confirmé Sénior
![]() ![]() ![]() Spécialiste en bases de données Inscription : septembre 2006 Messages : 2 884 ![]() |
Bonsoir,
Citation:
Parler d’index, construction physique populaire s’il en est, à l’occasion de la recherche d’une solution conceptuelle est parfaitement incongru. Chaque éditeur de SGBD offre ses solutions quant à la technologie ès matière, évoluant au fil des versions et releases. Qu’Oracle et PostgreSQL permettent d’obtenir des gains en n’indexant pas les marques nulles, soit, mais ça me fait une belle jambe quand j’utilise DB2 for z/OS qui indexe tout (je ne suis plus guère les évolutions de ce SGBD, aussi serait-il préférable de demander confirmation dans le forum DB2, je pense que quelqu’un comme Luc Orient se fera un plaisir de donner toute information utile...) Quoi qu’il en soit, baser sa modélisation — voire tout miser — sur une possibilité offerte par tel SGBD et pas tel autre est non seulement choquant, mais c’est en plus un truc à s’en rendre prisonnier. Par exemple, une machine base de données « massivement parallèle » comme Teradata où l’on parallélise à mort pour exploiter sa technologie YNET et ses UPI (unique primary index), offre des possibilités qu’on ne retrouve pas ailleurs mais qui peuvent nous ligoter (j’ai donné). Maintenant, rien n’empêche (et c’est même recommandable) de mettre en œuvre un prototypage des performances en parallèle avec la conception, en amont des développements, pour apprécier l’efficacité de la future base de données en relation avec le palmarès des requêtes que l’on saura être les plus sensibles (prise de commande, appel des cotisations ...), de comparer les résultats et de faire part des conclusions à la Production, aux Études, à la Maîtrise d’œuvre, sans oublier son cheval (of course). Cela dit, élever au rang de quasi paradigme une technique susceptible d’être frappée d’obsolescence suite à des évolutions décisives n’est pas une très bonne chose. Quand on voit la performance des disques SSD (temps d’accès divisé par un facteur de l’ordre de 100 d'après ce qu’on lit), on peut commencer à rêver, regarder de plus près, même si aujourd’hui la technologie SSD coûte cher (mais souvenez-vous du prix des écrans plats il y a 15 ans) et n’est pas mature, comme le font observer SQLpro et mikedavem. Qu’en sera-t-il dans cinq ans, dix ans ?
__________________
_ 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 !) |
|
|
|
21
|
|
|
#25 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Spécialiste en bases de données Inscription : septembre 2006 Messages : 2 884 ![]() |
Richard,
Vous m’avez demandé mon avis, mais il n’a pas l’air d’être partagé par tous !
__________________
_ 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
|
|
|
#26 | |
|
Expert Confirmé
![]() Inscription : juillet 2007 Messages : 2 178 ![]() |
Bonsoir Fsmrel,
Citation:
L'argument est donc qu'il vaut mieux se placer "au niveau le plus bas", ne sachant pas la capacité d'un SGBD à indexer les NULL. "Qui peut le plus, peut le moins", en quelque sorte. En conséquence, en limitant les NULL, cela ne dérange pas les SGBD qui ne les indexent pas, et arrange bien ceux qui les indexent. Comme il très difficile de connaître, dans le détail, tous les SGBD, l'argument se tient. Il est vrai que si, pour une raison ou pour une autre, la base de données de Franck (qui n'indexent pas des NULL) doit être migrée vers un autre SGBD (qui indexe les NULL), alors il y aura une perte d'efficacité. Néanmoins, je reste persuadé qu'il y a un équilibre à trouver : créer une table spécifique à chaque fois qu'il y a risque d'un champ NULL, me paraît être un excès. En revanche, si ce champ est une clé étrangère, cela peut être judicieux.
__________________
Dis-nous et à bientôt, Richard. ---------------------------------------------------------------------------------------------- . et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
|
|
|
|
10
|
|
|
#27 | |
|
Expert Confirmé Sénior
![]() ![]() ![]() Spécialiste en bases de données Inscription : septembre 2006 Messages : 2 884 ![]() |
Citation:
Maintenant, je vous soumets un sujet de méditation concernant la modélisation. Null signifie « information absente », mais ceci est trop générique et en creusant un peu on peut percevoir une grande différence quant au motif de cette absence selon la situation. Ainsi, dans le cas de la date de naissance de l’artiste, si l’information est absente c'est parce qu’on n’en a pas connaissance, mais le jour où elle est connue, on complète et on met à jour la base de données : l'utilisation de la date de naissance est applicable à tout artiste (c'est pourquoi je n'avais pas de raison d'évacuer l'attribut Datnaiss de la table ARTISTE). En revanche, si dans la table des opérations le numéro de chèque est absent, c’est parce que — du point de vue de la modélisation — l’information est en l’occurrence inapplicable (par hypothèse un chèque n’a pas à être associé à un crédit). La présence du numéro de chèque dans le cas des opérations de crédit étant pour le moins suspicieuse (euphémisme), il est légitime de refuser de modéliser un mariage contre nature...
__________________
_ 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 !) |
|
|
|
20
|
|
|
#28 |
|
Membre habitué
![]() Daniel BALLANDRetraité MO Inscription : mai 2008 Messages : 69 ![]() |
@ pachot : non ce n'était pas qu'un simple report à nouveau, c'était plus compliqué que ça.
Enfin, passons. La question était de voir si la fonction "date" dont on a l'habitude n'était pas trop contraignante, et s'il ne valait pas mieux, parfois, gérer la chose en numérique afin d'avoir d'autres possibilités. Les exemples sont nombreux, comme la cathédrale du XIIe siècle, les dates de naissance aux environs de..., les 14 mois de l'année, les péremptions au delà du... Je ne vois pas un historien se contenter d'un ordinateur qui commencerait à compter à partir de 1900. Et les historiens astronomes préfèrent le calendrier Julien qui porte sur 7000 ans environ. Quant aux préhistoriens ou archéologues !... Mais hélas ces particularités sont à programmer par chacun car il n'existe aucune fonction préfabriquée en la matière. Donc : ne pas se contenter systématiquement de la fonction Date-Heure définie par les éditeurs. Autre problème : la notion de débit/crédit ne doit jamais s'inscrire sous la forme +/-. Ne pas signer les sommes. D'une part, il existe des systèmes (USA) dans lesquels le crédit porte le signe moins, et le débit le signe plus. D'autre part, j'ai déjà eu à gérer des débits tombant sur des comptes créditeurs, et d'autres sur des comptes débiteurs, etc... Résultats : quatre colonnes d'utilisations différentes. Autant prévoir dès la conception, pour permettre les évolutions sans révolutions. PS : comme disait un collègue : "quand la paye arrive, le solde de mon compte diminue".
__________________
R.BASILE, 1971 : "Il y a mille et un procédés pour accélérer des particules. Le seul véritablement fondamental restant...le carnet de chèques." |
|
|
00
|
|
|
#29 | |
|
Expert Confirmé
![]() Inscription : juillet 2007 Messages : 2 178 ![]() |
Bonjour à tous,
Citation:
Concernant une quelconque entité : une Date de naissanceLa notion de "vie propre" est une notion qui pourrait faire pencher la balance du côté de la chasse au NULL.
__________________
Dis-nous et à bientôt, Richard. ---------------------------------------------------------------------------------------------- . et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
|
|
|
|
10
|
|
|
#30 |
![]() ![]() |
Tout ceci est décidément très intéressant !
En lisant ta proposition François, je me disais que ça donnait des traitements bien lourds pour de simples dates mais comme c'est pour un (relativement) petit projet personnel, j'ai bien envie de l'essayer... quand j'en trouverai le temps. Je me mets derrière l'oreille aussi le cas des observations ou autres commentaires facultatifs. Dans le premier modèle que j'avais fait, presque toutes mes tables avaient une colonne nullable pour les commentaires. Par exemple, pour signaler que Julie Depardieu est la fille de Gérard ou que Studio Magazine et ciné Live ont fusionné pour devenir Studio Ciné Live ou que "Apocalypse Now" a eu la Palme d'or à Cannes ex-aequo avec "Le Tambour"... Je sens que ça va encore ajouter des tables à mon modèle cette histoire ! ============ L'autre sujet à l'origine de cette discussion concernait aussi la modélisation du nom des artistes. J'ai relu la semaine dernière la partie de la discussion qui y est consacrée mais je reste hésistant quant à la solution. D'autres avis sont les bienvenus.
__________________
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
|
|
|
#31 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Spécialiste en bases de données Inscription : septembre 2006 Messages : 2 884 ![]() |
Bonsoir,
C’est dans les vieilles marmites qu’on fait les meilleures soupes : en 1979, Ted Codd et Yannis Vassiliou (dont je n’ai pas l’article, mais qui est référencé par Codd dans Extending the Database Relational Model to Capture More Meaning) ont traité des deux types d’absence de l’information : applicable et inapplicable (cf. ce que j’ai rapidement évoqué à ce sujet). Pour ma part, suite aux écrits de Codd de 1990 (The Relational Model for Database Management: Version 2) ça fait plus de 20 ans que j’utilise ces termes qui d'ailleurs ont suscité pas mal de littérature et de polémiques (problème de la mise en œuvre de la logique quadrivalente, mais qui sort de notre champ). Quoi qu'il en soit, je vous propose de les utiliser à votre tour, d’autant que Date de naissance, Numéro de chèque, Observation ne sont pas à proprement parler des entités, mais font plutôt l’objet d’attributs d’entité et ne sont donc pas autonomes, n’ont pas de vie propre. Façon Boileau, qu’un numéro de chèque puisse faire l’objet d’un marqueur de type inapplicable pour l’attribut NoCheque de la table OPERATION est à mon sens quelque chose qui se conçoit bien et les mots pour le dire me viennent (assez) aisément : « applicable ! », « inapplicable ! » sont des mots un peu longs, mais qui claquent quand même et qu’on n’oublie pas. Comme dirait : évitons les périphrases, droit au but !
__________________
_ 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
|
|
|
#32 | ||||||||
|
Expert Confirmé Sénior
![]() ![]() ![]() Spécialiste en bases de données Inscription : septembre 2006 Messages : 2 884 ![]() |
Bonsoir Philippe,
Citation:
En tout état de cause, la fonction AGE_PERSONNE peut être réutilisée pour plein de contextes, à condition de respecter la structure imposée par la fonction Est_Valide_Date (à laquelle AGE_PERSONNE fait appel)... Citation:
La structure de la table ARTISTE ci-dessus devient par exemple la suivante : Code sql :
Insertion d’une ligne pour laquelle il n’y a pas d’observation : Code sql :
Insertion d’une ligne pour laquelle il y a une observation : Code sql :
Ce scénario vous convient-il ?
__________________
_ 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
|
|
|
#33 | |
![]() ![]() |
Oui, le NOT NULL DEFAULT '' me plaît assez.
![]() Je reste par contre indécis quant au nom d'artiste et nom réel. Citation:
Avec les outils informatiques modernes, si je cherche Gérard Depardieu, je commence à taper "Depar" dans une zone de saisie à auto-complétion et j'aurai probablement la famille Depardieu qui apparaîtra. Il est peut-être peu probable que je cherche une personne par un système de lettres cliquables, comme si je cherchais un mot à la lettre D du dictionnaire. À suivre...
__________________
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
|
|
|
#34 | ||||
|
Expert Confirmé
![]() Inscription : juillet 2007 Messages : 2 178 ![]() |
Bonjour Fsmrel et CinePhil,
Merci, de ta réponse, Fsmrel, je ne connaissais pas les termes "applicable" et "inapplicable" dans ce contexte. D'autre part, personnellement, je préfère (syntaxe NUMERIC() à vérifier, mais bon, nous sentons l'esprit) : Code :
Code :
__________________
Dis-nous et à bientôt, Richard. ---------------------------------------------------------------------------------------------- . et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
|
||||
|
|
00
|
|
|
#35 |
|
Membre habitué
![]() Daniel BALLANDRetraité MO Inscription : mai 2008 Messages : 69 ![]() |
J'ai aussi eu des problèmes avec un outil de fabrication US qui était au format MM-JJ-AAAA au lieu du JJ-MM-AAAA Européen.
Tandis que le format AAAAMMJJ se manipule sans utiliser la notion de date. Je l'ai même vu dans des prgrammes publiques.
__________________
R.BASILE, 1971 : "Il y a mille et un procédés pour accélérer des particules. Le seul véritablement fondamental restant...le carnet de chèques." |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com