gpt4 book ai didi

sql - 我应该在查找表中使用代码吗

转载 作者:太空狗 更新时间:2023-10-30 01:46:17 24 4
gpt4 key购买 nike

我在 Orable 数据库上工作,我正在添加几个查找表。

一般的问题是查找表应该包含代码和描述,代码是返回主表的 FK,还是查找表应该只包含描述,是返回主表的 FK。

我支持代码/描述对。我觉得如果我有 type = Contractorcode = CN 存储过程应该说 where type='CN' 而不是只有type=Contractor 并且没有代码并在存储过程中这样说:where type='Contractor' 因为如果我想显示怎么办:General Contractor 给用户而不是 Contractor。然后我将不得不更改存储过程。我觉得我不应该这样做。 (更改存储过程需要在开发中重新编译,迁移到测试,由客户重新测试,并迁移需要经过更改控制过程的产品,该过程涉及两周的等待期;而修改表中的记录不需要任何这个)

我的数据建模师只想使用描述。他的主要论点是它需要一个不必要的连接。

应该怎样做?如果应该以代码/描述的方式完成,我该如何说服数据建模者?

谢谢!

type_cd    type_dsc
CN Contractor
IN Inspector

最佳答案

总结所有答案,我认为查找表有四种选择:

备选方案 1:
• 描述(主键,较长的 varchar2 列)

备选方案 2:
• 代码(主键,一个短的varchar2列)
• 说明(不为空,更长的 varchar2 列)

备选方案 3:
• Id(一个无意义的主键,一个序列派生的整数值)
• 说明(不为空,更长的 varchar2 列)

备选方案 4:
• Id(一个无意义的主键,一个序列派生的整数值)
• 代码(唯一键,一个短的 varchar2 列)
• 说明(不为空,更长的 varchar2 列)

主键列将位于主表中,顶部有外键约束。

每个备选方案的一些特征:

备选方案 1:
• 查询主表时不需要join
• 对主表进行临时查询时意义明确
• 主表需要更多存储空间
• 主表上的索引将比其他替代方案中的索引大得多
• 更新描述值意味着维护麻烦和可能的应用程序停机。

备选方案 2:
• 获取描述值时需要加入
• 如果您想过滤某些查找值,则不需要加入:您可以为此使用代码值。
• 对主表进行临时查询时含义非常明确
• 主表的额外存储要求最低
• 主表上的索引会很小。
• 更新描述值很容易,但是代码通常是描述的缩写。更新描述值时,代码可能会变得困惑。

备选方案 3:
• 获取描述值时需要加入
• 过滤某些查找值时,您必须在查询中使用描述值,因为 ID 没有意义。
• 对主表进行临时查询时含义不明确
• 主表的额外存储要求最低
• 主表上的索引会很小。
• 更新描述值很容易,不会像代码值那样引起混淆

备选方案 4:
• 获取描述值时需要加入
• 过滤某些查找值时需要连接,您将使用查找表中的代码值。
• 对主表进行临时查询时含义不明确
• 主表的额外存储要求最低
• 主表上的索引会很小
• 更新描述值很容易,您也可以非常轻松地更新代码值,使其类似于描述值。不过,您可能需要在执行此操作时重新访问一些代码。

个人观点:

我会看看我打算如何使用主表和查找表。哪些查询很重要并且必须高效运行?值(value)观会改变吗?

我个人的选择是备选方案 2 或 4。如果我绝对确定代码值永远不会更改,我会使用备选方案 2。而这很少见。国家代码改变,社会安全号码改变。货币代码更改等。所以,大多数时候,我会选择备选方案 4。我不太关心额外的连接,尤其是因为查找表是一个小表。

但是:选择适合您要求的备选方案。

当您了解替代方案的更多特征时,请随时编辑文本。

问候,
罗布。

关于sql - 我应该在查找表中使用代码吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4946252/

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