数据库四五六章作业答案

合集下载

数据库第五章习题及答案

数据库第五章习题及答案

数据库第五章习题及答案本文档为数据库第五章的习题及答案,帮助读者巩固数据库相关知识。

习题1. 数据库的优点有哪些?数据库具有以下优点: - 数据共享:多个用户可以同时访问和共享数据库中的数据。

- 数据一致性:数据库提供事务管理能力,保证了数据的一致性。

- 数据持久性:数据在数据库中是永久存储的,不会因为系统关机或程序结束而丢失。

- 数据冗余度低:数据库通过规范化设计,减少了数据的冗余性,提高了数据的存储效率。

- 数据独立性:数据库支持数据与应用程序的独立性,提高了系统的灵活性和维护性。

- 数据安全性:数据库提供了用户权限管理和数据备份机制,保证了数据的安全性。

2. 数据库的三级模式结构是什么?数据库的三级模式结构包括: - 外模式(视图层):外模式是用户所看到的数据库的子集,用于描述用户对数据库的逻辑视图。

每个用户可以有不同的外模式来满足自己的需求。

- 概念模式(逻辑层):概念模式是全局数据库的逻辑结构和组织方式,描述了数据的总体逻辑视图。

概念模式独立于具体的应用程序,是数据库管理员的角度来看待数据库的。

- 内模式(物理层):内模式是数据库的存储结构和物理组织方式,描述了数据在存储介质上的实际存储方式。

3. 数据库的完整性约束有哪些?数据库的完整性约束包括: - 实体完整性约束:确保表的主键不为空,每个实体都能够唯一标识。

- 参照完整性约束:确保外键的引用关系是有效的,即外键值必须等于被引用表中的主键值或者为空。

- 用户定义完整性约束:用户可以自定义额外的完整性约束,如检查约束、唯一约束、默认约束等。

4. 数据库的关系模型有哪些特点?数据库的关系模型具有以下特点: - 数据用二维表的形式进行组织,表由行和列组成,每一行表示一个实体,每一列表示一个属性。

- 表与表之间通过主键和外键建立关联关系,形成关系。

- 关系模型提供了一种数据独立性的设计方法,使得应用程序与数据的逻辑结构相分离,提高了系统的灵活性和可维护性。

数据库原理与运用第4章习题答案

数据库原理与运用第4章习题答案

数据库原理与运用第4章部分习题答案一、选择题(1)C (2)D (3)C (4)C (5)A(6)B (7)C (8)C (9)A (10)D二、填空题(1) DDL(2) 自含式,嵌入式(3)DROP,DELETE(4)基本表或视图(5)更新(6)CREATE,ALTER,DROP(7)AND,OR,NOT(8)INSERT,UPDATE,DELETE(9)HAVING(10)INTO三、操作题1.每个关系建立相应的表结构,添加若干记录。

CREA TE T ABLE S(SNO V ARCHAR(5) NOT NULL PRIMARY KEY,SNAME V ARCHAR(20) NOT NULL,ADDRESS NV ARCHAR(30),TEL V ARCHAR(20))INSERT INTO S V ALUES(‘S1’,’SN1’,’上海南京路’,’68564345’)……CREA TE T ABLE P(PNO V ARCHAR(5) NOT NULL PRIMARY KEY,PNAME V ARCHAR(20) NOT NULL,SPEC V ARCHAR(20),CITY NV ARCHAR(20);COLOR NV ARCHAR(2))INSERT INTO P V ALUES(‘P1’,’PN1’,’8x8’,’无锡’,’红’)……CREA TE T ABLE J(JNO V ARCHAR(5) NOT NULL PRIMARY KEY,JNAME V ARCHAR(20) NOT NULL,LEADER V ARCHAR(10),BG INT)INSERT INTO J V ALUES(‘J1’,’JN1’,’王总’,10)……CREA TE T ABLE SPJ(SNO V ARCHAR(5) NOT NULL,PNO V ARCHAR(5) NOT NULL,JNO V ARCHAR(5) NOT NULL,QTY INT,CONSTRAINT PR_SPJ PRIMARY KEY(SNO,SPNO,JNO)) INSERT INTO SPJ V ALUES(‘S1’,’P1’,’J1’,200)……2.完成如下查询:(1)找出所有供应商的姓名和地址、电话。

(完整版)数据库第六章答案

(完整版)数据库第六章答案

