Quand à Dénormaliser une Conception de Base de données

Je sais que normalis(z)ation a été largement discuté sur un Débordement de Pile. J'ai lu beaucoup de discussions antérieures. J'ai quelques questions supplémentaires si.

Je suis en train de travailler sur un système d'héritage avec au moins 100 tables. La base de données est a quelques des nations unies normalisés en fonction de la structure, des tableaux qui contiennent une variété de données disparates, et d'autres problèmes. J'ai été donné la tâche d'essayer de l'améliorer. Je ne peux pas commencer à nouveau, mais besoin de modifier le schéma existant.

Dans le passé, j'ai toujours essayé de conception de bases de données normalisé. Maintenant, les questions. Un développeur senior a suggéré que, dans certains cas, nous ne pouvons normaliser:

1) Avec les données temporelles. Par exemple, une facture est créée que des liens vers d'un produit. Si un client demande une copie de cette facture, un an plus tard, nous devons être en mesure de produire une copie exacte de l'original. Que faire si le prix du produit, le nom ou la description ont été mises à jour? Les seniors gars ont suggéré que le prix du produit et d'autres informations doivent être copiées dans la table de facture. Je pense peut-être que nous devrions avoir une autre table comme productPrice qui a un champ de date afin que nous puissions suivre les changements de prix au fil du temps. Il nous faudrait la même chose pour la description du produit et le nom, je suppose? Semble compliqué. Qu'en pensez-vous?

2) La base de données est un système de comptabilité. Je ne suis pas très familier avec la comptabilité. Au moment sommaire de certaines données sont obtenues et stockées dans la base de données. Par exemple, les ventes totales de l'année. Mon associé senior, a déclaré que les comptables pour vérifier les choses sont correctes en comparant cette valeur avec des données qui est en fait calculée à partir des factures, etc, pour leur donner de la confiance que l'application fonctionne correctement. Il a dit que pour le moment, par exemple, on peut savoir si quelqu'un a supprimé une facture de l'année dernière, à tort, parce que les totaux ne sera pas la même. Il a également souligné qu'il pourrait être assez lent à calculer les totaux à la volée. Bien sûr, j'ai dit que les données ne doivent pas être dupliqués et doit toujours être calculée en cas de besoin. J'ai suggéré que nous pourrions utiliser SQL Reporting Services ou une autre solution qui permettra de générer ces rapports pour la nuit et les mettre en cache. De toute façon, il n'est pas convaincu. Tous les commentaires sur cette?

Merci beaucoup 🙂

Cheers

Marque

MODIFIER

Merci pour les excellentes réponses. C'est dommage, je ne peux drapeau de l'un à la réponse, car il ya beaucoup de bonnes suggestions ici.

  • Reporting Services est une très bonne solution pour le rapport de synthèse cacher le problème. C'est ce que SSRS a été conçu pour.
  • Vous pouvez demander les détails à propos de 2) point sous une autre question. La normalisation est assez compliqué. Et puis vous avez besoin de définir un peu mieux, par exemple - vous prétendre qu'il affirme qu'il peut être lent, mais, en même temps qu'il allait l'utiliser pour vérifier si quelqu'un a supprimé quelque chose (et de vous fournir cela comme un exemple pour l'application fonctionne correctement - et à moins que vous voulez dire que la sécurité est mise en œuvre correctement, votre exemple suppose en fait que l'application fonctionne correctement). Donc, comme je l'ai dit - de mieux faire que le point 2 un peu plus claire et moins contradictoire.
  • Supérieurs de votre collègue est un développeur, pas un modeleur de données. Vous êtes mieux de commencer à partir de zéro, avec eux. La Normalisation est compliqué uniquement à ceux qui ne lisent pas de livres, et de faire passer leur "connaissance" de la les amateurs au wiki.
InformationsquelleAutor Mark Evans | 2010-11-29