免费智能真题库 > 历年试卷 > 系统架构设计师 > 2024年下半年 系统架构设计师 上午试卷 综合知识
  第61题      
  知识点:   数据模型
  章/节:   数据库系统       

 
(a,c,d,e)(c,d,e)两个集合自然连接的结果是几列。
 
 
  A.  2
 
  B.  4
 
  C.  7
 
  D.  8
 
 
 

  相关试题:数据库系统          更多>  
 
  第40题    2009年下半年  
   57%
以下关于RDBMS数据分布的叙述中,错误的是(40)。
  第8题    2012年下半年  
   35%
某商场商品数据库的商品关系模式P (商品代码,商品名称,供应商,联系方式,库存量),函数依赖集F={商品代码一商品名称,(商品代..
  第6题    2018年下半年  
   26%
给定关系R(A,B,C,D,E)与S(A,B,C,F,G),那么与表达式等价的SQL语句如下:
SELECT(5)FROM R,S  WHERE(6);
   知识点讲解    
   · 数据模型
 
       数据模型
        设计DBS时,一般先用图或表的形式抽象地反映数据彼此之间的关系,称为建立数据模型。现有的数据库系统均是基于某种数据模型的,因此,了解数据模型的基本概念是学习数据库系统的基础。
                      数据模型的分类
                      数据模型主要有两大类,分别是概念数据模型(实体联系模型)和基本数据模型(结构数据模型)。
                      概念数据模型是按照用户的观点来对数据和信息建模,主要用于数据库设计。概念模型主要用实体-联系方法(Entity-Relationship Approach)表示,所以也称为E-R模型。有关E-R模型的设计方法,请阅读2.5节。
                      基本数据模型是按照计算机系统的观点来对数据和信息建模,主要用于DBMS的实现。基本数据模型是数据库系统的核心和基础,通常由数据结构、数据操作和完整性约束三部分组成,其中数据结构是对系统静态特性的描述,数据操作是对系统动态特性的描述,完整性约束是一组完整性规则的集合。
                      常用的基本数据模型有层次模型、网状模型、关系模型和面向对象模型。
                      (1)层次模型:用树型结构表示实体类型及实体间联系。层次模型的优点是记录之间的联系通过指针来实现,查询效率较高。层次模型的缺点是只能表示1:n联系,虽然有多种辅助手段实现m:n联系,但较复杂,用户不易掌握。由于层次顺序的严格和复杂,引起数据的查询和更新操作很复杂,应用程序的编写也比较复杂。
                      (2)网状模型:用有向图表示实体类型及实体间联系。网状模型的优点是记录之间的联系通过指针实现,m:n联系也容易实现,查询效率高。其缺点是编写应用程序比较复杂,程序员必须熟悉数据库的逻辑结构。
                      (3)关系模型:用表格结构表达实体集,用外键(外码)表示实体间联系。其优点有:建立在严格的数学概念基础上;概念单一(关系),结构简单、清晰,用户易懂易用;存取路径对用户透明,从而数据独立性、安全性好,简化数据库开发工作。关系模型的缺点主要是由于存取路径透明,查询效率往往不如非关系数据模型。
                      (4)面向对象模型:用面向对象观点来描述现实世界实体的逻辑组织、对象间限制、联系等的模型。一个面向对象数据库系统是一个持久的、可共享的对象库的存储和管理者,而一个对象库是由一个面向对象模型所定义的对象的集合体。面向对象数据库模式是类的集合,面向对象模型提供了一种类层次结构。在面向对象数据库模式中,一组类可以形成一个类层次,一个面向对象数据库可能有多个类层次。在一个类层次中,一个类继承其所有超类的全部属性、方法和消息。面向对象的数据库系统在逻辑上和物理上从面向记录上升为面向对象、面向可具有复杂结构的一个逻辑整体。允许用自然的方法,并结合数据抽象机制在结构和行为上对复杂对象建立模型,从而大幅度提高管理效率,降低用户使用复杂性。
                      关系模型
                      我们先学习几个相关的基本概念。
                      (1)域:一组具有相同数据类型的值的集合。
                      (2)笛卡儿积:给定一组域D1,D2,…,Dn,这些域中可以是相同的。它们的笛卡儿积为:D1×D2×…×Dn={(d1,d2,…,dn)|dj∈Dj,j=1,2,…,n}。其中每一个元素(d1,d2,…,dn)叫作一个n元组(简称为元组)。元组中的每一个值dj称为一个分量。
                      (3)关系:D1×D2×…×Dn的子集叫作在域D1,D2,…,Dn上的关系,用R(D1,D2,…,Dn)表示。这里R表示关系的名字,n是关系的目或度。
                      关系中的每个元素是关系中的元组,通常用t表示。关系是笛卡儿积的子集,所以关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域。由于域可以相同,为了加以区分,必须为每列起一个名字,称为属性。
                      若关系中的某一属性组(一个或多个属性)的值能唯一地标识一个元组,则称该属性组为候选码(候选键)。若一个关系有多个候选码,则选定其中一个作为主码(主键)。主码的所有属性称为主属性。不包含在任何候选码中的属性称为非码属性(非主属性)。在最简单的情况下,候选码只包含一个属性。在最极端的情况下,关系模式所有属性的组合构成关系模式的候选码,称为全码。
                      关系可以有三种类型:基本关系(基本表、基表)、查询表和视图表。基本表是实际存在的表,它是实际存储数据的逻辑表示。查询表是查询结果对应的表。视图表是由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据。
                      基本关系具有以下6条性质:
                      (1)列是同质的,即每一列中的分量是同一类型的数据,来自同一个域。
                      (2)不同的列可出自同一个域,称其中的每一列为一个属性,不同的属性要给予不同的属性名。
                      (3)列的顺序无所谓,即列的次序可以任意交换。
                      (4)任意两个元组不能完全相同。但在大多数实际关系数据库产品中,例如Oracle等,如果用户没有定义有关的约束条件,它们都允许关系表中存在两个完全相同的元组。
                      (5)行的顺序无所谓,即行的次序可以任意交换。
                      (6)分量必须取原子值,即每一个分量都必须是不可分的数据项。
                      关系的描述称为关系模式,一个关系模式应当是一个五元组,它可以形式化地表示为:R(U,D,DOM,F)。其中R为关系名,U为组成该关系的属性名集合,D为属性组U中属性所来自的域,DOM为属性向域的映象集合,F为属性间数据的依赖关系集合。关系模式通常可以简记为R(A1,A2,…,An)。其中R为关系名,A1,A2,…,An为属性名。
                      关系实际上就是关系模式在某一时刻的状态或内容。也就是说,关系模式是型,关系是它的值。关系模式是静态的、稳定的,而关系是动态的、随时间不断变化的,因为关系操作在不断地更新着数据库中的数据。但在实际当中,常常把关系模式和关系统称为关系,读者可以从上下文中加以区别。
                      在关系模型中,实体以及实体间的联系都是用关系来表示。在一个给定的现实世界领域中,相应于所有实体及实体之间的联系的关系的集合构成一个关系数据库。
                      关系数据库也有型和值之分。关系数据库的型也称为关系数据库模式,是对关系数据库的描述,是关系模式的集合。关系数据库的值也称为关系数据库,是关系的集合。关系数据库模式与关系数据库通常统称为关系数据库。
                      规范化理论
                      设有一个关系模式R(SNAME,CNAME,TNAME TADDRESS),其属性分别表示学生姓名、选修的课程名、任课教师姓名和任课教师地址。仔细分析一下,我们就会发现这个模式存在下列存储异常的问题:
                      (1)数据冗余:如果某门课程有100个学生选修,那么在R的关系中就要出现100个元组,这门课程的任课教师姓名和地址也随之重复出现100次。
                      (2)修改异常:由于上述冗余问题,当需要修改这个教师的地址时,就要修改100个元组中的地址值,否则就会出现地址值不一致的现象。
                      (3)插入异常:如果不知道听课学生名单,这个教师的任课情况和家庭地址就无法进入数据库;否则就要在学生姓名处插入空值。
                      (4)删除异常:如果某门课程的任课教师要更改,那么原来任课教师的地址将随之丢失。
                      因此,关系模式R虽然只有4个属性,但却是性能很差的模式。如果把R分解成两个关系模式:R1(SNAME,CNAME)和R2(CNAME,TNAME,TADDRESS),则能消除上述的存储异常现象。
                      为什么会产生这些异常呢?与关系模式属性值之间的联系直接有关。在模式R中,学生与课程有直接联系,教师与课程有直接联系,而教师与学生无直接联系,这就产生了模式R的存储异常。因此,模式设计强调“每个联系单独表达”是一条重要的设计原则,把R分解成R1和R2是符合这条原则的。
                             函数依赖
                             设R(U)是属性U上的一个关系模式,X和Y是U的子集,r为R的任一关系,如果对于r中的任意两个元组u、v,只要有u[X]=v[X],就有u[Y]=v[Y],则称X函数决定Y,或称Y函数依赖于X,记为X→Y。
                             从函数依赖的定义可以看出,如果有X→U在关系模式R(U)上成立,并且不存在X的任一真子集X'使X'→U成立,那么称X是R的一个候选键。也就是X值唯一决定关系中的元组。由此可见,函数依赖是键概念的推广,键是一种特殊的函数依赖。
                             在R(U)中,如果X→Y,并且对于X的任何一个真子集X',都有X'→Y不成立,则称Y对X完全函数依赖。若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖。
                             在R(U)中,如果X→Y(Y不是X的真子集),且Y→X不成立,Y→Z,则称Z对X传递函数依赖。
                             设U是关系模式R的属性集,F是R上成立的只涉及U中属性的FD集,则有以下3条推理规则:
                             (1)自反性:若YXU,则X→Y在R上成立。
                             (2)增广性:若X→Y在R上成立,且ZU,则XZ→YZ在R上成立。
                             (3)传递性:若X→Y和Y→Z在R上成立,则X→Z在R上成立。
                             这里XZ,YZ等写法表示X∪Z,Y∪Z。上述三条推理规则是函数依赖的一个正确的和完备的推理系统。根据上述三条规则还可以推出其他三条常用的推理规则:
                             (1)并规则:若X→Y和X→Z在R上成立,则X→YZ在R上成立。
                             (2)分解规则:若X→Y在R上成立,且ZY,则X→Z在R上成立。
                             (3)伪传递规则:若X→Y和WY→Z在R上成立,则WX→Z在R上成立。
                             在关系模式R(U,F)中为F所逻辑蕴含的函数依赖全体叫做F的闭包,记作F+
                             设F为属性集U上的一组函数依赖,X是U的子集,那么相对于F属性集X的闭包用X+表示,它是一个从F集使用推理规则推出的所有满足X→A的属性A的集合:
                             X+={属性A|X→A在F+中}
                             如果G+=F+,就说函数依赖集F覆盖G(F是G的覆盖,或G是F的覆盖),或F与G等价。
                             如果函数依赖集F满足下列条件,则称F为一个极小函数依赖集,也称为最小依赖集或最小覆盖。
                             (1)F中任一函数依赖的右部仅含有一个属性。
                             (2)F中不存在这样的函数依赖X→A,使得F与F-{X→A}等价。
                             (3)F中不存在这样的函数依赖X→A,X有真子集Z使得F-{X→A}∪{Z→A}与F等价。
                             范式
                             (1)第一范式(1NF):如果关系模式R的每个关系r的属性值都是不可分的原子值,那么称R是第一范式的模式,r是规范化的关系。关系数据库研究的关系都是规范化的关系。
                             (2)第二范式(2NF):若关系模式R是1NF,且每个非主属性完全函数依赖于候选键,那么称R是2NF模式。
                             (3)第三范式(3NF):如果关系模式R是1NF,且每个非主属性都不传递依赖于R的候选码,则称R是3NF。
                             (4)BC范式(BCNF):若关系模式R是1NF,且每个属性都不传递依赖于R的候选键,那么称R是BCNF模式。
                             上述4种范式之间有如下联系:1NF2NF3NFBCNF。
                             关系模式分解
                             如果某关系模式存在存储异常问题,则可通过分解该关系模式来解决问题。把一个关系模式分解成几个子关系模式,需要考虑的是该分解是否保持函数依赖,是否是无损联接。
                             无损联接分解的形式定义如下:设R是一个关系模式,F是R上的一个函数依赖(FD)集。R分解成数据库模式δ={R1,…,RK}。如果对R中每一个满足F的关系r都有下式成立:
                             
                             那么称分解δ相对于F是无损联接分解,否则称为损失联接分解。
                             下面是一个很有用的无损联接分解判定定理。
                             设p={R1,R2}是R的一个分解,F是R上的FD集,那么分解p相对于F是无损分解的充分必要条件是:(R1∩R2)→(R1-R2)或(R1∩R2)→(R2-R1)。:这两个条件只要有任意一个条件成立就可以了。
                             设数据库模式δ={R1,…,RK}是关系模式R的一个分解,F是R上的FD集,δ中每个模式Ri上的FD集是Fi。如果{F1,F2,…,FK}与F是等价的(即相互逻辑蕴涵),那么我们称分解δ保持FD。如果分解不能保持FD,那么δ的实例上的值就可能有违反FD的现象。
                      反规范化理论
                      前面已经介绍了规范化理论,在对数据模型进行规范化时,主要通过拆分的方式达到目的,而不断的拆分带来了新的问题。因为对多个拆分后的表进行查询操作时,需要涉及大量的连接操作,这使得查询变得费时与低效。为了有效地解决此问题,提出了反规范化技术,该技术与规范化理论做法刚好相反,而希望达到的目标主要是提高查询效率。
                      常用的反规范技术包括:增加冗余列、增加派生列、重新组表、分割表。
                             增加派生列
                             加派生列指增加的列由表中其他数据计算生成。它的作用是在查询时减少连接操作,避免使用集函数。例如,表中有单价,也有数量,此时增加列“总额”,由于
                             总额=单价×数量
                             所以总额就是一个派生列。
                             增加冗余列
                             增加冗余列是指在多个表中具有相同的列,它常用来在查询时避免连接操作。
                             重新组表
                             重新组表指如果许多用户需要查看两个表连接出来的结果数据,则把这两个表重新组成一个表来减少连接而提高性能。
                             分割表
                             有时对表做分割可以提高性能。表分割有两种方式。
                             (1)水平分割:根据一列或多列数据的值把数据行放到两个独立的表中。水平分割通常在下面的情况下使用:
                             ①表很大,分割后可以降低在查询时需要读的数据和索引的页数,同时也降低了索引的层数,提高查询速度。
                             ②表中的数据本来就有独立性。例如表中分别记录各个地区的数据或不同时期的数据,特别是有些数据常用,而另外一些数据不常用。
                             ③需要把数据存放到多个介质上。
                             水平分割会给应用增加复杂度,它通常在查询时需要多个表名,查询所有数据需要union操作。在许多数据库应用中,这种复杂性会超过它带来的优点,因为只要索引关键字不大,则在索引用于查询时,表中增加两到三倍数据量,查询时也就增加读一个索引层的磁盘次数。
                             (2)垂直分割:把主码和一些列放到一个表,然后把主码和另外的列放到另一个表中。如果一个表中某些列常用,而另外一些列不常用,则可以采用垂直分割,另外垂直分割可以使得数据行变小,一个数据页就能存放更多的数据,在查询时就会减少I/O次数。其缺点是需要管理冗余列,查询所有数据需要join操作。
   题号导航      2024年下半年 系统架构设计师 上午试卷 综合知识   本试卷我的完整做题情况  
1 /
2 /
3 /
4 /
5 /
6 /
7 /
8 /
9 /
10 /
11 /
12 /
13 /
14 /
15 /
 
16 /
17 /
18 /
19 /
20 /
21 /
22 /
23 /
24 /
25 /
26 /
27 /
28 /
29 /
30 /
 
31 /
32 /
33 /
34 /
35 /
36 /
37 /
38 /
39 /
40 /
41 /
42 /
43 /
44 /
45 /
 
46 /
47 /
48 /
49 /
50 /
51 /
52 /
53 /
54 /
55 /
56 /
57 /
58 /
59 /
60 /
 
61 /
62 /
63 /
64 /
65 /
66 /
67 /
68 /
69 /
70 /
71 /
72 /
73 /
74 /
75 /
 
第61题    在手机中做本题