2010-03-10 40 views
1

当我创建一个视图时,我可以将它基于来自不同表格的多个列。 当我想创建一个查找表时,我需要来自一个表的信息,例如订单表的外键,以从另一个表中获取客户详细信息。我可以创建一个具有参数的视图,以确保它能够获取我需要的所有数据。我也可以 - 从我一直在读的东西 - 做一个查询表。这种情况有什么区别,我应该什么时候选择查找表?我希望这不是一个坏问题,我还没有进入数据库的阶段)。数据库视图和查找之间的区别

回答

2

我认为您对“查找表”的使用有些偏差。按照正常的说法,查找表是代码或参考数据表。它可能由一个代码和一个描述或代码扩展组成。这些表的目的是为受限的列提供一个允许值,例如CUSTOMER_TYPE或PRIORITY_CODE。这类表格通常被称为“常设数据”,因为它根本不会改变。在查找表中定义这些数据的价值在于它们可以在外键中使用并填充下拉列表和值列表。

你所描述的是一个稍微不同的情景:

我需要从一个表信息, 例如为了 表的外键,从 得到客户的详细信息,另一台

这两个表都是应用程序数据表。客户和订单记录是动态的。现在,从Customer表中检索附加数据以显示Order数据显然是有效的,从这个意义上说,Customer是一个“查找表”。更具针对性的是Order的父级表,因为它具有由Order上的外键引用的主键。

通过一切手段建立一个视图来捕获Order和Customer之间的连接逻辑。在构建在多个地方使用相同连接表的应用程序时,这些视图可能非常有用。

2

创建视图为您提供数据的“实时”表示,就像在查询时一样。这是以服务器负载较高为代价的,因为它必须确定每个查询的值。 这可能很昂贵,具体取决于表大小,数据库实现和视图定义的复杂性。

另一方面,查找表通常是“手动”填充的,即不是每个针对它的查询都会导致昂贵的操作从多个表中获取值。相反,如果基础数据发生变化,程序必须处理更新查找表。

通常,查找表适合那些很少变化但经常读取的东西。另一方面观点 - 虽然执行成本更高)更为现实。

+0

那么在查找表中,您不会找到实时数据表示? 这张表是如何手动填充的?你的意思是说你每天都会运行一些存储过程来更新你的查找表,使它保持最新状态? – Younes 2010-03-10 14:20:21

+0

@Younes - 根据您的查看与查询表的问题,是的,查找表不会包含“实时”数据(必然),您需要以某种方式维护表数据(按照定期计划或作为源信息变化)。无论如何,视图是一个动态查找表。 – 2010-03-10 15:10:31

0

这里有一个查找表的一个例子。我们有跟踪陪审员的系统,其中一个表是JurorStatus。此表包含了所有陪审员的有效StatusCodes:

代码:价值
WS:将服务
PP:推迟
EM:请问军事
IF:不符合条件的罪犯

这是一个查找表有效的代码。

视图就像查询。

0

只要学会编写sql查询以获得您需要的东西。无需创建视图!在许多情况下,视图并不好用,尤其是当你开始将它们放在其他视图上时,它们会导致性能下降。请勿将视图用作查询写入的简写。

相关问题