gpt4 book ai didi

database - 对于具有两列主键且其中一列是可选的数据库表,最佳做法是什么?

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

在工作中,我们正在查看一个包含三列的表格:

  1. 行 ID(非空,整数)
  2. 上下文 ID(非空,整数)
  3. 值(非空,可变字符)

总行数较少(少于 100)。如果没有上下文 ID,则上下文 ID 当前设置为 0。上下文 ID 是可选的。

主键是(Row Id,Context Id)

在这种情况下,有两种选择:

  1. 保持原样

  2. 将表格分成两个表格。 Context Id为0时一张表(Row Id, Value),Context Id有值时一张表(Row Id, Context Id, Value)。

如果有大量的行,那么我同意拆分表的决定。如果行数很少,那么分割表格似乎有点矫枉过正。

我很想知道在这种情况下人们会推荐什么?总是将单个表分成两个表更好吗?

谢谢,

-拉里

最佳答案

首先,如果这是实体-属性-值反模式,请避免。此答案的其余部分假设不是。

在决定您是要对某些事物进行通用建模(单表)还是专门建模(两个表)时,您需要考虑您的代码是否能够通用处理事物或需要特殊情况。

是否需要特殊情况?

您的代码是否会对值为 0 的 ContextId 进行特殊处理?例如,您是否可以运行 select WHERE Con​​textId=0 然后继续以通用方式查看不同的上下文?是否存在只能使用 ContextId=0 执行的特殊逻辑?您是否觉得需要在您的代码中使用一个特殊常量来表示此 contextId?这个常量会出现在某些 if 语句中吗?

如果这些问题的答案通常是肯定的,那么创建单独的表格。如果您以不同的方式对待它,那么将这些东西放在一个表中将不会有任何好处。

根据您的问题,我猜测是这种情况。

还是全是通用的?

如果 ContextId 为零在整个代码中与所有其他上下文 ID 一样对待,那么一定要将它与其他上下文 ID 放在同一个表中。

权衡

如果事情不是那么明确,您需要做出权衡决定。您需要根据您对这些信息的使用有多少是通用的,有多少是特定的。我会偏向于创建两个表。

关于database - 对于具有两列主键且其中一列是可选的数据库表,最佳做法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17498925/

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