当我创建一个视图时,我可以将它基于来自不同表的多个列。当我想创建一个查找表时,我需要一个表中的信息,例如订单表的外键,以便从另一个表中获取客户详细信息。我可以创建一个具有参数的视图,以确保它能够获取我需要的所有数据。我也可以 - 从我一直在阅读的内容来看 - 制作一个查找表。在这种情况下有什么区别,我应该什么时候选择查找表?我希望这不是一个坏问题,我还不是很喜欢 db ;)。
5 回答
创建视图可为您提供查询时数据的“实时”表示。这是以服务器上更高的负载为代价的,因为它必须确定每个查询的值。这可能会很昂贵,具体取决于表大小、数据库实现和视图定义的复杂性。
另一方面,查找表通常是“手动”填充的,即不是每个针对它的查询都会导致从多个表中获取值的昂贵操作。相反,如果基础数据发生变化,您的程序必须负责更新查找表。
通常,查找表适用于很少更改但经常阅读的内容。另一方面,视图——虽然执行成本更高——是更新的。
我认为您对“查找表”的使用有些错误。在正常用语中,查找表是代码或参考数据表。它可能由代码和描述或代码扩展组成。此类表的目的是为受限列提供允许的值,例如 CUSTOMER_TYPE 或 PRIORITY_CODE。这类表格通常被称为“常备数据”,因为它几乎不会发生变化。在查找表中定义这些数据的价值在于它们可以用于外键并填充下拉列表和值列表。
您所描述的情况略有不同:
我需要一个表中的信息,例如订单表的外键,以便从另一个表中获取客户详细信息
这两个表都是应用程序数据表。客户和订单记录是动态的。现在,从 Customer 表中检索附加数据以与 Order 数据一起显示显然是有效的,从这个意义上说,Customer 是一个“查找表”。更贴切的是Order的父表,因为它有Order的外键引用的主键。
一定要构建一个视图来捕获 Order 和 Customer 之间的连接逻辑。在构建在多个位置使用相同连接表的应用程序时,此类视图非常有用。
这是查找表的示例。我们有一个跟踪陪审员的系统,其中一张表是陪审员状态。此表包含陪审员的所有有效状态代码:
代码:值
WS:将服务
PP:推迟
EM:请原谅军事
IF:不合格的重罪犯
这是有效代码的查找表。
视图类似于查询。
阅读本教程,您可能会在需要查找表时找到有用的信息:
只需学习编写 sql 查询即可获得所需的内容。无需创建视图!视图在许多情况下都不好用,尤其是当您开始将它们基于其他视图时,它们会降低性能。不要将视图用作查询编写的简写。