Quels sont communs colonnes d'audit pour chaque table de base de données?

voix
4

J'allais inclure « statut », « date_created », « date_updated » à chaque table de base de données. « Statut » est pour la suppression douce de lignes.

Puis, je l'ai vu peu de gens ajouter « user_created », « colonnes user_updated » à chaque table.

Si j'ajoute ces colonnes aussi, je vais avoir au moins 5 colonnes pour chaque table. Sera-ce trop frais généraux?

Pensez-vous que c'est une bonne idée d'avoir ces cinq colonnes?

En outre, le fait de l'utilisateur 'dans « user_created » utilisateur de base de données signifie? ou utilisateur de l'application?

Créé 04/09/2011 à 14:07
source utilisateur
Dans d'autres langues...                            


3 réponses

voix
3

Selon les commentaires ci-dessus, conseillerait ajoutant audit uniquement aux tables nécessitant réellement.

Vous voulez généralement vérifier l'utilisateur de l'application - dans de nombreux cas, les applications (comme le Web ou SOA) se connecteront tous les utilisateurs ayant le même diplôme, afin de stocker la connexion DB est inutile.

À mon humble avis, les date created/ last date updated/ lastupdatebymodèles ne donnent jamais une image complète, que vous ne pourrez voir qui a fait le dernier changement et ne pas voir ce qui a changé. Si vous faites la vérification, je suggère qu'au lieu que vous faites une vérification complète de changement à l' aide des modèles comme un audit déclencheur . Vous pouvez également éviter d' utiliser des déclencheurs si vos insertions / modifications / suppressions à vos tables sont encapsulées par exemple par l' intermédiaire Stored Procedures. Il est vrai que les tables d'audit grandiront très grande, mais ils ne sont généralement pas beaucoup interrogé (généralement juste dans la chasse aux sorcières), et peuvent être archivées, facilement partitionné par date (et peut être fait en lecture seule). Avec une table de vérification séparée, vous aurez pas besoin d' une DateCreatedou LastDateUpdatedcolonne, comme cela peut être dérivé. Vous aurez besoin généralement toujours le dernier changement d' utilisateur cependant que SQL ne sera pas en mesure de tirer l'utilisateur de l' application.

Si vous décidez sur des suppressions logiques, j'éviter d' utiliser le « statut » comme un champ indiquant des suppressions logiques, car il est probable que vous avez des tables qui font modéliser un état de processus (par exemple , etc. État de paiement) L' utilisation d' un bitou charchamp tels que ActiveYNou IsActivesont commun pour les suppressions logiques.

Suppressions logiques peuvent être lourdes, car toutes vos requêtes devront filtrer les Active=Ndossiers, et en gardant les enregistrements supprimés dans vos tables de transaction peuvent rendre ces tables plus que nécessaire, en particulier sur les Many : Many / junctiontables. La performance peut également être affecté, comme un champ 2 Etat est peu susceptible d'être suffisamment sélectif pour être utile dans les indices. Dans ce cas, les suppressions physiques avec la vérification complète pourrait faire un meilleur sens.

Créé 04/09/2011 à 14:41
source utilisateur

voix
3

Je l'ai utilisé les cinq avant, bien sûr. Quand je veux savoir qui, à travers une application web, crée et (dernier) dossiers d'édition, et quand cela arrive, j'inclure des marquages ​​temporels et l'utilisateur connecté (mais pas à l'utilisateur DB, ce n'est pas comment mon système est configuré; nous utilisons un compte pour toutes les interactions DB).

De même, le statut peut également être utile si les utilisateurs changent d'un enregistrement, eh bien, le statut. Si elle va d'être, ce record « en ligne » à « Hors ligne » à « Archive » peut refléter.

Cependant, je ne les utiliser pour chaque table, vous ne devriez pas. Parfois , j'ai des tables qui sont destinés uniquement à des parties de magasin d'un enregistrement ( normalisé ), ou tout simplement ne pas une valeur dans la mesure où avoir besoin d' un statut ou le temps créé par qui.

Ce que vous devriez considérer pour chaque table est un champ de clé primaire. Sauf si vous êtes plus sophistiqués dans votre approche que vous le son, vous voulez presque toujours un. Certaines choses ne doivent pas nécessairement un (une liste d'états, par exemple, pourrait l'abréviation unique). Mais cela est plus important pour la plupart de vos tables d'une série d'horodatage et champs d'état.

Créé 04/09/2011 à 14:21
source utilisateur

voix
2

La réponse est simple - ne mettre dans votre base de données ce que vous avez besoin dans votre base de données.

Créé 04/09/2011 à 14:11
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more