1

假设我有 2 张桌子:

物种

  • 物种编号
  • 物种名称

动物

  • 动物编号
  • SpeciesId - 外键

如果您赋予最终用户更改 SpeciesName 的能力,这意味着它们可以影响引用更改记录的所有动物的物种(至少从用户的角度来看)。这可能是一个极端的例子,但是这种情况通常是如何处理的呢?让最终用户负责了解他们在做什么?如果以前使用过,则不允许更改名称?

我们正在工作中讨论这种情况,我想从其他人那里获得意见。提出的解决方案之一是删除外键(例如,在 Animal 表中放置物种的文本字段)。这对我来说似乎不对,因为你在什么时候划定了使用外键的界限?对我来说,这似乎更像是一个培训问题,以确保管理员了解他们所做更改的影响。我知道这是一个开放式问题,可能因场景而异,但我只是想获得一些一般性意见。

4

2 回答 2

0

这是您必须做出的设计决定。您需要从业务角度确定什么更重要。您是否重视历史准确性或有效更新信息?

在您的示例中,出于以下原因,我会较少强调历史。

  1. 只有最近的约定是重要的。假设一种动物从一个属转移到另一个属,它实际上并没有提供任何价值来了解旧的和现在无效的属是什么。

  2. 同一物种的所有动物都应具有相同的物种 ID。您可以使用外键免费获得此功能。假设在物种名称更改之前添加了一只老虎。然后在物种名称更改后添加了另一只老虎。两只老虎仍然属于同一物种。

  3. 通过 ID 查询数据库将比使用字符串更容易和更可靠,更不用说深入研究字符串解析的肮脏业务了。您无需担心字符编码、大写、空格、标点符号等。假设您想检索一个或多个物种的所有动物。

于 2013-05-03T20:20:36.517 回答
0

让最终用户负责了解他们在做什么?

需要决定最终用户能够更新什么。如果您的最终用户是熟悉物种学名的生物学家,他应该能够更新此信息。否则,最好阻止用户修改此列,或者仅当该特定物种有任何与之相关的动物时。

提出的解决方案之一是删除外键

不要那样做。您将无法连接这些表中的信息。想象一下,你的表 Species 有一列“Continent”,表示该物种是否在美洲、非洲、欧洲、亚洲等地发现。如果使用外键,则可以提出诸如“属于某个物种的所有动物是什么”之类的问题美国物种?” 如果您删除外键,这将是不可能的。

于 2013-05-04T18:49:16.340 回答