2010-09-22 3 views
3

Je construis une petite base de données pour un laboratoire. Nous avons quelques règles pour faire une chaîne d'identification pour chaque article, donc je ne veux pas le stocker dans ma base de données. Le problème est que parfois des changements dans les données, par exemple la réponse de la personne pour cet élément a changé, provoque le changement de chaîne d'identification. Mais je ne peux pas le corriger pour les documents imprimés. Comment puis-je stocker l'ancienne version de cette chaîne d'identification. Je peux simplement ne pas le changer mais cela va enfreindre les règles. Aucune suggestion?Comment stocker l'ancienne version de la chaîne d'ID dans Database Design?

+0

question n'a pas de sens (pour moi, au moins) –

+0

@Mitch Wheat. Oui, cela n'a aucun sens si nous n'essayons pas de changer cette identification. Mais si vous respectez les règles, nous devrions les changer. – gstar2002

Répondre

1

Il est important de distinguer entre une clé primaire qui est censée identifier de façon unique une ligne dans une table et une sorte de clé intelligente que les produits des catalogues ont habituellement.

Pour une clé primaire, utilisez un entier auto-incrémenté - très peu d'exceptions à celle-ci.

Ajouter des colonnes pour des choses que vous essayez de représenter dans cette clé intelligente, comme: Person, Project, Response etc.

Ajouter une colonne séparée pour cette clé et de le traiter comme tout autre champ dans la table - - Cela devrait garder les gens habitués à ce genre de pensée heureux. La clé intelligente est un abus de langage ici, à partir d'un point de conception db, cette clé est plutôt bête.

+0

Merci Damir. Je ferai probablement comme tu l'as dit. Et j'ajouterai un champ de note. Donc, ils peuvent stocker la version actuelle de l'ID là-bas. Mais alors je ne peux pas chercher avec un nouvel ID, je dois chercher avec le champ Personne, Projet, Réponse ... peut-être que j'ai besoin d'une Table d'IdVersions ?? – gstar2002

+0

Vous pouvez ajouter une colonne de version pour la ligne. Chaque nouvelle version peut ajouter une ligne et incrémenter la version. De cette façon, vous préservez l'histoire. Toutes les valeurs FK précédentes de cette table restent inchangées. Toutes les nouvelles valeurs FK pointent vers la dernière version. –

0

par exemple la réponse de personne pour cet élément a changé, provoque l'chang ID chaîne

On dirait que le flux de travail dans votre laboratoire est cassé. Les identifiants ne devraient jamais changer. Essayez d'attirer l'attention de vos supérieurs.

+0

@eveloper Art. L'ID ressemble à 'abc/12/xzy', abc est l'abréviation du nom du projet, xzy est l'abréviation du nom de la personne. Les gens l'utilisent parce qu'ils peuvent obtenir des informations sur cette chaîne. Mais vous avez raison, peut-être que nous devrions seulement utiliser cette règle pour créer cet ID. – gstar2002

2

Pour développer le point

A "Smart Key" de Damir est ce que vous dites quand

Nous avons des règles pour une chaîne d'identification pour chaque article

Vous êtes prendre le nom de l'article, peut-être un code de catégorie et ajouter

réponse de la personne à cet objet

Donc, si je responsable de béchers cet élément ID peut être

VERRERIE-bechers SPAGE

Ce « code » devient une « clé intelligente » lorsque vous l'utilisez dans votre base de données en tant que Clé primaire.

Ceci est un anti-pattern. Comme la plupart des anti-modèles, c'est séduisant. Les gens aiment l'idée de simplement regarder la clé et savoir quel genre de chose c'est, comment on l'appelle et à qui je demande d'en avoir plus. Toutes ces informations sur un rapport ou une étiquette avec juste quelques caractères. Mais c'est un anti-pattern pour la raison que vous avez mentionnée - il a un sens et une signification peut être changé. Comme Damir le suggère, vous pouvez stocker cette valeur dans une autre colonne que nous appellerions une ALTERNATE KEY ou CANDIDATE KEY ... c'est unique, ça pourrait être un PK mais ce n'est pas le cas. Vous aurez besoin d'une contrainte unique sur la colonne mais pas de contrainte de clé primaire.

+0

Merci pour votre expédition! Stéphanie. – gstar2002

+0

Non +1? Juste un merci? Eh bien j'apprécie les remerciements à coup sûr. –

+0

:) Je vous donne un upvote parce que vous avez raison. Dans votre réponse et dans votre commentaire aussi. – rics

Questions connexes