第六章6.1.1Attributes must be separated by commas. Thus here B is an alias of A.6.1.2a)SELECT address AS Studio_AddressFROM StudioWHERE NAME = 'MGM';b)SELECT birthdate AS Star_BirthdateFROM MovieStarWHERE name = 'Sandra Bullock';c)SELECT starNameFROM StarsInWHERE movieYear = 1980OR movieTitle LIKE '%Love%';However, above query will also return words that have the substring Love e.g. Lover. Below query will only return movies that have title containing the word Love.SELECT starNameFROM StarsInWHERE movieYear = 1980OR movieTitle LIKE 'Love %'OR movieTitle LIKE '% Love %'OR movieTitle LIKE '% Love'OR movieTitle = 'Love';d)SELECT name AS Exec_NameFROM MovieExecWHERE netWorth >= 10000000;e)SELECT name AS Star_NameFROM movieStarWHERE gender = 'M'OR address LIKE '% Malibu %';6.1.3a)SELECT model,speed,hdFROM PCWHERE price < 1000 ;MODEL SPEED HD----- ---------- ------1002 2.10 2501003 1.42 801004 2.80 2501005 3.20 2501007 2.20 2001008 2.20 2501009 2.00 2501010 2.80 3001011 1.86 1601012 2.80 1601013 3.06 8011 record(s) selected.b)SELECT model ,speed AS gigahertz,hd AS gigabytesFROM PCWHERE price < 1000 ;MODEL GIGAHERTZ GIGABYTES ----- ---------- ---------1002 2.10 2501003 1.42 801004 2.80 2501005 3.20 2501007 2.20 2001008 2.20 2501009 2.00 2501010 2.80 3001011 1.86 1601012 2.80 1601013 3.06 8011 record(s) selected.c)SELECT makerFROM ProductWHERE TYPE = 'printer' ; MAKER-----DDEEEHH7 record(s) selected.d)SELECT model,ram ,screenFROM LaptopWHERE price > 1500 ;MODEL RAM SCREEN----- ------ -------2001 2048 20.12005 1024 17.02006 2048 15.42010 2048 15.44 record(s) selected.e)SELECT *FROM PrinterWHERE color ;MODEL CASE TYPE PRICE----- ----- -------- ------3001 TRUE ink-jet 993003 TRUE laser 9993004 TRUE ink-jet 1203006 TRUE ink-jet 1003007 TRUE laser 2005 record(s) selected.Note: Implementation of Boolean type is optional in SQL standard (feature ID T031). PostgreSQL has implementation similar to above example. Other DBMS provide equivalent support. E.g. In DB2 the column type can be declare as SMALLINT with CONSTRAINT that the value can be 0 or 1. The result can be returned as Boolean type CHAR using CASE.CREATE TABLE Printer(model CHAR(4) UNIQUE NOT NULL,color SMALLINT ,type VARCHAR(8) ,price SMALLINT ,CONSTRAINT Printer_ISCOLOR CHECK(color IN(0,1)));SELECT model,CASE colorWHEN 1THEN 'TRUE'WHEN 0THEN 'FALSE'ELSE 'ERROR'END CASE ,type,priceFROM PrinterWHERE color = 1;f)SELECT model,hdFROM PCWHERE speed = 3.2AND price < 2000;MODEL HD----- ------1005 2501006 3202 record(s) selected.6.1.4a)SELECT class,countryFROM ClassesWHERE numGuns >= 10 ;CLASS COUNTRY ------------------ ------------Tennessee USA1 record(s) selected.b)SELECT name AS shipName FROM ShipsWHERE launched < 1918 ;SHIPNAME------------------HarunaHieiKirishimaKongoRamilliesRenownRepulseResolutionRevengeRoyal OakRoyal Sovereign11 record(s) selected.c)SELECT ship AS shipName, battleFROM Outcomes WHERE result = 'sunk' ; SHIPNAME BATTLE ------------------ ------------------Arizona Pearl Harbor Bismark Denmark Strait Fuso Surigao Strait Hood Denmark Strait Kirishima Guadalcanal Scharnhorst North Cape Yamashiro Surigao Strait 7 record(s) selected.d)SELECT name AS shipName FROM ShipsWHERE name = class ;SHIPNAME------------------IowaKongoNorth CarolinaRenownRevengeYamato6 record(s) selected.e)SELECT name AS shipNameFROM ShipsWHERE name LIKE 'R%';SHIPNAME------------------RamilliesRenownRepulseResolutionRevengeRoyal OakRoyal Sovereign7 record(s) selected.Note: As mentioned in exercise 2.4.3, there are some dangling pointers and to retrieve all ships a UNION of Ships and Outcomes is required.Below query returns 8 rows including ship named Rodney.SELECT name AS shipNameFROM ShipsWHERE name LIKE 'R%'UNIONSELECT ship AS shipNameFROM OutcomesWHERE ship LIKE 'R%';f) Only using a filter like '% % %' will incorrectly match name such as ' a b 'since % can match any sequence of 0 or more characters.SELECT name AS shipNameFROM ShipsWHERE name LIKE '_% _% _%' ;SHIPNAME------------------0 record(s) selected.Note: As in (e), UNION with results from Outcomes.SELECT name AS shipNameFROM ShipsWHERE name LIKE '_% _% _%'UNIONSELECT ship AS shipNameFROM OutcomesWHERE ship LIKE '_% _% _%' ;SHIPNAME------------------Duke of YorkKing George VPrince of Wales3 record(s) selected.6.1.5a)The resulting expression is false when neither of (a=10) or (b=20) is TRUE.a = 10b = 20 a = 10 OR b = 20NULL TRUE TRUETRUE NULL TRUEFALSE TRUE TRUETRUE FALSE TRUETRUE TRUE TRUEb)The resulting expression is only TRUE when both (a=10) and (b=20) are TRUE.a = 10b = 20 a = 10 AND b = 20TRUE TRUE TRUEc)The expression is always TRUE unless a is NULL.a < 10 a >= 10 a = 10 ANDb = 20TRUE FALSE TRUEFALSE TRUE TRUEd)The expression is TRUE when a=b except when the values are NULL.a b a = bNOT NULL NOT NULL TRUE when a=b; else FALSEe)Like in (d), the expression is TRUE when a<=b except when the values are NULL.a b a <= bNOT NULL NOT NULL TRUE when a<=b; else FALSE6.1.6SELECT *FROM MoviesWHERE LENGTH IS NOT NULL;6.2.1a)SELECT AS starNameFROM MovieStar M,StarsIn SWHERE = S.starNameAND S.movieTitle = 'Titanic'AND M.gender = 'M';b)SELECT S.starNameFROM Movies M ,StarsIn S,Studios TWHERE ='MGM'AND M.year = 1995AND M.title = S.movieTitleAND M.studioName = ;c)SELECT AS presidentNameFROM MovieExec X,Studio TWHERE X.cert# = T.presC#AND = 'MGM';d)SELECT M1.titleFROM Movies M1,Movies M2WHERE M1.length > M2.lengthAND M2.title ='Gone With the Wind' ;e)SELECT AS execNameFROM MovieExec X1,MovieExec X2WHERE Worth > WorthAND = 'Merv Griffin' ;6.2.2a)SELECT R.maker AS manufacturer, L.speed AS gigahertzFROM Product R,Laptop LWHERE L.hd >= 30AND R.model = L.model ; MANUFACTURER GIGAHERTZ ------------ ----------A 2.00A 2.16A 2.00B 1.83E 2.00E 1.73E 1.80F 1.60F 1.60G 2.0010 record(s) selected.b)SELECT R.model,P.priceFROM Product R,PC PWHERE R.maker = 'B'AND R.model = P.model UNIONSELECT R.model,L.priceFROM Product R,Laptop LWHERE R.maker = 'B'AND R.model = L.model UNIONSELECT R.model,T.priceFROM Product R,Printer TWHERE R.maker = 'B'AND R.model = T.model ;----- ------1004 6491005 6301006 10492007 14294 record(s) selected.c)SELECT R.makerFROM Product R,Laptop LWHERE R.model = L.model EXCEPTSELECT R.makerFROM Product R,PC PWHERE R.model = P.model ; MAKER-----FG2 record(s) selected.d)SELECT DISTINCT P1.hd FROM PC P1,PC P2WHERE P1.hd =P2.hdAND P1.model > P2.model ; Alternate Answer:SELECT DISTINCT P.hdFROM PC PGROUP BY P.hdHAVING COUNT(P.model) >= 2 ; e)SELECT P1.model,P2.modelFROM PC P1,PC P2WHERE P1.speed = P2.speedAND P1.ram = P2.ramAND P1.model < P2.model ; MODEL MODEL----- -----1004 10121 record(s) selected.f)FROM(SELECT maker,R.modelFROM PC P,Product RWHERE SPEED >= 3.0AND P.model=R.modelUNIONSELECT maker,R.modelFROM Laptop L,Product RWHERE speed >= 3.0AND L.model=R.model) MGROUP BY M.makerHAVING COUNT(M.model) >= 2 ; MAKER-----B1 record(s) selected.6.2.3a)SELECT FROM Ships S,Classes CWHERE S.class = C.classAND C.displacement > 35000; NAME------------------IowaMissouriMusashiNew JerseyNorth CarolinaWashingtonWisconsinYamato8 record(s) selected.b)SELECT ,C.displacement,C.numGunsFROM Ships S ,Outcomes O,Classes CWHERE = O.shipAND S.class = C.classAND O.battle = 'Guadalcanal' ;NAME DISPLACEMENT NUMGUNS------------------ ------------ -------Kirishima 32000 8Washington 37000 92 record(s) selected.Note:South Dakota was also engaged in battle of Guadalcanal but not chosen since it is not in Ships table(Hence, no information regarding it's Class is available).c)SELECT name shipNameFROM ShipsUNIONSELECT ship shipNameFROM Outcomes ;SHIPNAME------------------ArizonaBismarkCaliforniaDuke of YorkFusoHarunaHieiHoodIowaKing George VKirishimaKongoMissouriMusashiNew JerseyNorth CarolinaPrince of WalesRamilliesRenownRepulseResolutionRevengeRodneyRoyal OakRoyal SovereignScharnhorstSouth DakotaTenneseeTennesseeWashingtonWest VirginiaWisconsinYamashiroYamato34 record(s) selected.d)SELECT C1.countryFROM Classes C1,Classes C2WHERE C1.country = C2.country AND C1.type = 'bb'AND C2.type = 'bc' ; COUNTRY------------Gt. BritainJapan2 record(s) selected.e)SELECT O1.shipFROM Outcomes O1,Battles B1WHERE O1.battle = AND O1.result = 'damaged'AND EXISTS(SELECT B2.dateFROM Outcomes O2,Battles B2WHERE O2.battle= AND O1.ship = O2.shipAND B1.date < B2.date) ;SHIP------------------0 record(s) selected.f)SELECT O.battleFROM Outcomes O,Ships S ,Classes CWHERE O.ship = AND S.class = C.class GROUP BY C.country,O.battleHAVING COUNT(O.ship) > 3;SELECT O.battleFROM Ships S ,Classes C,Outcomes OWHERE C.Class = S.classAND O.ship = GROUP BY C.country,O.battleHAVING COUNT(O.ship) >= 3;6.2.4Since tuple variables are not guaranteed to be unique, every relation Ri should be renamed using an alias. Every tuple variable should be qualified with the alias. Tuple variables for repeating relations will also be distinctly identified this way.Thus the query will be likeSELECT A1.COLL1,A1.COLL2,A2.COLL1,…FROM R1 A1,R2 A2,…,Rn AnWHERE A1.COLL1=A2.COLC2,…6.2.5Again, create a tuple variable for every Ri, i=1,2,...,nThat is, the FROM clause isFROM R1 A1, R2 A2,...,Rn An.Now, build the WHERE clause from C by replacing every reference to some attribute COL1 of Ri by Ai.COL1. In addition apply Natural Join i.e. add condition to check equality of common attribute names between Ri and Ri+1 for all i from 0 to n-1. Also, build the SELECT clause from list of attributes L by replacing every attribute COLj of Ri by Ai.COLj.6.3.1a)SELECT DISTINCT makerFROM ProductWHERE model IN(SELECT modelFROM PCWHERE speed >= 3.0);SELECT DISTINCT R.makerFROM Product RWHERE EXISTS(SELECT P.modelFROM PC PWHERE P.speed >= 3.0AND P.model =R.model);b)SELECT P1.modelFROM Printer P1WHERE P1.price >= ALL(SELECT P2.priceFROM Printer P2) ;SELECT P1.modelFROM Printer P1WHERE P1.price IN(SELECT MAX(P2.price)FROM Printer P2) ;c)SELECT L.modelFROM Laptop LWHERE L.speed < ANY(SELECT P.speedFROM PC P) ;SELECT L.modelFROM Laptop LWHERE EXISTS(SELECT P.speedFROM PC PWHERE P.speed >= L.speed ) ;d)SELECT modelFROM(SELECT model,priceFROM PCUNIONSELECT model,priceFROM LaptopUNIONSELECT model,priceFROM Printer) M1WHERE M1.price >= ALL (SELECT priceFROM PCUNIONSELECT priceFROM LaptopUNIONSELECT priceFROM Printer) ;(d) – contd --SELECT modelFROM(SELECT model,priceFROM PCUNIONSELECT model,priceFROM LaptopUNIONSELECT model,priceFROM Printer) M1WHERE M1.price IN(SELECT MAX(price)FROM(SELECT priceFROM PCUNIONSELECT priceFROM LaptopUNIONSELECT priceFROM Printer) M2) ;e)SELECT R.makerFROM Product R,Printer TWHERE R.model =T.model AND T.price <= ALL(SELECT MIN(price)FROM Printer);SELECT R.makerFROM Product R,Printer T1WHERE R.model =T1.model AND T1.price IN(SELECT MIN(T2.price) FROM Printer T2);f)SELECT R1.makerFROM Product R1,PC P1WHERE R1.model=P1.model AND P1.ram IN(SELECT MIN(ram)FROM PC)AND P1.speed >= ALL(SELECT P1.speedFROM Product R1,PC P1WHERE R1.model=P1.model AND P1.ram IN(SELECT MIN(ram)FROM PC));SELECT R1.makerFROM Product R1,PC P1WHERE R1.model=P1.modelAND P1.ram =(SELECT MIN(ram)FROM PC)AND P1.speed IN(SELECT MAX(P1.speed)FROM Product R1,PC P1WHERE R1.model=P1.model AND P1.ram IN(SELECT MIN(ram)FROM PC));6.3.2a)SELECT C.countryFROM Classes CWHERE numGuns IN(SELECT MAX(numGuns)FROM Classes);SELECT C.countryFROM Classes CWHERE numGuns >= ALL(SELECT numGunsFROM Classes);b)SELECT DISTINCT C.class FROM Classes C,Ships SWHERE C.class = S.classAND EXISTS(SELECT shipFROM Outcomes OWHERE O.result='sunk'AND O.ship = ) ;SELECT DISTINCT C.class FROM Classes C,Ships SWHERE C.class = S.classAND IN(SELECT shipFROM Outcomes OWHERE O.result='sunk' ) ;c)SELECT FROM Ships SWHERE S.class IN(SELECT classFROM Classes CWHERE bore=16) ;SELECT FROM Ships SWHERE EXISTS(SELECT classFROM Classes CWHERE bore =16AND C.class = S.class );d)SELECT O.battleFROM Outcomes O WHERE O.ship IN(SELECT nameFROM Ships SWHERE S.Class ='Kongo' );SELECT O.battleFROM Outcomes O WHERE EXISTS(SELECT nameFROM Ships SWHERE S.Class ='Kongo' AND = O.ship );e)SELECT FROM Ships S,Classes CWHERE S.Class = C.ClassAND numGuns >= ALL(SELECT numGunsFROM Ships S2,Classes C2WHERE S2.Class = C2.Class AND C2.bore = C.bore) ;SELECT FROM Ships S,Classes CWHERE S.Class = C.ClassAND numGuns IN(SELECT MAX(numGuns)FROM Ships S2,Classes C2WHERE S2.Class = C2.Class AND C2.bore = C.bore) ;Better answer;SELECT FROM Ships S,Classes CWHERE S.Class = C.ClassAND numGuns >= ALL(SELECT numGunsFROM Classes C2WHERE C2.bore = C.bore) ;SELECT FROM Ships S,Classes CWHERE S.Class = C.ClassAND numGuns IN(SELECT MAX(numGuns)FROM Classes C2WHERE C2.bore = C.bore) ;6.3.3SELECT titleFROM MoviesGROUP BY titleHAVING COUNT(title) > 1 ;6.3.4SELECT FROM Ships S,Classes CWHERE S.Class = C.Class ;Assumption: In R1 join R2, the rows of R2 are unique on the joining columns. SELECT COLL12,COLL13,COLL14FROM R1WHERE COLL12 IN(SELECT COL22FROM R2)AND COLL13 IN(SELECT COL33FROM R3)AND COLL14 IN(SELECT COL44FROM R4) ...6.3.5(a)SELECT ,S.addressFROM MovieStar S,MovieExec EWHERE S.gender ='F'AND Worth > 10000000AND = AND S.address = E.address ;Note: As mentioned previously in the book, the names of stars are unique. However no such restriction exists for executives. Thus, both name and address are required as join columns.Alternate solution:SELECT name,addressFROM MovieStarWHERE gender = 'F'AND (name, address) IN(SELECT name,addressFROM MovieExecWHERE netWorth > 10000000) ;(b)SELECT name,addressFROM MovieStarWHERE (name,address) NOT IN(SELECT name addressFROM MovieExec) ;6.3.6By replacing the column in subquery with a constant and using IN subquery for the constant, statement equivalent to EXISTS can be found.i.e. replace "WHERE EXISTS (SELECT C1 FROM R1..)" by "WHERE 1 IN (SELECT 1 FROM R1...)"Example:SELECT DISTINCT R.makerFROM Product RWHERE EXISTS(SELECT P.modelFROM PC PWHERE P.speed >= 3.0AND P.model =R.model) ;Above statement can be transformed to below statement.SELECT DISTINCT R.makerFROM Product RWHERE 1 IN(SELECT 1FROM PC PWHERE P.speed >= 3.0AND P.model =R.model) ;6.3.7(a)n*m tuples are returned where there are n studios and m executives. Each studio will appear m times; once for every exec.(b)There are no common attributes between StarsIn and MovieStar; hence no tuples are returned.(c)There will be at least one tuple corresponding to each star in MovieStar. The unemployed stars will appear once with null values for StarsIn. All employed stars will appear as many times as the number of movies they are working in. In other words, for each tuple in StarsIn(starName), the correspoding tuple from MovieStar(name)) is joined and returned. For tuples in MovieStar that do not have a corresponding entry in StarsIn, the MovieStar tuple is returned with null values for StarsIn columns.6.3.8Since model numbers are unique, a full natural outer join of PC, Laptop and Printer will return one row for each model. We want all information about PCs, Laptops and Printers even if the model does not appear in Product but vice versa is not true. Thus a left natural outer join between Product and result above is required. The type attribute from Product must be renamed since Printer has a type attribute as well and the two attributes are different.(SELECT maker,model,type AS productTypeFROM Product) RIGHT NATURAL OUTER JOIN ((PC FULL NATURAL OUTER JOIN Laptop) FULL NATURAL OUTER JOIN Printer); Alternately, the Product relation can be joined individually with each of PC,Laptop and Printer and the three results can be Unioned together. For attributes that do not exist in one relation, a constant such as 'NA' or 0.0 can be used. Below is an example of this approach using PC and Laptop.SELECT R.MAKER ,R.MODEL ,R.TYPE ,P.SPEED ,P.RAM ,P.HD ,0.0 AS SCREEN,P.PRICEFROM PRODUCT R,PC PWHERE R.MODEL = P.MODELUNIONSELECT R.MAKER ,R.MODEL ,R.TYPE ,L.SPEED ,L.RAM ,L.HD ,L.SCREEN,L.PRICEFROM PRODUCT R,LAPTOP LWHERE R.MODEL = L.MODEL;6.3.9SELECT *FROM Classes RIGHT NATURALOUTER JOIN Ships ;6.3.10SELECT *FROM Classes RIGHT NATURALOUTER JOIN ShipsUNION(SELECT C2.class ,C2.type ,C2.country ,C2.numguns ,C2.bore ,C2.displacement,C2.class NAME ,FROM Classes C2,Ships S2WHERE C2.Class NOT IN(SELECT ClassFROM Ships)) ;6.3.11(a)SELECT *FROM R,S ;(b)Let Attr consist ofAttrR = attributes unique to RAttrS = attributes unique to SAttrU = attributes common to R and SThus in Attr, attributes common to R and S are not repeated. SELECT AttrFROM R,SWHERE R.AttrU1 = S.AttrU1AND R.AttrU2 = S.AttrU2 ...AND R.AttrUi = S.AttrUi ;(c)SELECT *FROM R,SWHERE C ;6.4.1(a)DISTINCT keyword is not required here since each model only occurs once in PC relation. SELECT modelFROM PCWHERE speed >= 3.0 ;(b)SELECT DISTINCT R.makerFROM Product R,Laptop LWHERE R.model = L.modelAND L.hd > 100 ;(c)SELECT R.model,P.priceFROM Product R,PC PWHERE R.model = P.modelAND R.maker = 'B'UNIONSELECT R.model,L.priceFROM Product R,Laptop LWHERE R.model = L.modelAND R.maker = 'B'UNIONSELECT R.model,T.priceFROM Product R,Printer TWHERE R.model = T.modelAND R.maker = 'B' ;(d)SELECT modelFROM PrinterWHERE color=TRUEAND type ='laser' ;(e)SELECT DISTINCT R.makerFROM Product R,Laptop LWHERE R.model = L.modelAND R.maker NOT IN(SELECT R1.makerFROM Product R1,PC PWHERE R1.model = P.model) ;better:SELECT DISTINCT R.makerFROM Product RWHERE R.type = 'laptop'AND R.maker NOT IN(SELECT R.makerFROM Product RWHERE R.type = 'pc') ;(f)With GROUP BY hd, DISTINCT keyword is not required. SELECT hdFROM PCGROUP BY hdHAVING COUNT(hd) > 1 ;(g)SELECT P1.model,P2.modelFROM PC P1,PC P2WHERE P1.speed = P2.speedAND P1.ram = P2.ramAND P1.model < P2.model ;(h)SELECT R.makerFROM Product RWHERE R.model IN(SELECT P.modelFROM PC PWHERE P.speed >= 2.8)OR R.model IN(SELECT L.modelFROM Laptop LWHERE L.speed >= 2.8)GROUP BY R.makerHAVING COUNT(R.model) > 1 ;(i)After finding the maximum speed, an IN subquery can provide the manufacturer name. SELECT MAX(M.speed)FROM(SELECT speedFROM PCUNIONSELECT speedFROM Laptop) M ;SELECT R.makerFROM Product R,PC PWHERE R.model = P.modelAND P.speed IN(SELECT MAX(M.speed)FROM(SELECT speedFROM PCUNIONSELECT speedFROM Laptop) M)UNIONSELECT R2.makerFROM Product R2,Laptop LWHERE R2.model = L.modelAND L.speed IN(SELECT MAX(N.speed)FROM(SELECT speedFROM PCUNIONSELECT speedFROM Laptop) N) ;Alternately,SELECT COALESCE(MAX(P2.speed),MAX(L2.speed),0) SPEEDFROM PC P2FULL OUTER JOIN Laptop L2ON P2.speed = L2.speed ;SELECT R.makerFROM Product R,PC PWHERE R.model = P.modelAND P.speed IN(SELECT COALESCE(MAX(P2.speed),MAX(L2.speed),0) SPEED FROM PC P2FULL OUTER JOIN Laptop L2ON P2.speed = L2.speed)UNIONSELECT R2.makerFROM Product R2,Laptop LWHERE R2.model = L.modelAND L.speed IN(SELECT COALESCE(MAX(P2.speed),MAX(L2.speed),0) SPEED FROM PC P2FULL OUTER JOIN Laptop L2ON P2.speed = L2.speed)(j)SELECT R.makerFROM Product R,PC PWHERE R.model = P.modelGROUP BY R.makerHAVING COUNT(DISTINCT speed) >= 3 ;(k)SELECT R.makerFROM Product R,PC PWHERE R.model = P.modelGROUP BY R.makerHAVING COUNT(R.model) = 3 ;better;SELECT R.makerFROM Product RWHERE R.type='pc'GROUP BY R.makerHAVING COUNT(R.model) = 3 ;6.4.2(a)We can assume that class is unique in Classes and DISTINCT keyword is not required.SELECT class,countryFROM ClassesWHERE bore >= 16 ;(b)Ship names are not unique (In absence of hull codes, year of launch can help distinguish ships).SELECT DISTINCT name AS Ship_NameFROM ShipsWHERE launched < 1921 ;(c)SELECT DISTINCT ship AS Ship_NameFROM OutcomesWHERE battle = 'Denmark Strait'AND result = 'sunk' ;(d)SELECT DISTINCT AS Ship_NameFROM Ships S,Classes CWHERE S.class = C.classAND C.displacement > 35000 ;(e)SELECT DISTINCT O.ship AS Ship_Name,C.displacement ,C.numGunsFROM Classes C ,Outcomes O,Ships SWHERE C.class = S.classAND = O.shipAND O.battle = 'Guadalcanal' ;SHIP_NAME DISPLACEMENT NUMGUNS------------------ ------------ -------Kirishima 32000 8Washington 37000 92 record(s) selected.Note: South Dakota was also in Guadalcanal but its class information is not available. Below query will return name of all ships that were in Guadalcanal even if no other information is available (shown as NULL). The above query is modified from INNER joins to LEFT OUTER joins.SELECT DISTINCT O.ship AS Ship_Name,C.displacement ,C.numGunsFROM Outcomes OLEFT JOIN Ships SON = O.shipLEFT JOIN Classes CON C.class = S.classWHERE O.battle = 'Guadalcanal' ;SHIP_NAME DISPLACEMENT NUMGUNS------------------ ------------ -------Kirishima 32000 8South Dakota - -Washington 37000 93 record(s) selected.(f)The Set opearator UNION guarantees unique results.SELECT ship AS Ship_NameFROM OutcomesUNIONSELECT name AS Ship_NameFROM Ships ;(g)SELECT C.classFROM Classes C,Ships SWHERE C.class = S.classGROUP BY C.classHAVING COUNT() = 1 ;better:SELECT S.classFROM Ships SGROUP BY S.classHAVING COUNT() = 1 ;(h)The Set opearator INTERSECT guarantees unique results.SELECT C.countryFROM Classes CWHERE C.type='bb'INTERSECTSELECT C2.countryFROM Classes C2WHERE C2.type='bc' ;However, above query does not account for classes without any ships belonging to them. SELECT C.countryFROM Classes C,Ships SWHERE C.class = S.classAND C.type ='bb'INTERSECTSELECT C2.countryFROM Classes C2,Ships S2WHERE C2.class = S2.classAND C2.type ='bc' ;(i)SELECT O2.ship AS Ship_Name FROM Outcomes O2,Battles B2WHERE O2.battle = AND B2.date > ANY(SELECT B.dateFROM Outcomes O,Battles BWHERE O.battle = AND O.result ='damaged'AND O.ship = O2.ship);6.4.3a)SELECT DISTINCT R.maker FROM Product R,PC PWHERE R.model = P.modelAND P.speed >= 3.0;b)Models are unique.SELECT P1.modelFROM Printer P1LEFT OUTER JOIN Printer P2 ON (P1.price < P2.price) WHERE P2.model IS NULL ;c)SELECT DISTINCT L.model FROM Laptop L,PC PWHERE L.speed < P.speed ;d)Due to set operator UNION, unique results are returned.It is difficult to completely avoid a subquery here. One option is to use Views. CREATE VIEW AllProduct ASSELECT model,priceFROM PCUNIONSELECT model,priceFROM LaptopUNIONSELECT model,priceFROM Printer ;SELECT A1.modelFROM AllProduct A1LEFT OUTER JOIN AllProduct A2ON (A1.price < A2.price)WHERE A2.model IS NULL ;But if we replace the View, the query contains a FROM subquery. SELECT A1.modelFROM(SELECT model,priceFROM PCUNIONSELECT model,priceFROM LaptopUNIONSELECT model,priceFROM Printer) A1LEFT OUTER JOIN(SELECT model,priceFROM PCUNIONSELECT model,priceFROM LaptopUNIONSELECT model,priceFROM Printer) A2ON (A1.price < A2.price) WHERE A2.model IS NULL ;e)SELECT DISTINCT R.makerFROM Product R,Printer TWHERE R.model =T.modelAND T.price <= ALL(SELECT MIN(price)FROM Printer);f)SELECT DISTINCT R1.maker FROM Product R1,PC P1WHERE R1.model=P1.modelAND P1.ram IN(SELECT MIN(ram)FROM PC)AND P1.speed >= ALL(SELECT P1.speedFROM Product R1,PC P1WHERE R1.model=P1.modelAND P1.ram IN(SELECT MIN(ram)FROM PC));6.4.4a)SELECT DISTINCT C1.country FROM Classes C1LEFT OUTER JOIN Classes C2 ON (C1.numGuns < C2.numGuns) WHERE C2.country IS NULL ;。

