gpt4 book ai didi

database - isActive 的替代品

转载 作者:搜寻专家 更新时间:2023-10-30 20:19:17 25 4
gpt4 key购买 nike

Should I delete or disable a row in a relational database?略有相关

考虑到我将采用在历史表中对我的表进行仓储更改的策略,我面临以下用于在 MySQL 中为给定行实现状态的选项:

  • 一个isActive booelan
  • activeStatus 枚举
  • 一个 activeStatus INT 引用一个小的 ActiveStatus 查找表
  • activeStatus INT 没有引用另一个表

在我看来,第一种方法相当不灵活,因为将来我可能需要更多的 bool 值来支持其他类型的事件状态(我不确定它们会是什么,但可能类似于“被淘汰”或“对随机用户组有效”等)。

有人告诉我 MySQL 枚举很糟糕,所以第二种方法可能行不通。

我喜欢第三种方法,但我想知道对于一个相对较小的问题,它是否是一种粗暴的解决方案。

第四种方法要求我们提前知道每个状态 INT 的含义,这似乎是一种过时的做事方式。

是否有规范的正确答案?我是否忽略了另一种方法?

最佳答案

就我个人而言,我会选择您的第三个选项。

正如您所建议的, bool 值在现实中往往更复杂。 ENUM 可能很好,但它们有缺点,一旦您想存储有关每个值的附加信息——添加者、添加时间、是否仅在特定时间段或源系统、评论等内有效——就变得困难了,而使用查找表可以轻松地将这些数据保存在其他列中。 ENUM 是将数据限制为特定值(如 CHECK 约束)的好工具,但如果这些值具有重要意义并且需要向用户公开,则不是一个很好的工具。

如果您打算像事实表一样对待历史表并在报告中使用它,您的问题并不完全清楚,但如果是这样,那么您可以将 ActiveStatus 查找表视为一个维度。在这种情况下,一个表就容易多了,因为你的报告工具可以从维度表中读取可能的值,以便让用户选择他的查询条件;这些工具通常对 ENUM 一无所知。

关于database - isActive 的替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14473821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com