总结所有答案,我认为查找表有四种选择:
备选方案 1:
• 说明(主键,较长的 varchar2 列)
备选方案 2:
• 代码(主键,短 varchar2 列)
• 描述(非空,更长的 varchar2 列)
备选方案 3:
• Id(无意义的主键,从序列派生的整数值)
• 描述(非空,更长的 varchar2 列)
备选方案 4:
• Id(无意义的主键,从序列派生的整数值)
• 代码(唯一键,短 varchar2 列)
• 描述(非空,较长的 varchar2 列)
主键列将位于主表中,顶部有外键约束。
每个替代方案的一些特征:
备选方案 1:
• 查询主表时不需要连接
• 对主表执行即席查询时含义明确
• 主表需要更多存储空间
• 主表上的索引将比其他备选方案大得多
• 更新描述值意味着维护麻烦和可能的应用程序停机时间。
备选方案 2:
• 当您想要检索描述值时
需要加入 • 如果您想要过滤某些查找值,则不需要加入:您可以为此使用代码值。
• 对主表进行即席查询时非常明确的含义 • 对主表
的附加存储要求最低
• 主表上的索引会很小。
• 更新描述值很容易,但是代码通常是描述的缩写。更新描述值时,代码可能会变得混乱。
备选方案 3:
• 当您想要检索描述值时需要加入
• 当过滤某些查找值时,您必须在查询中使用描述值,因为 Id 没有意义。
• 对主表进行即席查询时含义不明确 • 对主表
的附加存储要求最低
• 主表上的索引会很小。
• 更新描述值很容易,不会像代码值那样引起混淆
备选方案 4:
• 当您要检索描述值时
需要连接 • 当过滤某些查找值时需要连接,您将使用查找表中的代码值。
• 对主表进行临时查询时,含义不清楚 • 对主表
的附加存储要求最低
• 主表上的索引会很小
• 更新描述值很容易,您也可以非常轻松地将代码值更新为使其类似于描述值。但是,在执行此操作时,您可能需要重新访问一些代码。
个人意见:
我会看看我打算如何使用主表和查找表。哪些查询很重要并且必须高效运行?价值观会改变吗?
我个人的选择是备选方案 2 或 4。如果我绝对确定代码值永远不会改变,我会使用备选方案 2。这是罕见的。国家代码改变,社会安全号码改变。货币代码更改等。所以,大多数时候,我会选择备选方案 4。我不会那么担心额外的连接,尤其是因为查找表是一个小表。
但是:选择适合您要求的替代方案。
当您了解替代品的更多特征时,请随时编辑文本。
问候,
罗布。