数据库原理第六章习题答案

数据库原理第六章习题答案

数据库原理第六章习题答案数据库原理第六章习题答案在数据库原理的学习中,习题是检验自己对知识掌握程度的重要方式。

第六章的习题主要涉及数据库设计和规范化的内容,下面将逐一给出习题的答案。

1. 什么是数据库设计?数据库设计是指根据用户的需求和系统的要求,设计出能够满足这些需求和要求的数据库结构和组织方式的过程。

它包括确定数据库的结构、定义数据的存储方式、确定数据之间的关系等。

2. 数据库设计的步骤有哪些?数据库设计的步骤主要包括需求分析、概念设计、逻辑设计和物理设计。

需求分析阶段主要是了解用户的需求和系统的要求;概念设计阶段主要是根据需求分析结果,设计出概念模型;逻辑设计阶段主要是将概念模型转化为逻辑模型,包括实体关系模型和关系模式;物理设计阶段主要是将逻辑模型转化为物理模型,包括数据库的存储结构和索引结构的设计。

3. 什么是规范化?规范化是指通过一系列的规则和算法,将非规范化的数据库设计转化为规范化的数据库设计的过程。

它的目的是消除冗余数据、提高数据的一致性和完整性,并减少数据的存储空间。

4. 数据库设计的规范化级别有哪些?数据库设计的规范化级别主要包括第一范式(1NF)、第二范式(2NF)、第三范式(3NF)和BC范式(BCNF)。

