Database 数据库设计:具有重复含义的列

Database 数据库设计:具有重复含义的列,database,database-design,Database,Database Design,也许问题的标题不能很好地描述我的问题,但这里是: 假设我有一篇表格文章,看起来像这样: + title + author . . . + status [choices : ('draft', ..., 'translate')] 比如说,在我的业务流程中,我在我的网页上发布的文章有[status='translate'] 添加另一个字段是否是一个好的设计决策: + read [bool] 对于我的表来说,这意味着这篇文章已经准备好发布了,或者这是一个糟糕的设计,因为我可以测试status

也许问题的标题不能很好地描述我的问题,但这里是:

假设我有一篇表格文章,看起来像这样:

+ title
+ author
.
.
.
+ status [choices : ('draft', ..., 'translate')]
比如说,在我的业务流程中,我在我的网页上发布的文章有[status='translate']

添加另一个字段是否是一个好的设计决策:

+ read [bool] 
对于我的表来说,这意味着这篇文章已经准备好发布了,或者这是一个糟糕的设计,因为我可以测试status=='translate',而新字段将只是一个副本

我希望我的问题是清楚的,并提前感谢。

糟糕的设计

首先,这里有一个字段,基本上是状态引擎的当前状态

第二,状态应该是一个单独的表-不要将状态文本放在同一个表中。然后,您可以将每个可能状态的附加信息添加到状态表中。

糟糕的设计

首先,这里有一个字段,基本上是状态引擎的当前状态


第二,状态应该是一个单独的表-不要将状态文本放在同一个表中。然后,您可以将每个可能状态的附加信息添加到状态表中。

重复。如果没有列就可以管理,请不要使用它

考虑一下它给数据库增加的开销(此外,布尔列不能被索引,因此也不会提高性能)

(当然,用数值替换状态字符串)


祝你好运。

重复。如果没有列就可以管理,请不要使用它

考虑一下它给数据库增加的开销(此外,布尔列不能被索引,因此也不会提高性能)

(当然,用数值替换状态字符串)


祝你好运。

这里有一个基本的DB设计概念(它实际上是使您的表符合的一部分):除了表的主键之外,任何列都不应该依赖任何东西。这应该能回答你的问题

这里有一句很好的话要记住:

每个非关键属性

“必须提供关于钥匙的事实, 整把钥匙,除了钥匙什么都没有 所以帮帮我,科德”

(这也是来自维基)


原因是,违反这条规则可能会造成损害。

这里有一个基本的DB设计概念(它实际上是使表符合的一部分):除了表的主键之外,任何列都不应该依赖任何东西。这应该能回答你的问题

这里有一句很好的话要记住:

每个非关键属性

“必须提供关于钥匙的事实, 整把钥匙,除了钥匙什么都没有 所以帮帮我,科德”

(这也是来自维基)


这样做的原因是,违反此法律可能会造成损害。

为了避免潜在的数据完整性冲突,您可以将“ready”列设置为计算列,或者设置提供此翻译服务的视图


但是,对于这个特定的设计,我会将状态放在一个表中,并且在状态表中有一个IsReady列。然后您可以添加不同的状态,这些状态都已就绪。我已经多次使用过类似的设计,其中某些状态对于某些操作是等效的,但对于其他操作则不是。每个都有一面旗帜。在我的特殊情况下,出于平均计时/性能目的,允许将处于不同状态的许多批计算为“成功”,但完全成功但后来无效的批不被视为“成功”,等等。

为了避免潜在的数据完整性冲突,您可以使“准备就绪”列是一个计算列,或者您可以创建一个提供此翻译服务的视图


但是,对于这个特定的设计,我会将状态放在一个表中,并且在状态表中有一个IsReady列。然后您可以添加不同的状态,这些状态都已就绪。我已经多次使用过类似的设计,其中某些状态对于某些操作是等效的,但对于其他操作则不是。每个都有一面旗帜。在我的特定案例中,出于平均计时/性能目的,许多处于不同状态的批次被视为“成功”,但完全成功但后来无效的批次不被视为“成功”,等等。

这种情况在规范化理论中有一个名称。这被称为“有害冗余”。以下是有害冗余的一些潜在缺点:数据库可能自相矛盾;浪费了太多的空间;浪费了太多的时间

数据库中的矛盾在数据库设计教程中获得最多的播放时间。你必须采取一些措施防止这种情况发生,否则后果自负。您可以依靠谨慎的编程将矛盾排除在数据库之外,也可以声明约束,以防止任何事务以矛盾的状态离开数据库

浪费空间通常是,但并不总是,一个微不足道的成本。浪费空间会导致浪费时间

浪费时间是程序员最关心的问题。但在这里,问题变得更加微妙。有时,“有害冗余”会节省时间,而不是浪费时间。大多数情况下,它会在更新过程中增加时间,但在检索过程中会节省时间。通常,节省或浪费的时间微不足道,因此从速度的角度来看,设计决策也是如此


在你的情况下,速度的影响应该是最小的。这里有一个提示:您多久更新一次行?你的父母多久看一次?更新或阅读的速度有多重要?如果你在阅读过程中获得的时间比你花在更新上的时间更重要,那就去做吧。

这种情况在规范化理论中有一个名字。这被称为“有害冗余”。这里有一些潜在的拖拉