Vous soulevez des points valables, cependant, vous ne sont pas totalement claires sur la normalisation et ce qu'il signifie, par exemple dans
1) La demande de conserver les factures qu'ils ont été denormalizes les données sont complètement et totalement faux.
Prenons prix par exemple - si vous avez une exigence de l'entreprise qui indique que vous avez à garder l'historique des prix pour les garder seul prix actuel est mauvais et qu'il brise les exigences. Et il n'a rien à voir avec la normalisation, c'est tout simplement pas conçu ainsi. Dénormalisation de l'est sur l'introduction des possibilités pour de l'ambiguïté dans votre modèle (et autres objets), et dans ce cas vous ne sont tout simplement pas la modélisation de votre espace de problème correctement.
Il n'y a rien de mal dans la modélisation de votre base de données à l'appui des données temporelles (ou le contrôle de version et/ou de séparer les zones de la base de données dans l'archive/temporel et l'ensemble de travail).
En regardant la normalisation sans regarder la sémantique (en termes d'exigences) n'est pas possible.
Aussi, si votre développeur senior ne peut pas voir la différence alors je pense qu'il n'a pas son ancienneté dans le SGBDR de développement ;)
2) la Deuxième partie est en effet la dénormalisation. Toutefois, si vous exécutez à travers les hauts DB analyste qui a gravement prêche la normalisation, vous allez l'entendre lui dire qu'il est parfaitement acceptable de dénormaliser aussi longtemps que vous le faites consciemment et de s'assurer que les avantages de l'embonpoint des lacunes et que les anomalies ne va pas vous mordre. Ils vous diront également de normaliser le modèle logique et que, dans le modèle physique vous êtes autorisé à s'écarter de l'idéal à des fins diverses (rendement, l'entretien, etc...). Dans mon livre, le principal objectif de la normalisation est de sorte que vous n'avez pas les anomalies cachées (voir cet article sur le 5NF par exemple)
La mise en cache des résultats intermédiaires est permis, même sur normalisé bases de données et même par les plus grands évangélistes de normalisation - vous pouvez le faire à la couche application (comme une sorte de cache) ou vous pouvez le faire au niveau base de données ou vous pouvez avoir un entrepôt de données à de telles fins. Ce sont tous des choix valables et n'ont rien à voir avec la normalisation de la logique du modèle.
Aussi, comme votre comptable vous devriez être capable de le convaincre que ce qu'il réclame est pas une bonne façon de tester et de développer un ensemble de tests (peut-être avec lui) qui permettra d'automatiser les tests du système sans que les utilisateurs d'intervention et de vous donner plus de confiance que votre système est exempt de bugs.
D'autre part, je sais de systèmes qui obligent les utilisateurs à entrer des informations en double, comme pour entrer le nombre de lignes sur la facture avant ou après la saisie réelle des lignes, pour s'assurer que l'entrée est terminée. Cette donnée est "dupliqué" et vous n'avez pas à stocker si vous avez une procédure qui permettra de valider l'entrée. Si cette procédure vient plus tard, il est permis de stocker le "anormale" data - encore une fois, la sémantique de la justifier et vous pouvez regarder le modèle normalisé. (il est bénéfique pour envelopper votre tête autour de ce concept)
EDIT:
Le terme "anormale" dans (2) n'est pas correct si vous regardez la définition formelle des formes normales, et si vous considérez une conception dénormalisée si il respecte pas l'une des formes normales (pour certaines personnes, c'est évident et il n'y a pas d'autre moyen à ce sujet).
Encore, vous pouvez me faire à l'idée que beaucoup de personnes, et pas nécessaire inutiles des textes à utiliser le terme de normalisation de tout effort qui tente de réduire la redondance dans la base de données (un peu comme un exemple, vous trouverez des articles scientifiques, par qui je ne dis pas qu'ils doivent être à droite, comme un avertissement qu'il est commun, que les appels provenant des attributs d'une forme de dénormalisation, voir ici).
Si vous voulez faire référence à certains plus de cohérence et d'autorités reconnues (encore une fois, n'est pas reconnu par tous), peut-être que les mots de C. J. Date peut faire une distinction claire:
Une grande partie de la théorie de conception de a à faire avec
la réduction de la redondance, de la normalisation
réduit la redondance dans les relvars,
l'orthogonalité de la réduire à travers
relvars.
qouted à partir de la Base de données en profondeur: la théorie relationnelle pour les praticiens
et sur la page suivante
tout comme un échec à normaliser tous les
implique la redondance et peut conduire à
certaines anomalies, ce qui peut avoir un
le non respect de l'orthogonalité.
Donc, le terme approprié pour une redondance à travers relvars est d'orthogonalité (en gros toutes les formes normales parler seul relvar donc, si vous regardez strictement à la normalisation qu'il ne serait jamais suggérer d'éventuelles améliorations à cause des dépendances entre les différents relvars).
De toute façon, l'un des autres concepts importants lorsque vous envisagez de conception de base de données est également une différence entre logique et physique de la base de données des modèles. Beaucoup de choses qui sont utiles sur le plan physique, tels que des tables avec des sous-totaux ou les index n'ont pas de place dans le modèle logique - où vous essayez d'établir et étudier les relations entre les concepts que vous essayez d'modèle. Et c'est pourquoi on peut dire qu'ils sont acceptables et qu'ils ne ruine pas le design.
Les lignes peuvent être parfois un peu floue sur ce qui est logique du modèle et ce qui est du modèle physique. En particulier, par exemple un tableau avec des sous-totaux. Pour les considèrent comme faisant partie de la mise en œuvre physique et l'ignorer sur le niveau logique, vous devez:
- s'assurer que les utilisateurs (et la demande) ne peut pas mettre à jour la sous-total tableau directement dans une manière qui n'est pas compatible avec leur prédicat (dans un autre mots ont un bug dans le subtotalling procédure)
- s'assurer que les utilisateurs (et la demande) ne peut pas mettre à jour la table sur laquelle elles sont dépendantes sans mise à jour de la sous-total (en d'autres termes que certaines applications ne seront pas supprimer une ligne de la table de détail sans mettre à jour le total)
Si vous violez l'une des règles ci-dessus, vous vous retrouverez avec base de données incohérente qui fournira incompatible faits. (Dans ce cas, si vous voulez officiellement la conception d'une procédure de résolution ou d'examiner les problèmes causés, vous ne voudrais pas le considérer simplement une table supplémentaire, il existerait au niveau logique; là où il ne devrait pas être).
Aussi, la normalisation dépend toujours de la sémantique et les règles de gestion que vous essayez d'modèle. Par exemple DBAPerformance donne un exemple dans lequel le stockage de l' TaxAmount
dans la table des transactions n'est pas anormale de la conception, mais il omet de mentionner que cela dépend de ce genre de système que vous essayez d'modèle (est-ce évident?); par exemple, si la transaction a un autre attribut qui s'appelle TaxRate
il sera généralement dénormalisée, car il y a de la dépendance fonctionnelle sur un ensemble d'attributs non-clé (TaxAmount = Quantité * TaxRate => FD: Montant,TaxRate -> TaxAmount), et l'une d'elles doit être supprimé ou être cohérentes.
Évidemment, direz-vous, mais, si le système de construction est une société d'audit, alors vous pourriez ne pas avoir de dépendance fonctionnelle - ils peut-être l'audit de quelqu'un qui est à l'aide de calculs manuels ou a logiciel défectueux ou doit avoir la capacité d'enregistrer des données incomplètes et le calcul pourrait être mal à l'origine, et en tant que société d'audit, vous devez enregistrer le fait qu'il s'est passé.
Ainsi, la sémantique (prédicats) qui sont déterminés par les exigences de l'influence si l'une des formes normales sont brisés en influençant les dépendances fonctionnelles (en d'autres termes correctement établir des dépendances fonctionnelles est assez importante partie de la modélisation lorsque vous vous efforcez de base de données normalisée).