其中,第一范式要求数据表中的每个字段都是原子的;第二范式要求数据表中的非主键字段完全依赖于主键;第三范式要求数据表中的非主键字段不传递依赖于主键;BC范式要求数据表中的每个非主键字段都不能依赖于其他非主键字段。

5. 什么是函数依赖?函数依赖是指在关系模型中,一个属性或属性集合的值决定另一个属性或属性集合的值的关系。

如果一个属性或属性集合的值决定另一个属性的值,则称为单值函数依赖;如果一个属性或属性集合的值决定另一个属性集合的值,则称为多值函数依赖。

6. 什么是主属性和非主属性?在关系模型中,主属性是指能够唯一标识一个实体的属性,它是关系模型中的主键;非主属性是指不能唯一标识一个实体的属性,它依赖于主属性。

数据库课后答案71737

数据库课后答案71737

数据库课后答案71737(总95页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--目录第1部分课程的教与学第2部分各章习题解答及自测题第1章数据库概论基本内容分析教材中习题1的解答自测题自测题答案第2章关系模型和关系运算理论基本内容分析教材中习题2的解答自测题自测题答案第3章关系数据库语言SQL基本内容分析教材中习题3的解答自测题自测题答案第4章关系数据库的规范化设计基本内容分析教材中习题4的解答自测题自测题答案第5章数据库设计与ER模型基本内容分析教材中习题5的解答自测题自测题答案第6章数据库的存储结构基本内容分析教材中习题6的解答第7章系统实现技术基本内容分析教材中习题7的解答自测题自测题答案第8章对象数据库系统基本内容分析教材中习题8的解答自测题自测题答案第9章分布式数据库系统基本内容分析教材中习题9的解答自测题自测题答案第10章中间件技术基本内容分析教材中习题10的解答自测题及答案第11章数据库与WWW基本内容分析教材中习题11的解答第12章 XML技术基本内容分析教材中习题12的解答第2部分各章习题解答及自测题第1章数据库概论基本内容分析本章的重要概念(1)DB、DBMS和DBS的定义(2)数据管理技术的发展阶段人工管理阶段、文件系统阶段、数据库系统阶段和高级数据库技术阶段等各阶段的特点。

(3)数据描述概念设计、逻辑设计和物理设计等各阶段中数据描述的术语,概念设计中实体间二元联系的描述(1:1,1:N,M:N)。

(4)数据模型数据模型的定义,两类数据模型,逻辑模型的形式定义,ER模型,层次模型、网状模型、关系模型和面向对象模型的数据结构以及联系的实现方式。

(5)DB的体系结构三级结构,两级映像,两级数据独立性,体系结构各个层次中记录的联系。

(6)DBMSDBMS的工作模式、主要功能和模块组成。

(7)DBSDBS的组成,DBA,DBS的全局结构,DBS结构的分类。

南京邮电大学数据库系统课后习题答案

南京邮电大学数据库系统课后习题答案

R2(CNO, TNAME, TADDR) } F2={CNO→TNAME,TNAME→TADDR}, KEY=(CNO)
ρ中R1、R2的所有属性都是原子的,且没有非
主属性对候选键的部分函数依赖,达到2NF;
2021/4/14
28
(3) 试把R分解成3NF模式集,并说明理由;
2021/4/14
数据库系统
习题课二
8
第四章习题
4.21设有关系模式R(ABC ),其上的FD集为 F={ B→C,C→A }, 那么分解ρ={AB, AC}
相对于F是否是无损分解和保持FD?说明理由
解 (1) ρ中有R1(AB), R2(AC)
R1∩R2=A, R1-R2=B, R2-R1=C 在F中推导不出 A→B或A→C,ρ有损 (2) F1 ={B→A } , F2 = {C→A } (F1∪F2)+ ≠F+,丢失了B→C 分解ρ不保持函数依赖
2021/4/14
数据库系统
习题课二
9
第四章习题
第五章参考答案
• PP.180 5.14
• 某商业集团有三个实体集。一个是“公司”实体集, 属性有公司编号、公司名、地址等。二是“仓库”实 体集,属性有仓库编号、仓库名、地址等。三是“职 工”实体集,属性有职工编号、姓名、性别等。公司 与仓库间存在“隶属”关系,每个公司管辖若干个仓 库,每个仓库只属于一个公司管辖;仓库与间存在 “聘用”联系,每个仓库可聘用多个职工,每个职工 只能在一个仓库工作,仓库聘用职工有聘期和工资。 画出ER图,并在图上注明属性、联系的类型。转换成 关系模式集,并指出每个关系模式的主键和外键。
也可用域约束或断言
①在基表S的定义中,用检查子句
CHECK(AGE BETWEEN 16 AND 25) ②在基表SC的定义中,做以下说明:

