《视图更新与关系数据库理论》——第1章 抛砖引玉

    xiaoxiao2024-05-13  106

    第1章 抛砖引玉视图更新与关系数据库理论身教胜于言教。

    ——Samuel Johnson《Rasselas》(1759)

    本书中所涉及的大多数范例都是基于我们耳熟能详的(可别说是老掉牙的)“供应商与零部件”数据库而来的。我为再一次把这个老生常谈的例子拿出来表示歉意,但正如我在其他地方所说,我认为在各种不同的出版物上使用同样的例子对于学习而言是有利无害的。就SQL来说[1],数据库包含3张表,更确切地说,是3张基表,分别称为供应商表S(“suppliers”)、零部件表P(“parts”)和设备供应表SP(“shipments”)。样本值如图1.1所示。

    这几张表简要的语义如下。

    表S的内容列出了签过合同的供应商。每个供应商有一个唯一的供应商编号SNO、可能不唯一的供应商名字SNAME(尽管图1.1中的样本值恰好是唯一的),以及状态值STATUS和位置CITY。注意:在本书的其余部分,我将把“签过合同的供应商”简称为“供应商”。表P的内容表示各种各样的零部件。每一种零件都有唯一的零件编号PNO、名称PNAME、重量WEIGHT和用于存储同种类零部件的位置CITY。注意:在本书其余部分,我将把“各种各样的零部件”简称为“零部件”。表SP的内容表明了供应情况,即显示了哪种零件被哪一家供应商运输或供应。每一次运输都有供应商编号SNO、零件编号PNO以及数量QTY。同时,对于特定的供应商和零件,在某一时期,最多只能有一次运输。并且像这样的供应商编号和零件编号组合对任意一次运输都是唯一的。注意:本书的其余部分,我将假设QTY值总是大于零的。

    现在让我们把重心放在表S上。在本章的其余部分,我们基本上不再关注表P和表SP,只在个别地方提及。以下是表S的SQL定义。

    CREATE TABLE S ( SNO VARCHAR(5) NOT NULL , SNAME VARCHAR(25) NOT NULL , STATUS INTEGER NOT NULL , CITY VARCHAR(20) NOT NULL , UNIQUE ( SNO ) ) ;

    如前所述,虽然表S是基表,但我们仍然可以定义任意数量的“基于”这个基表的视图。这里有两个例子——伦敦供应商LS(“London suppliers”)和非伦敦供应商NLS(“non London suppliers”)。

    CREATE VIEW LS /* London suppliers */ AS ( SELECT SNO , SNAME , STATUS , CITY FROM S WHERE CITY = ‘London’ ) ; CREATE VIEW NLS /* non London suppliers */ AS ( SELECT SNO , SNAME , STATUS , CITY FROM S WHERE CITY <> ‘London’ ) ;

    这两个视图的样本值与图1.1基表的对应关系如图1.2所示。

    我将在本章中以视图LS和NLS为基础来阐述整个范例,以求抛砖引玉。实际上,我相信视图都是可更新的,这似乎与本领域内的流行说法和最常见的认知格格不入,但在这里我将向大家展示一些关于这个问题基本的理念,以及为什么我会这样想。(不过请注意:在现阶段我只会对这个吸引眼球的想法做必要的说明,详细的探讨我们放到后面的章节再来进行。)

    相关资源:Oracle DBA手记:数据库诊断案例与性能优化实践(一线Oracle DBA工作思考的心得,盖国强亲自策划)--详细书签版
    最新回复(0)