Avantages et inconvénients pour les colonnes CreatedDate et ModifiedDate dans toutes les tables de database

Quels sont les avantages et inconvénients? Quand devrions-nous les avoir et quand nous ne devrions pas?

METTRE À JOUR

Quel est ce commentaire dans une mise à jour SP auto générée avec RepositoryFactory? Est-ce qu'il doit faire n'importe quoi avec les colonnes ci-dessus pas présentes?

--The [dbo].[TableName] table doesn't have a timestamp column. Optimistic concurrency logic cannot be generated 

Si vous n'avez pas besoin d'informations historiques sur vos données, l'ajout de ces colonnes remplira l'espace inutilement et réduira le nombre d'loggings à intégrer sur une page.

Si vous faites ou pourriez avoir besoin d'informations historiques, cela pourrait ne pas suffire à vos besoins. Vous pouvez envisager d'utiliser un autre système, tel que ValidFrom et ValidTo, et ne jamais modifier ou supprimer datatables d'une ligne, il suffit de les marquer comme n'étant plus valides et de créer une nouvelle ligne.

Voir Wikipedia pour plus d'informations sur les différents systèmes pour conserver des informations historiques sur vos données. La méthode que vous avez proposée est similaire au type 3 sur cette page et souffre du même inconvénient que seules les informations sur la dernière modification sont enregistrées. Je vous suggère de lire certaines des autres methods aussi.

Tout ce que je peux dire, c'est que datatables (ou les arrays de vérification complets) m'ont aidé à find ce qui ou qui a causé un problème majeur de données. Tout ce qu'il faut, c'est une utilisation pour vous convaincre qu'il est bon de passer le time supplémentaire pour garder ces champs à jour.

Je ne le fais généralement pas pour les tables qui ne sont remplies que par un seul process automatisé et personne d'autre n'a d'autorisation d'écriture sur la table. Et généralement, il n'est pas nécessaire pour les tables de search que les users ne peuvent généralement pas mettre à jour non plus.

Il n'y a pratiquement pas d'inconvénients à les avoir, alors s'il y a des chances que vous en ayez besoin, alors ajoutez-les.

Les gens peuvent mentionner des problèmes de performance ou de stockage mais,

  • en réalité, ils auront peu ou pas d'effet sur les performances de SELECT avec du matériel moderne, et des clauses SELECT correctement spécifiées
  • il peut y avoir un impact mineur pour écrire des performances, mais cela ne sera probablement une préoccupation que dans les systèmes de type OLTP, et c'est exactement le cas lorsque vous souhaitez avoir ces types de colonnes
  • Si vous êtes au point où l'ajout de colonnes comme celle-ci est un dealbreaker en termes de performances, alors vous envisagez probablement de vous éloigner des bases de données SQL en tant que plate-forme de stockage

Avec CreatedDate , je le configure presque toujours avec une valeur par défaut de GetDate() , donc je n'ai jamais à y penser. Lors de la construction de mon schéma, j'appendai ces deux colonnes sauf s'il s'agit d'une table de search sans interface graphique pour l'administrer, car je sais qu'il est peu probable que datatables soient mises à jour si elles sont modifiées manuellement.

Certains SGBD fournissent d'autres moyens de capturer ces informations de façon automatique. Par exemple, Oracle Flashback ou Microsoft Change Tracking / Change Data Capture. Ces methods capturent également plus de détails que la dernière date de modification.

Cet horodatage de type colonne est trompeur. Ça n'a rien à voir avec le time, c'est rowversion. Il est largement utilisé pour la concurrency optimiste, exemple ici