数据库四五六章作业答案

数据库四五六章作业答案

第四章作业1. 什么是数据库安全性?数据库安全性是指保护数据库以防止不合法使用所造成的数据泄漏、更改或破坏。

2. 试述实现数据库安全性控制的常用方法和技术。

数据库管理系统提供的安全措施主要包括用户身份鉴别、自助存取控制和强制存取控制技术、试图技术和审计技术、数据加密存储和加密传输等。

3. 什么是数据库中的自主存取控制和强制存取控制方法。

a.在自助存取方法中,用户对于不同的数据库对象有不同的存取权限,不同的用户对同一对象也有不同的权限,而且用户还可将其拥有的存取权限转授给其他用户。

因此自主存取控制非常灵活。

b.在强制存取控制方法中,每一个数据库对象被标以一定的密级,每一个用户也被授予某一个级别的许可证。

对于任意一个对象,只有具有合法许可证的用户才可以存取。

强制存取控制因此相对比较严格。

4. 今有两个关系模式:职工(职工号,姓名,年龄,职务,工资,部门号)部门(部门号,名称,经理名,地址,电话号)请用SQL的grant和revoke语句(加上视图机制)完成以下授权定义或者存取控制功能:(1)授予用户王明对上述两个表的SELECT权限GRANT SELECTON TABLE 职工,部门TO 王明;(2)授予用户李勇对上述两个表的INSERT和DELETE权限GRANT INSERT, DELETEON TABLE 职工,部门TO 李勇;(3)授予用户刘星对职工表的SELECT权限和对工资字段的UPDATE权限GRANT SELETE,UPDATE(工资)ON TABLE 职工TO 刘星;(4)授予用户张欣创建表的权限GRANT CREAT TABLETO 张欣;(5)授予用户对上述两个表的所有权限,并具有转授给他人的权力。

