设为首页 收藏本站
查看: 1814|回复: 0

[经验分享] DB2 9 行使启示(733 检验)认证指南,第 2 部分: DB2 数据行使(2)

[复制链接]

尚未签到

发表于 2016-11-19 06:03:29 | 显示全部楼层 |阅读模式
进修基础观念











  变化和访谒数据

  变化数据

  当计划一个数据库行使办法时,数据变化是须方法会的一个枢纽进程。它取决于以下几个因素:

  • 数据模子和元数据(必须处理什么样的编目数据、范例、限定和反省?)
  • 业务需求(须要如何识别和批改数据库中的数据?)
  • 用户、表和列级别上的权限和平安性(特定的变化能否被准许?)
  • 访谒数据的接口(如何与变化的数据克制交互?)


  在行使办法的计划中,应该运用 DB2 的哪些功用?用户是不能批改体系编目数据的。编目表和视图存储关于数据的逻辑和物理界说的元数据。SYSIBM 体例中包括一些表,而这些表的视图则属于 SYSCAT 体例。经由盘诘编目,可以取得有效的信息。为了做出稳妥的选择,须要同时考虑行使办法的数据库计划和方针景象。例如,可以选择在数据库计划中实行某些业务规则,而不是在行使办法中插手呼应的逻辑。

  所运用的功用以及对这些功用的运用程度会有很年夜的不合。须要考虑的功用网罗:

  • 访谒数据时运用:

    • 嵌入式 SQL,网罗嵌入式 SQL for Java (SQLJ)
    • DB2 Call Level Interface (DB2 CLI)、Open Database Connectivity (ODBC) 和 JDBC
    • Microsoft 范例
    • Perl DBI
    • 盘诘产物


      
  • 节制数据值时运用:

    • 数据范例(内置或用户界说)
    • 表反省约束
    • 参照齐备性约束
    • 运用 CHECK OPTION 的视图
    • 行使办法逻辑和变量范例


      
  • 节制数据值之间的干系时运用:

    • 参照齐备性约束
    • 触发器
    • 行使办法逻辑


      
  • 执行办法时运用:

    • 存储进程
    • 用户界说函数
    • 触发器



  将以数据为焦点的逻辑从行使办法转移到数据库的枢纽优势是,行使办法变得越发独立于数据。盘绕着数据的逻辑汇合在一其中间,即数据库。这意味着您只需变化一次数据或数据逻辑,就可以立即影响依靠于该数据的完整绝对行使办法。

  固然后一个利益极度壮大,然则必须考虑到,放入数据库中的数据逻辑会平等地影响数据的完整绝对用户。您必须考虑施加在数据上的规则和约束是实用于数据的完整绝对用户,仍是只实用于单个行使办法的用户。

  行使办法的需求也年夜概有助于决定在数据库中仍是在行使办法中施加规则。例如,年夜概须要在一个特定订单的数据输入阶段处理有效性错误。每每,这品种型的数据验证应该在行使办法编程阶段克制。另外,还应该考虑行使办法地点的较量争论景象。您须要考虑在客户端机械上执行逻辑与在数据库效劳器上运转逻辑之间的不合,在数据库效劳器上运转逻辑时要运用存储进程,年夜概用户界说函数 (UDF),年夜概连合运用两者,这种方法一样往常来说要更壮大一些。在某些情况下,切确的方法是在行使办法(年夜概是由于特定于行使办法的需求)和数据库(年夜概是由于行使办法之外的其他交互用途)中都插手规则。








回页首




  访谒数据

  在干系数据库中,必须运用 SQL 来访谒所需的数据。不外,可以选择将 SQL 集成到行使办法中所采纳的方法。您可以从以下接口以及它们所支撑的言语中做出选择:

  • 嵌入式 SQL
  • C/C
  • COBOL
  • FORTRAN
  • Java® 言语(经由 SQLJ 或 JDBC)
  • REXX
  • DB2 CLI 和 ODBC
  • Microsoft 范例,网罗 ADO.NET 和 OLE DB
  • Visual Basic、Visual C   和 .NET 言语
  • Perl DBI
  • Perl
  • PHP
  • 诸如 Lotus Approach、IBM Query Management Facility、Microsoft Access 或 Microsoft Excel 之类的盘诘产物


  在运转任何可执行 SQL 语句之前,办法必须创建到方针数据库效劳器的邻接。该邻接标识运转办法的用户的受权 ID 和办法所运用的数据库效劳器的称呼。每每,行使办法进程一次只能邻接到一个数据库。这个效劳器被称作当前效劳器。不外,在多站点更新景象中,行使办法可以邻接到多个数据库效劳器。在这种情况下,只要一个效劳器能作为当前效劳器。

  办法在创建与一个数据库效劳器的邻接时,可以显式地运用一条邻接语句,也可以隐式地邻接到缺省的数据库效劳器。Java 行使办法还可以经由一个 Connection 实例创建邻接。








