Database 如何在数据库设计中存储旧版本的ID字符串?

Database 如何在数据库设计中存储旧版本的ID字符串?,database,database-design,Database,Database Design,我正在为一个实验室建立一个小型数据库。我们有一些规则为每个项目创建一个ID字符串,所以我不想将其存储在我的数据库中。问题是,有时数据的更改(例如,该项的person响应更改)会导致ID字符串的更改。但是我不能为打印的文档更正它。如何存储该ID字符串的旧版本。 我可能只是不改变它,但这将打破规则。有什么建议吗 例如,更改该项的person响应会导致ID字符串的更改 看起来你实验室的工作流程被破坏了。ID永远不应该改变。试着让你的上级注意到这一点。区分主键(用来唯一标识表中的行)和目录中产品通常具有

我正在为一个实验室建立一个小型数据库。我们有一些规则为每个项目创建一个ID字符串,所以我不想将其存储在我的数据库中。问题是,有时数据的更改(例如,该项的person响应更改)会导致ID字符串的更改。但是我不能为打印的文档更正它。如何存储该ID字符串的旧版本。 我可能只是不改变它,但这将打破规则。有什么建议吗

例如,更改该项的person响应会导致ID字符串的更改


看起来你实验室的工作流程被破坏了。ID永远不应该改变。试着让你的上级注意到这一点。

区分主键(用来唯一标识表中的行)和目录中产品通常具有的某种智能键是很重要的

对于主键,请使用自动递增整数——很少有例外

为您试图在智能钥匙中表示的内容添加列,如:
个人
项目
响应

为该键添加一个单独的列,并将其与表中的任何其他字段一样对待——这将使习惯于这种思维的人感到高兴


智能钥匙在这里用词不当,从db设计的角度来看,这把钥匙相当愚蠢。

来扩展Damir的观点

“智能钥匙”是指您在

我们有一些规则来为每个项目创建一个ID字符串

你要记下物品的名称,可能是类别代码,然后添加

该项目的人员响应

所以如果我负责烧杯的话,物品ID可能是

玻璃器皿-烧杯-喷溅

当您在数据库中将该“代码”用作主键时,它将成为“智能钥匙”

这是一种反模式。像大多数反模式一样,它很诱人。人们喜欢只看钥匙的想法,知道它是什么样的东西,它叫什么,我要求谁得到更多。报告或书架标签上的所有信息都只有几个字符。但由于你提到的原因,这是一种反模式——它有意义,意义可以改变


正如Damir所建议的,您可以将此值存储在另一列中,我们称之为备用键或候选键。。。这是独一无二的,可能是PK,但不是。您需要列上的唯一约束,而不是主键约束。

这个问题(至少对我来说)毫无意义@Mitch-Wheat。是的,如果我们不尝试改变那个ID是没有意义的。但是如果坚持规则,我们应该改变它们。@eveloperart。ID看起来像“abc/12/xzy”,abc是项目名称的缩写,xzy是人名的缩写。人们使用它是因为他们可以从这个字符串中获得一些信息。但是你是对的,也许我们应该只使用这个规则来创建那个ID。谢谢Damir。我可能会照你说的做。我将添加一个note字段。这样他们就可以在那里存储现在版本的ID。但我不能用新ID搜索,我必须用现场人员、项目、响应进行搜索。。。也许我需要一个IdVersions表??您可以为该行添加一个version列。每个新版本都可以添加一行并增加版本。这样你就保存了历史。此表以前的所有FK值保持不变。所有新FK值均指向最新版本。感谢您的解释!斯蒂芬妮:)我投你一票,因为你是对的。在你的回答和评论中。