GRANT ALL PRIVILEGESON 职工,部门TO 用户WITH GRANT OPTION;(6)用户杨兰只能查看每个部门职工的最高工资、最低工资、平均工资,但不能查看每个职工的工资。

数据库课后习题答案(全)

数据库课后习题答案(全)

第1章数据库系统概述习题参考答案1.1 数据处理和数据库应用的例子:电话公司使用数据库存储客户基本信息、客户的每次通话信息以及雇员基本信息、雇员业绩信息等。

典型的数据处理包括电话收费、生成客户长途电话话单、计算雇员工资等图书馆使用数据库存储图书资料信息、读者基本信息、图书借阅信息等。

典型的数据处理包括新书登记、处理读者借还图书等税务局使用数据库存储纳税人(个人或公司)信息、纳税人缴纳税款信息等。

典型的数据处理包括纳税、退税处理、统计各类纳税人纳税情况等。

银行使用数据库存储客户基本信息、客户存贷款信息等。

典型的数据处理包括处理客户存取款等。

超市使用数据库存储商品的基本信息、会员客户基本信息、客户每次购物的详细清单。

典型的数据处理包括收银台记录客户每次购物的清单并计算应交货款。

1.2 DBMS是数据库管理系统的简称,是一种重要的程序设计系统。

它由一个相互关联的数据集合和一组访问这些数据的程序组成。