回页首




  跨多个表盘诘数据库

  可以运用 SELECT 语句从一个或多个表中盘诘数据。为了访谒所盘诘的数据,您须要稳妥的权限。盘诘前往的数据被称为效果集

  SELECT 语句只指定效果集所需获取的数据应餍足的规范。它并不指定 DB2 前往数据的方法。DB2 优化器会按照来自体系编目表确当前数据库统计信息,以及须要考虑运用的方案范例,构建一个访谒方案,从而决定采纳何种方法前往数据。

  此刻来看一些 SELECT 语句的样例。上面的语句从 store 和 product 表中选择完整绝对商店名和产物名:
SELECT A.STORE_NAME, B.PRODUCT_NAME FROM STORE A, PRODUCT B




  Store_name 是 store 表中的一列。Product_name 是 product 表中的一列。

  此刻看看另一个例子。在 employee 表中,我们将选择最高薪水少于完整绝对其他部分均匀薪水的部分的部分编号(WORKDEPT)和部分最高薪水(SALARY):
SELECT WORKDEPT, MAX(SALARY)
FROM EMPLOYEE EMP_COR
GROUP BY WORKDEPT
HAVING MAX(SALARY) < (SELECT AVG(SALARY)
FROM EMPLOYEE
WHERE NOT WORKDEPT = EMP_COR.WORKDEPT)










回页首




  运用 MQT

  MQT 的界说基于盘诘的效果。MQT 可以明显前进盘诘的功用。本教程将引见 MQT、总结表(summary table)和 staging 表,并经由一些实用的例子提醒如何创设和运用物化盘诘表。

  MQT 是基于盘诘的效果界说的一个表。MQT 中包括的数据来自 MQT 界说所基于的一个或多个表。总结表(也称主动总结表[AST])关于 IBM DB2 for Linux, UNIX, and Windows 的用户来说应该感叹相比熟悉,它们可以看作长短凡的 MQT。fullselect 是总结表界说的一部分,它包括一个 GROUP BY 子句,该子句总结 fullselect 中所引用表中的数据。

  您可以将 MQT 看作一种物化的视图。视图和 MQT 都是基于一个盘诘来界说的。每当视图被引用时,视图所基于的盘诘便会运转。然则,MQT 抱负上会将盘诘效果存储为数据,您可以运用 MQT 中的这些数据,而不是运用底层表中的数据。MQT 可以明显前进盘诘的功用,尤其是前进庞大盘诘的功用。若是优化器确定盘诘或盘诘的一部分可以用一个 MQT 来办理,那么盘诘就可以被重写以便行使 MQT。MQT 可以在创设表时界说,可以界说为由体系维护,也可以界说为由用户维护。

  这种 MQT 中的数据是由体系维护的。当创设这品种型的 MQT 时,可以指定表数据是 REFRESH IMMEDIATE 仍是 REFRESH DEFERRED。经由 REFRESH 枢纽字可以指定如何维护数据。DEFERRED 的意思是,表中的数据可以在任何时候经由 REFRESH TABLE 语句来改进。体系维护的 MQT,不管是 REFRESH DEFERRED 范例的仍是 REFRESH IMMEDIATE 范例的,对它们的拔出、更新或删除行使都是不准许的。然则,关于 REFRESH IMMEDIATE 范例的体系维护的 MQT,可以经由 对底层表的变化(即拔出、更新或删除行使)来更新。

  上面的末节将提醒一个创设 REFRESH IMMEDIATE 范例的体系维护的 MQT 的例子。这个表名为 EMP,它基于 SAMPLE 数据库中的底层表 EMPLOYEE 和 DEPARTMENT。由于 REFRESH IMMEDIATE MQT 要求来自盘诘内引用的每个表至少有一个静心键要出目下当今 select 列表中,所以我们首先在 EMPLOYEE 表的 EMPNO 列上界说一个静心性约束,另外还要在 DEPARTMENT 表的 DEPTNO 列上界说一个静心性约束。DATA INITIALLY DEFERRED 子句的意思是,在执行 CREATE TABLE 语句的时候,并不将数据拔出到表中。MQT 被创设好之后,就会处于反省暂挂(check pending)情况,在对它执行 SET INTEGRITY 语句之前,不能盘诘它。IMMEDIATE CHECKED 子句指定,必须按照用于界说该 MQT 的盘诘对数据克制反省,并改进数据。NOT INCREMENTAL 子句指定对整个表克制齐备性反省。
CONNECT TO SAMPLE
...
ALTER TABLE EMPLOYEE ADD UNIQUE (EMPNO)
ALTER TABLE DEPARTMENT ADD UNIQUE (DEPTNO)
CREATE TABLE EMP AS (SELECT E.EMPNO, E.FIRSTNME, E.LASTNAME, E.PHONENO, D.DEPTNO,
SUBSTR(D.DEPTNAME, 1, 12) AS DEPARTMENT, D.MGRNO FROM EMPLOYEE E, DEPARTMENT D
WHERE E.WORKDEPT = D.DEPTNO)
DATA INITIALLY DEFERRED REFRESH IMMEDIATE
SET INTEGRITY FOR EMP IMMEDIATE CHECKED NOT INCREMENTAL



版权声明:
原创作品,准许转载,转载时请务必以超链接体例标明文章 原始出处 、作者信息和本声明。否则将穷究法律责任。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-302237-1-1.html 上篇帖子: DB2缓冲池、表空间 下篇帖子: 第四部分 DB2 V7.X 版本SQL存储过程编译配置说明
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表