Dois-je inclure une clé primaire pour la table de vérification dans SQL?

StackOverflow https://stackoverflow.com/questions/724831

  •  05-09-2019
  •  | 
  •  

Question

Je suis en train de créer une table de vérification pour le suivi des modifications effectuées sur un enregistrement dans le tableau principal.

Voici la table de vérification est la copie exacte de la table principale (par exemple le tableau des employés), mais aura seulement « inserts » pour tous les changements qui se passe dans le tableau principal. Ainsi, il aura des doublons (même EmployeeIDs), donc devrais-je ajouter Audit_ID pour chaque entrée?

Était-ce utile?

La solution

Bien sûr, vous avez besoin d'une sorte de clé primaire dans le tableau.

Il sera plus facile de supprimer les doublons et de suivre la « raison d'insertion » (pour le débogage) si vous en avez un.

Certains de RDBMS (comme MySQL avec InnoDB) créer effectivement une clé primaire cachée pour vous si vous ne l'avez pas explicitement, donc le faire vous-même et de faire si elle est visible et utilisable.

Autres conseils

à peu près Vous , comme tout le EmployeeID dans l'employé sera unique (une mise à jour ne sera pas ajouter une nouvelle ligne, il suffit de modifier la ligne existante), la table d'audit aura plusieurs lignes avec le même EmployeeId (une pour l'insert initial, une pour chaque mise à jour ultérieure, de l'employé).

Par ailleurs, les entités des employés sont des employés. Mais les entités d'audit sont des dossiers de vérification. Ils shoulld ont leur propre identité.

Vous voulez que cela si jamais quelque chose va mal et vous devez réellement mettre à jour ou supprimer un enregistrement d'audit. En effet, si un employé est inséré, puis une valeur de colonne est mise à jour, puis mis à jour à nouveau la valeur d'origine, vous avez maintenant deux dossiers identiques dans l'audit. Ce qui devrait être supprimé ou mis à jour en même temps (sauf si vous avez utilisé une clause de limite dans votre mise à jour ou supprimer.) Salissante.

Ce qui souligne également l'utilité d'ajouter un horodatage à la table de vérification aussi. Mais ne pensez pas que vous devriez l'utiliser et EMPLOYEEID comme une clé composite. Tout d'abord, les clés composites sucent. En second lieu, il est tout à fait possible de granularité d'un horodatage est inférieur au temps qu'il faudrait votre système pour effectuer deux mises à jour (deux mises à jour du même employé, comme, par exemple, une opération discontinue). (A datetime Sybase a trois granularité milliseconde;. Un processeur Intel Core 2 Extreme peut faire près de 200 millions instructions en ce temps)

Oui. Je crois une clé primaire non sémantique dans chaque table est une bonne pratique, car il vous permet de faire référence d'une manière pragmatique. Vous pouvez visualiser « les changements de audit-id à audit-id+1 » beaucoup plus facilement que d'utiliser les dates.

Vous pouvez utiliser l'identifiant de l'employé et la vérification datetime comme une clé composite ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top