数据库是持久储存在计算机中、有组织的、可共享的大量数据的集合。

数据库中的数据按一定的数据模型组织、描述和存储,可以被各种用户共享,具有较小的冗余度、较高的数据独立性,并且易于扩展。

数据库系统由数据库、DBMS(及其开发工具)、应用系统和数据库管理员组成。

数据模型是一种形式机制,用于数据建模,描述数据、数据之间的联系、数据的语义、数据上的操作和数据的完整性约束条件。

数据库模式是数据库中使用数据模型对数据建模所产生设计结果。

对于关系数据库而言,数据库模式由一组关系模式构成。

数据字典是DBMS维护的一系列内部表,用来存放元数据。

所谓元数据是关于数据的数据。

1.3 DBMS提供如下功能:(1)数据定义:提供数据定义语言DDL,用于定义数据库中的数据对象和它们的结构。

(2)数据操纵:提供数据操纵语言DML,用于操纵数据,实现对数据库的基本操作(查询、插入、删除和修改)。

(3)事务管理和运行管理:统一管理数据、控制对数据的并发访问,保证数据的安全性、完整性,确保故障时数据库中数据不被破坏,并且能够恢复到一致状态。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第四章作业1. 什么是数据库安全性?数据库安全性是指保护数据库以防止不合法使用所造成的数据泄漏、更改或破坏。

2. 试述实现数据库安全性控制的常用方法和技术。

数据库管理系统提供的安全措施主要包括用户身份鉴别、自助存取控制和强制存取控制技术、试图技术和审计技术、数据加密存储和加密传输等。

3. 什么是数据库中的自主存取控制和强制存取控制方法。

a.在自助存取方法中,用户对于不同的数据库对象有不同的存取权限,不同的用户对同一对象也有不同的权限,而且用户还可将其拥有的存取权限转授给其他用户。

因此自主存取控制非常灵活。

b.在强制存取控制方法中,每一个数据库对象被标以一定的密级,每一个用户也被授予某一个级别的许可证。

对于任意一个对象,只有具有合法许可证的用户才可以存取。

强制存取控制因此相对比较严格。

4. 今有两个关系模式:职工(职工号,姓名,年龄,职务,工资,部门号)部门(部门号,名称,经理名,地址,电话号)请用SQL的grant和revoke语句(加上视图机制)完成以下授权定义或者存取控制功能:(1)授予用户王明对上述两个表的SELECT权限GRANT SELECTON TABLE 职工,部门TO 王明;(2)授予用户李勇对上述两个表的INSERT和DELETE权限GRANT INSERT, DELETEON TABLE 职工,部门TO 李勇;(3)授予用户刘星对职工表的SELECT权限和对工资字段的UPDATE权限GRANT SELETE,UPDATE(工资)ON TABLE 职工TO 刘星;(4)授予用户张欣创建表的权限GRANT CREAT TABLETO 张欣;(5)授予用户对上述两个表的所有权限,并具有转授给他人的权力。

GRANT ALL PRIVILEGESON 职工,部门TO 用户WITH GRANT OPTION;(6)用户杨兰只能查看每个部门职工的最高工资、最低工资、平均工资,但不能查看每个职工的工资。

CREAT VIEW工资ASSELECT MAX(工资),MIN(工资),AVG(工资)FROM 职工WHERE 职工.部门号=(SELECT 部门.部门号FROM 部门WHERE EXISTS 部门号)(7)撤销用户李勇对上述两个表的INSERT和DELETE权限REVOKE INSERT, DELETEON TABLE 职工,部门TO 李勇;(8)撤销用户刘星对职工表的SELECT权限和对工资字段的UPDATE权限REVOKE SELETE,UPDATE(工资)ON TABLE 职工TO 刘星;(9)撤销用户张欣创建表的权限REVOKE CREAT TABLETO 张欣;第五章作业1. 什么是数据库的完整性数据可完整性是指数据的正确性和相容性。

数据的正确性是指数据是符合现实世界语义、反映当前实际状况的;数据的相容性是指数据库同一对象在不同关系表中的数据是符合逻辑的。

2. 什么是数据库的完整性约束条件完整性约束条件也称为完整性规则,是数据库中的数据必须满足的语义约束条件。

他表达了给定的数据模型中数据及其联系所具有的制约和依存规则,用以限定符合数据模型的数据库状态以及状态的变化,以保证数据的正确有效和相容。

5. 数据库在实现参照完整性时需要考虑哪些方面?参照完整性将两个表中的相应元组联系起来了。

因此,对被参照表和参照表进行增、删、改操作时有可能破坏参照完整性,必须进行检查以保证这两个表的相容性。

第六章作业1.理解并给出下列术语的定义:函数依赖、部分函数依赖、完全函数依赖、传递函数依赖、候选码、外码、全码、1NF、2NF、3NF、BCNF、多值依赖、4NF函数依赖和别的数据依赖一样是语义范畴的概念,只能根据语义来确定一个函数依赖。

若X→Y,但Y不完全函数依赖于X。

则成Y对X部分函数依赖。

在R(U)中,如果X→Y,并且对于X的任何一个真子集X’,都有X’! →Y,则称Y对X完全函数依赖。

在R(U)中,如果X→Y(U不包含于X), X’! →Y, Y →Z,Z不包含于Y,则称Z对X传递函数依赖。

F设K为R<U,F>中的属性火属性组合,若K→U,则称K为R的候选码。

最简单的情况,单个属性是码;最极端的情况,整个属性组是码,称为全码。

关系模式R中属性或属性组X并非R的码,但X是另一个关系模式的码,则称X是R的外部码,也称外码。

关系数据库中的关系是要满足一定要求的,满足不同程度要求的为不同范式。

满足最低要求的叫第一范式,简称1NF。

若R属于1NF,且每一个非主属性完全函数依赖于任何一个候选码,则R属于2NF。

若R属于2NF并且不存在非主属性对码的传递函数依赖,则称R属于3NF。

若R属于3NF,并且不存在主属性和码之间的部分和传递函数依赖,则称R 属于BCNF。

设R(U)是属性及U上的一个关系模式。

X,Y,Z,是U的子集,并且Z= U- X-Y。

关系模式R(U)中多值依赖X→→Y成立,当且仅当对R(U)的任一关系r,给定的一对(x,z)值,有一组Y的值,者组织仅仅决定于x的值而与z值无关。

4NF就是限制关系模式的属性之间不允许有非平凡函数依赖的多值依赖。

2.有一个关于系、学生、班级、学会等诸信息的关系模式:学生(学号、姓名、出生年月、系名、班号、专业名、宿舍区、参加的学会名)。

有关语义描述如下:一个系有若干专业,每个专业只属于一个系。

每个专业每年只招一个班,每个班有若干学生,每个学生有唯一的一个学号。

一个系的学生住在同一个宿舍区,一个宿舍区可以住多个系的学生。

每个学生可以参加若干的学会,每个学会可以招收多个学生。

请根据上述语义写出该关系模式的函数依赖。

学生:S (Sno, Sname, Sbirth, Dept, Class, Rno)班级:C(Class, Pname, Dept,Cnum,Cyear)系:D(Dept, Dno,Office,Dnum)学会:M(Mnane,Myear,Maddr,Mnum)最小函数依赖集:学生S (Sno,Sname,Sbirth,Dept,Class,Rno): Sno Sname,Sno Sbirth,Sno Class,Class Dept,Dept Rno 传递依赖如下:由于Sno Dept,而Dept Sno ,Dept Rno(宿舍区)所以Sno 与Rno 之间存在着传递函数依赖。

由于Class Dept,Dept Class,Dept Rno 所以Class 与Rno 之间存在着传递函数依赖。

由于Sno Class,Class Sno,Class Dept 所以Sno 与Dept 之间存在着传递函数依赖。

班级C(Class,Pname,Dept,Cnum,Cyear): Class Pname,Class Cnum,Class Cyear,Pname Dept. 由于Class Pname,Pname Class,Pname Dept 所以C1ass 与Dept 之间存在着传递函数依赖。

系D(Dept,Dno,Office,Dnum):Dept Dno,Dno Dept,Dno Office,Dno Dnum 根据上述函数依赖可知,Dept 与Office,Dept 与Dnum 之间不存在传递依赖。

学会M(Mname,Myear,Maddr,Mnum):Mname Myear,Mname Maddr,Mname Mnum 该模式不存在传递依赖。

3.试问下列关系模式属于第几范式,并解释原因●R(ABCD),F={B→D, AB→C}第一范式,B,BC可能是主码,若B是主码则C无法确定,若BC是主码则F中存在非主属性对候选码的部分依赖,不满足第二范式的要求。

●R(ABCDE),F={AB→CE, E→AB, C→D}第二范式,R的候选码(A,B),(E),非主属性{C,D},存在着AB→C,C→D,不存在函数依赖,因此R为第二范式。

●R(ABCD),F={B→D, D→B, AB→C}第三范式,AB,AD为候选码。

●R(ABC),F={A→B, B→A, C→A}BCNF范式,A,B为候选码●R(ABC),F={A→B, B→A, A→C}第二范式,C为候选码●R(ABCD),F={A→C, D→B}第一范式,AD为候选码●R(ABCD),F={A→C, CD→B}第一范式,AD为候选码4.设有关系模式R(ABCDE),其函数依赖集F={A→BC, CD→E, B→D, E→A},下面是R的两个分解:●ρ={R1(ABC), R2(ADE)}●σ={R3(ABC), R4(CDE)}1)试验证ρ,σ是否是无损连接的分解(对分解ρ请用填表的方式证明,对分解σ请使用定理进行证明)对于ρ1={R1(ABC), R2(ADE)},R1∩R2=A,R1–R2=BC,R2–R1=DE,根据A+= ABCDE知(R1∩R2)→(R1–R2)和(R1∩R2)→(R2–R1)都满足,根据定理5.4,分解具有无损连接性。

对于ρ2={R1(ABC), R2(CDE)},R1∩R2=C,R1–R2=AB,R2–R1=DE,根据C+= C知(R1∩R2)→(R1–R2)和(R1∩R2)→(R2–R1)都不满足,根据定理5.4,分解不具有无损连接性。

2)求出原关系模式R的候选码根据候选关键字的定义:R的候选关键字只可能由F中各个函数依赖的左边属性组成,即A,B,C,D,E,由于A→BC(A→B,A→C),B→D,E→A,故:可除去A,B,C,D,∴组成候选关键字的属性可能是E。

计算可知:E+=ABCDE,即E→U,∴E是一个候选关键字。

可除去A,B,E,∴组成候选关键字的属性可能是CD。

计算可知:(CD)+=ABCDE,即CD→U,但C+=C,D+=D,∴CD是一个候选关键字。

可除去B,C,D,E∴组成候选关键字的属性可能是A。

计算可知:A+=ABCDE,即A→U,∴A是一个候选关键字。

·可除去A,D,E,∴组成候选关键字的属性可能是BC。

计算可知:(BC)+=ABCDE,即CD→U,但B+=BD,C+=C,∴BC是一个候选关键字。

R的所有候选关键字是A,BC,CD,E。

5.设有关系R(U, F)●U={A, B, C, D}●F={A→C, C→A, B→AC, D→AC, AD→C}求:●R的候选码●将F min中的依赖关系进行分类:L类:B,R类:LR类:A,C,DN类:因为 B 在F min上的闭包(B)F+=ABCD=U 所以F具有唯一候选码B;●判断R所属的范式第二范式●如果R不属于第三范式,将R规范化到第三范式,并保持函数依赖和无损连接的分解Fm = {A→C,C→A,B→A,D→A},R的码为BDR1={A,C}F1={A→C,C→A},R2={A,B,D},F2={B→A,D→A}R2的码是BDR21={B,A},R22={B,D}R分解为{R1,R21,R22}。

相关文档
最新文档