数据库教程6
数据库课程第6章课件
PPT学习交流
13
4 闭包的计算
• 目标
• 通过给定的函数依赖,找出所有的函 数依赖
• 方法
• 利用FD的规则(传递、合并、分解),推 导出函数依赖的集合,即闭包(closure)
PPT学习交流
10
2 函数依赖的推理规则
• Armstrong公理
X,Y,Z是属性集, • 自反律。若Y X, 则X Y。 • 增广律。若X Y ,则XZ YZ。 • 传递律。若X Y, Y Z,则X Z 。 • 合并律。若X Y,X Z,则X YZ。 • 分解律。若X YZ ,则X Y,X Z 。 • 伪传递律。若X Y,WY Z,则XW Z 。
• 判定XY是否在F+中,只要判断XY能否用推
理 就规 把则 计从算FF导+的出问,题即简判化断为Y计算X的是F 否成问X立题F。。这样
PPT学习交流
16
4 闭包的计算
〔算法〕:求属性集X关于函数依赖集F的属性闭包X
。
F
• 输入:有限的属性集合U,它上面的函数依赖集合F,和U的
一个子集X.
•
输出:X关于F的闭包
2) R不属于4NF
PPT学习交流
6
6.2.9 规范化的步骤
▪规范化的基本思想:
▪ 逐步消除数据依赖中不合适的部分 ▪ “一事一地”模式设计原则: 一个关系只说明一个概念、一件事物或事物 间的一种联系,这是规范化的目标
PPT学习交流
7
规范化的基本步骤
1NF
消去非主属性对键的部分函数依赖
数据库系统基础教程第六章答案
Solutions Chapter 6Attributes 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 %';a)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 IDT031). 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 OutcomesWHERE 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 shipNameFROM 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 TRUEThe 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 = ;SELECT AS presidentName FROM 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.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 ; MODEL PRICE----- ------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.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.speed AND P1.ram = P2.ramAND P1.model < P2.model ; MODEL MODEL----- -----1004 10121 record(s) selected.f)SELECT M.makerFROM(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 isavailable).SELECT name shipName FROM ShipsUNIONSELECT ship shipName FROM Outcomes ; SHIPNAME------------------ArizonaBismarkCaliforniaDuke of YorkFusoHarunaHieiHoodIowaKing George VKirishimaKongoMissouriMusashiNew JerseyNorth CarolinaPrince of Wales RamilliesRenownRepulseResolutionRevengeRodneyRoyal OakRoyal Sovereign ScharnhorstSouth DakotaTenneseeTennesseeWashingtonWest VirginiaWisconsinYamashiroYamato34 record(s) selected.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 distinctlyidentified this way.Thus the query will be likeSELECT A1.COLL1,A1.COLL2,A2.COLL1,…FROM R1 A1,R2 A2,…,Rn AnWH ERE 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);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 ) ;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.modelAND 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 );SELECT O.battleFROM Outcomes OWHERE O.ship IN(SELECT nameFROM Ships SWHERE S.Class ='Kongo' );SELECT O.battleFROM Outcomes OWHERE EXISTS(SELECT nameFROM Ships SWHERE S.Class ='Kongo' AND = O.ship );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 forthe 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 studiowill appear m times; once for every exec.(b)There are no common attributes between StarsIn and MovieStar; hence no tuplesare returned.(c)There will be at least one tuple corresponding to each star in MovieStar. Theunemployed stars will appear once with null values for StarsIn. All employedstars will appear as many times as the number of movies they are working in. Inother words, for each tuple in StarsIn(starName), the correspoding tuple fromMovieStar(name)) is joined and returned. For tuples in MovieStar that do nothave a corresponding entry in StarsIn, the MovieStar tuple is returned with nullvalues for StarsIn columns.6.3.8Since model numbers are unique, a full natural outer join of PC, Laptop andPrinter 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 versais not true. Thus a left natural outer join between Product and result above isrequired. The type attribute from Product must be renamed since Printer has atype 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 ofPC,Laptop and Printer and the three results can be Unioned together. Forattributes that do not exist in one relation, a constant such as 'NA' or 0.0 canbe 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' ;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 ;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) SPEED FROM 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)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 ;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' ;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 ;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.makerFROM 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.countryFROM Classes C1LEFT OUTER JOIN Classes C2 ON (C1.numGuns < C2.numGuns) WHERE C2.country IS NULL ;。
Access数据库6章节报表的了解与使用
报表中的控件分为三种:
◆绑定控件:与表或查询中字段相连,主要用于显示数据库中的数据,如文本框等; ◆未绑定控件:没有数据源,主要用来显示说明性信息,是装饰元素,如分隔线等; ◆计算控件:以表达式作为数据源,表达式中可以使用报表数据源中的字段,也可以使用 其他控件中的数据,甚至是模块代码生成的数据。
边用边学Access2003
组页眉、页脚:输出分组的有关信息,页眉一般常用来设计分组的标题或提示信息。页脚 常用来放置分组的小计、平均值等。
说明:报表页眉的位置在第一页的页面页眉上边,报表页脚则在最后一页的页面页脚之上。 因为页面页眉要打印在每一页的上方,通常会放置必须在每页重复打印的数据,如字段 名。报表页眉在整个报表只打印一次,在第一页的最上方,通常放置报表标题,其下面 才是第一页的页面页眉。 报表最后一页的最后一条记录可能在页内任意处,而报表页脚是紧接着最后一条记录 的,只打印在报表的最后一页,在这一页,报表页脚内容通常会在此页的页面页脚上方, 这一点与设计窗口中显示的情况正好相反。
边用边学Access2003
5.4 使用设计视图报表
添加了控件的报表设计视图
说明:报表页眉的位置在第一页的页面页眉上边,报表页脚则在最后一面的页面页脚之上。因为页面页眉要打印在每一页的上方,通常会 放置必须在每页重复打印的数据,如字段名。报表页眉在整个报表只打印一次,在第一页的最上方,通常放置报表标题,其下面才 是第一页的页面页眉。
边用边学Access2003
操作: 1.以“学生”数据表为来源建立“籍贯学生”报表,按地区输入学生基 本信息,并输出各地区学生数量。 2.为“教师”打印“职代会入场证”,会议地点:校礼堂,会议时间: 本周五下午2:30(入场证包括姓名、性别、职称、单位和照片)。
数据库第六章习题答案
第六章习题答案一、选择填空1、A2、C3、D4、B5、D6、A7、C8、A9、D 10、A11、C 12、A 13、B 14、C 15、C 16、D 17、B 18、C 19、A 20、D21、C 22、B二、判断下列描述的正确性,对者划√,错者划×。
1、√2、×3、×4、×5、√6、√7、×8、√9、×10、√11、√12、√13、√14、√15、×16、√17、√18、√19、√20、×21、×22、×三、分析下列程序的输出结果。
1、运行该程序输出结果如下所示。
Default constructor calledConstructor calleda=0,b=0a=4,b=82、运行该程序输出结果如下所示。
a=7,b=93、运行该程序输出结果如下所示。
1044、运行该程序输出结果如下所示。
1035,789.5045、运行该程序输出结果如下所示。
1{}{0,1,2,3,4,5,6,7,8}1{11,12,13,14,15,16,17,18,19}{19,18,17,16,15,14,13,12,11}6、运行该程序输出结果如下所示。
Starting1:Default constructor called.Default constructor called.Default constructor called.Eding1:Starting2:Constructor: a=5,b=6Constructor: a=7,b=8Constructor: a=9,b=10Ending2:Destructor called.a=9,b=10Destructor called.a=7,b=8Destructor called.a=5,b=6Destructor called.a=5,b=6Destructor called.a=3,b=4Destructor called.a=1,b=27、运行该程序输出结果如下所示。
数据库原理与应用教程(第三版)第六章课后习题答案
6.学生选课(学号,姓名,所在系,性别,课程号,课程名,学分,成绩)(1)候选码(学号,课程号)(2)该关系模式是第一范式(3)因为存在部分函数依赖关系((学号,课程号)—P—>姓名),所以要进行关系模式的规范化R1(学号,姓名,所在系,性别)主码:学号R2(课程号,课程名,学分)主码:课程号R3(学号,课程号,成绩)主码:(学号,课程号)学号是引用了R1关系模式的外码,课程号是引用了R2的外码因为每个关系模式此时已经是不含有依赖函数关系了,所以也是第三范式了7.学生(学号,姓名,所在系,班号,班主任,系主任)(1)候选码(学号,班号)(2)第一范式(3)因为存在部分函数依赖关系((学号,班号)—P—>姓名),所以要进行关系模式的规范化R1(学号,姓名,所在系,系主任)R2(班号,班主任)R3(学号,班号)(删去)因为每个关系模式此时是含有依赖函数关系了学号—f—>所在系,所在系—f—>系主任所以:R1(学号,姓名,所在系)主码:学号所在系是引用了R3中“所在系”的外码R2(班号,班主任)主码:班号R3(所在系,系主任)主码:所在系8.教师授课(课程号,课程名,学分,授课教师号,教师名,授课时数)(1)候选码(课程号,授课教师号)(2)第一范式(3)因为存在部分函数依赖关系((课程号,授课教师号)—P—>姓名),所以要进行关系模式的规范化(4)R1(课程号,课程名,学分)主码:课程号R2(授课教师号,教师名)主码:教师名R3(课程号,授课教师号,授课时数)主码:(课程号,授课教师号)课程号是引用了R1中的“课程号”的外码,授课教师号引用了R2的“授课教师号”的外码因为每个关系模式此时已经是不含有依赖函数关系了,所以也是第三范式了。
数据库 第6章 数据库设计客观题及答案
数据库第6章数据库设计客观题及答案一、选择题1、在数据库设计中,用 ER 图来描述信息结构但不涉及信息在计算机中的表示,它属于数据库设计的()。
A 需求分析阶段B 概念设计阶段C 逻辑设计阶段D 物理设计阶段答案:B解释:概念设计阶段通常使用 ER 图来描述信息结构,主要是对现实世界中的事物及其关系进行抽象和建模,不考虑具体的计算机实现。
2、数据库物理设计完成后,进入数据库实施阶段,下列各项中不属于实施阶段的工作是()。
A 建立库结构B 扩充功能C 加载数据D 系统调试解释:扩充功能一般不属于数据库实施阶段的工作,实施阶段主要是按照物理设计的结果建立数据库的实际结构、加载数据并进行调试。
3、在数据库设计中,将 ER 图转换成关系数据模型的过程属于()。
A 需求分析阶段B 概念设计阶段C 逻辑设计阶段D 物理设计阶段答案:C解释:逻辑设计阶段的主要任务就是将概念模型(如 ER 图)转换为具体的关系数据模型。
4、规范化理论是关系数据库进行逻辑设计的理论依据。
根据这个理论,关系数据库中的关系必须满足:其每一属性都是()。
A 互不相关的B 不可分解的C 长度可变的D 互相关联的解释:规范化理论要求关系数据库中的关系每一属性都是不可分解的,以避免数据冗余和操作异常。
5、从 ER 模型关系向关系模型转换时,一个 M:N 联系转换为关系模式时,该关系模式的关键字是()。
A M 端实体的关键字B N 端实体的关键字C M 端实体关键字与 N 端实体关键字组合D 重新选取其他属性答案:C解释:在 M:N 的联系中,转换后的关系模式关键字应为两端实体关键字的组合,这样才能唯一标识一个联系。
6、设有关系模式 R(A,B,C,D),其函数依赖集 F ={A→B,B→C,C→D,D→A},则 R 的候选关键字为()。
A ABB BCC CDD 不存在答案:D解释:由于该函数依赖集中存在循环依赖,所以不存在候选关键字。
7、关系数据库规范化是为解决关系数据库中()问题而引入的。
数据库第6章习题参考答案
第6章习题解答1.选择题(1)(C)允许用户定义一组操作,这些操作通过对指定的表进行删除、插入和更新命令来执行或触发。
A.存储过程B.视图C.触发器D.索引(2)SQL Server为每个触发器创建了两个临时表,它们是( B )。
A.Updated和Deleted B.Inserted和DeletedC.Inserted和Updated D.Seleted和Inserted(3)SQL Server中存储过程由一组预先定义并被(C)的Transact-SQL语句组成。
A.编写B.解释C.编译D.保存(4)下列可以查看表的行数以及表使用的存储空间信息的系统存储过程是( A )。
A.sq_spaceused B.sq_depends C.sq_help D.sq_rename (5)以下语句创建的触发器ABC是当对表T进行__D_____操作时触发。
CREATE TRIGGER ABC ON 表T FOR INSERT, UPDATE, DELETEAS……A.只是修改B.只是插入C.只是删除D.修改、插入、删除(6)以下_______不是存储过程的优点。
A.实现模块化编程,能被多个用户共享和重用B.可以加快程序的运行速度C.可以增加网络的流量D.可以提高数据库的安全性(7)以下_______操作不是触发触发器的操作。
A.SELECT B.INSERT C.DELETE D.UPDATE (8)下面关于触发器的描述,错误的是_______。
A.触发器是一种特殊的存储过程,用户可以直接调用B.触发器表和deleted表没有共同记录C.触发器可以用来定义比CHECK约束更复杂的规则D.删除触发器可以使用DROP TRIGGER命令,也可以使用企业管理器(9)关于SQL Server中的存储过程,下列说法中正确的是_______。
A.不能有输入参数B.没有返回值C.可以自动被执行D.可以嵌套使用(10)对于下面的存储过程:CREATE PROCEDURE Mysp1 @p IntASSELECT St_name, Age FROM Students WHERE Age=@p调用这个存储过程查询年龄为20岁的学生的正确方法是_______。
《Access2016数据库教程》第6章窗体
1. 控件的类型
(1)绑定控件。与表或查询中的字段捆绑在一起。Access会 自动更新当前记录中与绑定控件相关联的表字段的值。 (2)未绑定控件。与表中字段无关联,不会更新表中字段值。 (3)计算控件。使用表达式作为其控件来源。计算控件必须 在表达式前先键入一个等号“=”。 例如,要在一个文本框中显示当前日期,则其“控件来源”属 性应指定为:=Date(); 要想在文本框中显示学生哪年出生,需将其“控件来源”属性 指定为:=Year([出生日期])。
6.3.2 属性表
在Access中,属性决定对象的特性。窗体属性决定窗体的 结构、外观和行为;控件属性决定控件的外观、行为以及其中 所含文本或数据的特性。
属性表窗格包含5个选项卡: 格式、数据、事件、其他、全部
Access对各个属性都提供 了相应的默认值,在“属性表”中 可以重新设置其属性值。
1.窗体的基本属性
是
导航按钮
否
记录选择器 否
分隔线
是
窗体属性设置 属性名称 设置值
导航按钮 否
记录选择器 滚动条 弹出方式
否 两者均无 是
5.复选框、选项按钮、切换按钮和选项组
【例6-15】创建学生信息查询窗体。该窗体中有一个选 项组,包含了3个选项,选中某个选项后,单击“开始 查询”按钮可以打开相应的查询界面完成查询。窗体为 弹出式窗体,不设导航按钮、滚动条、记录选择器。
本例操作主要分两部分,一是使用设计视图按要求创建 主窗体,二是将“例6-3选课成绩表(数据表)”窗体添加 到主窗体中作为子窗体。
1.使用设计视图创建主/子窗体
主窗体属性设置
属性名称 设置值
记录源
学生表
导按钮 否
记录选择器 否 允许编辑 否
数据库基本操作教程
数据库基本操作教程第一章:数据库简介数据库是用来存储、管理和组织数据的应用程序。
它可以提供数据的快速访问和高效的数据处理能力。
数据库被广泛应用于各个行业,如金融、医疗、教育等。
本章将介绍数据库的定义、特点以及不同类型的数据库。
1.1 数据库的定义数据库是指存储数据的集合,这些数据可以被组织、访问和管理。
数据存储在表中,每个表由多个行和列组成。
1.2 数据库的特点数据库具有以下几个特点:- 持久性:数据库中的数据可以长期保存,不会因为应用程序的关闭而丢失。
- 可共享性:多个用户可以同时访问数据库,并进行数据的读写操作。
- 安全性:数据库提供了访问控制机制,只有授权用户才能访问和修改数据。
- 完整性:数据库可以确保数据的一致性和完整性,通过各种约束条件来保证数据的有效性。
1.3 常见的数据库类型- 关系型数据库:如MySQL、Oracle,采用表格的形式存储数据,通过SQL语言进行数据操作。
- 非关系型数据库:如MongoDB、Redis,采用键值对、文档或图形结构存储数据,不需要预先定义数据模型。
- 分布式数据库:如Hadoop、Cassandra,将数据分布在多个节点上,提供高可用性和可扩展性。
第二章:SQL语言基础SQL(Structured Query Language,结构化查询语言)是用于与数据库交互的标准语言。
本章将介绍SQL语言的基本语法、常用的数据操作语句以及数据查询与更新的例子。
2.1 SQL语言基本语法SQL语句由关键字、函数、操作符和标点符号组成。
常见的SQL语句包括:SELECT、INSERT、UPDATE、DELETE等。
2.2 数据查询语句SELECT语句用于从数据库中检索数据。
通过指定要检索的表和条件,可以获取特定的数据。
本节将介绍SELECT语句的基本用法及常见的查询操作符。
2.3 数据更新语句INSERT、UPDATE和DELETE语句用于修改数据库中的数据。
- INSERT语句用于向数据库中插入新的数据。
6创建数据库
3.4删除数据库
4 删除数据库 1.利用企业管理器删除数据库 2.利用Drop语句删除数据库 Drop database database_name[,…n] 说明:只有处于正常状态下的数据库,才能 使用DROP语句删除。当数据库处于以下状态 时不能被删除:数据库正在使用;数据库正在 恢复;数据库包含用于复制的已经出版的对象。
3.3 修改数据库
例3-4-1:将一个包含两个数据文件的文件组 和一个事务日志文件添加到students数据 库中。 例3-4-2:将上例中新增的student3的大小修 改为20M。
3.3 修改数据库
3数据库更名 在重命名数据库之前,应该确保没有用户使 用该数据库,而且数据库应该设置为“单用户” 模式。系统存储过程sp_renamedb语法如下: sp_renamedb [@dbname=]'old_name' ,[@newname=] 'new_name'
3.5 移动数据库
5 分离和附加数据库 1.利用企业管理器分离和附加数据库
3.1 创建数据库
SIZE:指定数据库的初始容量大小。如果没有指定 主文件的大小,则SQL Server默认其与模板数据库 中的主文件大小一致,其它数据库文件和事务日志文 件则默认为1MB。指定大小的数字size可以使用KB、 MB、GB和TB后缀,默认的后缀为MB。Size中不能 使用小数,其最小值为512KB,默认值为1MB。主 文件的size不能小于模板数据库中的主文件。 MAXSIZE:指定操作系统文件可以增长到的最大 尺寸。如果没有指定,则文件可以不断增长直到充满 磁盘。
3.3 修改数据库
add file<filespec>[,…n] [to filegroup filegroupname]:表示向指定的文件组中添 加新的数据文件。 add log file <filespec>[,…n]:增加新的 日志文件。 remove file logical_file_name:删除指 定的操作系统文件。 remove filegroup filegroup_name : 删 除指定的文件组。
(数据库原理)第6章E-R模型设计方法
6.4 E-R模型的扩充
(2)弱实体。 若一个实体对于另外一些实体具有很强的依 赖联系,并且该实体主码的全部或部分通过 其父实体中获得,则称该实体为弱实体。 在E-R模型中,我们用双矩形表示弱实体, 用双菱形表示与弱实体的联系。
数据库原理与应用教程
6.4 E-R模型的扩充
数据库原理与应用教程
6.3 联系的设计方法
2.联系的连通词
联系的连通词是指联系涉及的实体集间实体 对应的方式,即联系的类型。 通常,联系存在于两个实体之间,二元联系 的连通词有四种:1:1、1:N、M:N和M: 1。
数据库原理与应用教程
6.3 联系的设计方法
一元联系连通词 (1)若一名选手排列在其前面的选手只有一个,排 列在其后面的也只有一个,则选手之间存在1:1的 出场排列联系。
数据库原理与应用教程
6.2.2 属性取值特点分类
1.单值属性 单值属性是指同一实体的某个属性只能取一 个值。 例如,学生的年龄只有一个值,因此年龄是 一个单值属性;学生的性别也只有一个值, 它也是一个单值属性。
数据库原理与应用教程
6.2.2 属性取值特点分类
2.多值属性 多值属性是指同一实体的某个属性可以取多 员工 个值。 例如,教师的学历可以有大学学历、研究生 学历,因此学历是一个多值属性;员工的电 员工号 部门 性别 年龄 职位 电话 话可以有移动电话、家庭电话和办公电话, 电话也是一个多值属性。
【例】在员工管理系 统中,电话的存在是 以员工的存在为前提, 即电话对于员工具有 依赖联系,因此电话 是一个弱实体。
员工 1 拥有 n
电话
数据库原理与应用教程
二元联系连通词
完整的数据库教程(超级实用)
完整的数据库教程(超级实用)
本教程将介绍以下内容:
- 数据库的定义和分类
- 常用的数据库软件
- 数据库的基本操作和SQL语言
- 数据库设计与规范
数据库的定义和分类
数据库是计算机中用于存储和管理数据的系统,根据其特点可
以分为关系型数据库、非关系型数据库和面向对象数据库等。
其中,关系型数据库最为常见。
常用的数据库软件
Oracle、MySQL、SQL Server等是常用的商业关系型数据库软件,而MongoDB、Redis则是常用的非关系型数据库软件。
每种数
据库软件都有其特点和优劣势,具体应用需要根据需求选择。
数据库的基本操作和SQL语言
对于关系型数据库,我们需要研究各种基本操作,如建立连接、创建数据库、创建表格和查询数据等。
此外,SQL语言也是关系型
数据库中的基本语言,非常重要。
数据库设计与规范
在实际应用中,需要根据问题需求进行数据库的设计,保证其
数据结构规范、完整性和安全性等。
合理的数据库设计和规范是数
据库管理的基础。
以上是本教程的基本内容概述,希望能帮助大家更好地理解数
据库相关知识,提高数据管理水平。
数据库课程详细教程 第06章
6.1.3 表达式运算符
3)逻辑运算符 )
【例6.21】在基本表S中检索1975年出生或者姓王的学生情况。 6.21】在基本表S中检索1975年出生或者姓王的学生情况。 1975年出生或者姓王的学生情况 SELECT * FROM s WHERE year(出生日期)=1975 OR 姓名 LIKE '王%‘ 【例6.22】在基本表S中检索在1970年到1980年之间出生的学生 6.22】在基本表S中检索在1970年到1980年之间出生的学生 1970年到1980 情况。 情况。 SELECT * FROM s WHERE year(出生日期)>1970 and year(出生日期)<1980 【例6.23】在基本表S中检索不在管理信息系的学生情况。 6.23】在基本表S中检索不在管理信息系的学生情况。 SELECT * FROM s WHERE not (系='管理信息系') 或 SELECT * FROM s WHERE 系!='管理信息系'
s
5)通过TOP子句限制结果集输出的行数 )通过 子句限制结果集输出的行数 子句 (1)命令格式 SELECT [TOP n [PERCENT ]] [属性列表] (2)功能 n是一个正整数,如果指定PERCENT关键字,则返回前百分之n条 记录,n必须介于0到100之间的正整数。比如“SELECT TOP 3 ”表示 输出查询结果集的前3行,“SELECT TOP 3 PERCENT”表示输出查询 结果集的前3%记录行。
6.1.2 简单查询 2.简单查询示例 .
4)使用查询表达式 ) 查询语句SELECT可直接查询表达式的值。 【例6.5】 列出表S中学生的学号和出生年份情况。 6.5】 列出表S中学生的学号和出生年份情况。 SELECT 学号, 出生年份=year(出生日期) FROM s 或 SELECT 学号, year(出生日期) as 出生年份 FROM
SQL Server 2005数据库实践教程—6.第六章 .自动化管理任务
20
6-2 管理作业与警报
6-2-2 创建作业的基本步骤
实验1:创建简单作业实验 第三步:在作业步骤属性的选择页中点击“高级”项,并在操作界面将“成功时要 执行的操作”选项选择为“退出报告成功的作业”,并将输出追加到“输出文件” 中,点击确定保存配置信息
21
6-2 管理作业与警报
6-2-2 创建作业的基本步骤
6
6-1 自动化管理任务概述
6-1-3 SQL SERVER代理
1、作业 作业的概念 作业 SQL SERVER代理(SQL Server Agent)说到底就是一个Windows的后台服务 的后台服务 和可以执行安排的管理任务,这个管理任务也被称为“作业”。 和可以执行安排的管理任务 每个作业包含了一个或多个作业步骤 一个或多个作业步骤,每个步骤都可以完成一个任务。SQL 一个或多个作业步骤 SERVER代理可以在指定的时间或在特定的事件条件下执行作业里的步骤,并记录 作业的完成情况,一旦执行作业步骤出现错误,SQL Server代理还可以设法通知管 理员。
实验1:创建操作员实验 第二步:分别在打开的创建操作员用户界面中录入操作员名称和电子邮件的名称, 但是这里的电子邮件有效方式是在建立电子邮件服务器后指定的用户邮件地址,因 此首先应当确保电子邮件服务器是已经配置好并成功启动的,而且应当为具体的用 户设置好邮件地址。
15
6-2 管理作业与警报
6-2-2 创建作业的基本步骤
8
6-1 自动化管理任务概述
6-1-3 SQL SERVER代理 实验1:设置SQL Server代理服务为自动启动实验
第二步:在打开的“属性”对话框中 切换到代理服务器的“服务”页面, 选择启动模式为“自动”。如图所示。 当然也可以通过点击开始->运行, 然后键入services.msc,运行后找 到SQL Server 2005 Agent,双击 设置为自动启动。(请读者自行尝试)
数据库英文版第六版课后答案
数据库英文版第六版课后答案Chapter 1: IntroductionQuestions1.What is a database?A database is a collection of organized and structured data stored electronically in a computer system. It allows users to efficiently store, retrieve, and manipulate large amounts of data.2.What are the advantages of using a database system?–Data sharing and integration: A database system allows multiple users to access and share data simultaneously.–Data consistency and integrity: A database system enforces rules and constraints to maintain the accuracy and integrity of the data.–Data security: A database system provides access control mechanisms to ensure that data is accessed by authorized users only.–Data independence: A database system separates the data from the application programs that use it, allowing for easier applicationdevelopment and maintenance.Exercises1.Discuss the advantages and disadvantages of using a database system.Advantages:–Data sharing and integration–Data consistency and integrity–Data security–Data independenceDisadvantages:–Cost: Database systems can be expensive to set up and maintain.–Complexity: Database systems require a certain level of expertise to design, implement, and manage.–Performance overhead: Database systems may introduce some overhead in terms of storage and processing.Overall, the advantages of using a database system outweigh the disadvantages in most cases, especially for large-scale applications with multiple users and complex data requirements.Chapter 2: Relational Model and Relational Algebra Questions1.What is a relation? How is it represented in the relational model?A relation is a table-like structure that represents a set of related data. It is represented as a two-dimensional table with rows and columns, where each row corresponds to a record and each column corresponds to a attribute or field.2.What is the primary key of a relation?The primary key of a relation is a unique identifier for each record in the relation. It is used to ensure the uniqueness and integrity of the data.Exercises1.Consider the following relation:Employees (EmpID, Name, Age, Salary)–EmpID is the primary key of the Employees relation.–Name, Age, and Salary are attributes of the Employees relation.2.Write a relational algebra expression to retrieve the names of all employees whose age is greater than 30.π Name (σ Age > 30 (Employees))Chapter 3: SQLQuestions1.What is SQL?SQL (Structured Query Language) is a programming language designed for managing and manipulating relational databases. It provides a set of commands and statements that allow users to create, modify, and query databases.2.What are the main components of an SQL statement?An SQL statement consists of the following main components:–Keywords: SQL commands and instructions.–Clauses: Criteria and conditions that specify what data to retrieve or modify.–Expressions: Values, variables, or calculations used in SQL statements.–Operators: Symbols used to perform operations on data. Exercises1.Write an SQL statement to create a table called。
数据库教程
数据库教程
数据库是用来存储和管理数据的工具。
它是一个结构化的存储系统,可以用来创建、访问和管理数据。
数据库中的数据可以被组织成不同的表,每个表包含一系列的行和列。
在数据库中,每个表都有一个唯一的名称,并且包含多个列。
每个列都有一个特定的数据类型,比如整数、字符串、日期等。
每个列还可以定义一些约束,比如唯一性约束、主键约束等。
数据库使用SQL(Structured Query Language,结构化查询语言)进行数据的操作。
SQL是一种专门用来与数据库进行交
互的语言。
它可以用来创建表、插入数据、查询数据、更新数据和删除数据等操作。
数据库还支持事务处理。
事务是一组数据库操作,要么全部成功执行,要么全部失败回滚。
通过事务,可以确保数据的完整性和一致性。
数据库还有其他一些高级功能,比如数据索引、视图、存储过程等。
数据索引可以加快数据的检索速度,视图可以对数据进行逻辑上的组织和筛选,存储过程可以封装一组常用的数据库操作,方便重复使用。
总之,数据库是一个强大的工具,可以存储和管理大量的数据。
掌握数据库的基本概念和操作,可以帮助我们更好地处理和分析数据。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据库系概数据库系统概论—P178参考:第六章关系数据库理论P169内容回顾关系笛卡尔积、关系、候选码、主码、主属性 关系6个性质关系的完整性实体完整性、参照完整性、自定义完整性 关系操作并交叉笛卡尔积并、交、叉、笛卡尔积选择、投影、连接本节内容第一节问题的提出第二节规范化本节教学目标掌握函数四种依赖,重点掌握函数的部分依赖、传递依赖规范化2NF3NF BCNF能够利用投影法熟练对关系进行 规范化:2NF, 3NF, BCNF,能够利用投影法熟练对关系进行规范化了解多值依赖,4NF、5NF重点规范化:2NF, 3NF, BCNF难点规范化:3NF, BCNF第一节问题的提出什么是数据依赖关系模式的简化定义数据依赖对关系模式影响一什么是数据依赖一、什么是数据依赖1. 完整性约束的表现形式限定属性取值范围例如学生成绩必须在0100限定属性取值范围:例如学生成绩必须在0-100之间 定义属性值间的相互关连2. 数据依赖个关系内部属性与属性之间的约束关系 一个关系内部属性与属性之间的约束关系现实世界属性间相互联系的抽象数据内在的性质语义的体现3. 数据依赖的类型Functional Dependency简记为 函数依赖(Functional Dependency,简记为FD)简记为 多值依赖(Multivalued Dependency,简记为MVD) 其他二关系模式的简化表示二、关系模式的简化表示关系模式R(U, D, DOM, F)简化为一个三元组:R(U, F)当且仅当U上的一个关系r满足F时,r称为关系模式R(U, F)的一个关系)三、数据依赖对关系模式的影响三数据依赖对关系模式的影响[例1]建立一个描述学校教务的数据库:p学生的学号(Sno)、所在系(Sdept)系主任姓名(Mname)、课程号(Cno)成绩(Grade)单一的关系模式:Student <U、F>单St d t<UU ={Sno, Sdept, Mname, Cno, Grade }学校数据库的语义:一个系有若干学生一个学生只属于一个系⒈个系有若干学生,个学生只属于个系;个系只有名主任;⒉一个系只有一名主任;⒊一个学生可以选修多门课程,每门课程有若干学生选修;⒋每个学生所学的每门课程都有一个成绩。
属性组U上的一组函数依赖F:{p,p, F ={Sno→ Sdept, Sdept→ Mname,(Sno, Cname) → Grade }Sno Cno GradeSdept M nam e假设存在这样个关系假设存在这样一个关系:Student(Sno, Sdept, Mname, Cno, Grade )St d t(S Sd t M C G dSno Sdept Mname Cno GradeS1计算机系张明C195S2计算机系张明C190S3计算机系张明C188S4计算机系张明C170S5计算机系张明C178……………请问该关系模式好吗?SnoSdeptMnameCnoGradeS1计算机系张明C195李四S2计算机系张明C190S3计算机系张明C188李四李四S4计算机系张明C170S5计算机系张明C178李四李四……………系名、系主任名重复出现 “张明”退休,李四接替¾数据冗余太大¾张明退休,李四接替 一个新系刚成立,尚无学生个系的学生全部毕业更新异常¾插入异常一个系的学生全部毕业¾删除异常小结结论:关系模式不是一个好的模式。
Student关系模式不是个好的模式。
“好”的模式:不会发生插入异常、删除异常、更新异常,数据冗余应尽可能少原因:由存在于模式中的某些数据依赖引起的解决方法:通过分解关系模式来消除其中不合适本节内容第一节问题的提出第二节规范化第二节规范化函数依赖码范式2NF3NFBCNF函数依赖函数依赖平凡函数依赖与非平凡函数依赖 完全函数依赖与部分函数依赖 传递函数依赖一函数依赖一、函数依赖定义6.1 设R(U)是一个属性集U上的关系模式,X 61()系和Y是U的子集。
若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称“X函数确定Y”或“Y函数依赖于X”,记作X→Y。
X称为这个函数依赖的决定属性集(Determinant)。
Y=f(x)说明1. 函数依赖不是指关系模式R的某个或某些关系实例满足的约束条件,而是指R的所有关系实例均要满足的约束条件。
2. 函数依赖是语义范畴的概念。
只能根据数据的语义来确定函数依赖。
例如“姓名→年龄”这个函数依赖只有在不允许有同名人的条件下成立3数据库设计者可以对现实世界作强制的规定例如规定不3. 数据库设计者可以对现实世界作强制的规定。
例如规定不允许同名人出现,函数依赖“姓名→年龄”成立。
所插入的元组必须满足规定的函数依赖,若发现有同名人存在,的元组必须满足规定的函数依赖若发现有同名人存在则拒绝装入该元组。
例: Student(Sno, Sname, Ssex, Sage, Sdept)S d(S S S S Sd)假设不允许重名,则有:Sno→ Ssex,Sno→ Sage , Sno→ Sdept,S S S S S Sd tSno←→ Sname,Sname→ Ssex,Sname→S ageSname→ Sdept但Ssex→Sage若X→Y,并且Y→X, 则记为X←→Y。
若Y不函数依赖于X, 则记为X→Y。
二、平凡函数依赖与非平凡函数依赖二平凡函数依赖与非平凡函数依赖在关系模式R(U)中,对于U的子集X和Y,如果X→Y,但Y ⊆X,则称X→Y是非平凡的函数依赖若X→Y,但Y ⊆X, 则称X→Y是平凡的函数依赖例:在关系SC(Sno, Cno, Grade)中,例在关系SC(S C G d)中非平凡函数依赖:(Sno, Cno) →Grade平凡函数依赖:(Sno, Cno) →Sno(Sno, Cno) Cno(Sno Cno)→Cno三完全函数依赖与部分函数依赖三、完全函数依赖与部分函数依赖定义6.2 在关系模式R(U)中,如果X →Y ,并且对于的任何一个真子集X ′都有X 的任何个真子集X ,都有X ′ → Y , 则称Y 完全函数依赖于X ,记作X →Y 。
f 若X →Y ,但Y 不完全函数依赖于X ,则称Y 部分函记作X Y P 数依赖于X ,记作X → Y 。
例:在关系SC(Sno, Cno, Grade)中,由于:Sno→Grade,Cno→ Grade,Gradef因此:(Sno, Cno) →Grade在关系Student(Sno, Sdept, Mname, Cno, Grade)Sno→ Sdept,Sno是(Sno, Cno)的真子集由于:Sdept(Sno Cno)P因此:(Sno, Cno)→ Sdept四传递函数依赖四、传递函数依赖定义6.3 在关系模式R(U)中, 如果X →Y , (Y ⊆X), Y →X ,Y →Z ,则称Z 传递函数依赖于X ,记为:X → Z :→←→传递注: 如果Y X ,即X Y ,则Z 直接依赖于X 。
Std(S Sd t M )中有例: 在关系Std(Sno, Sdept, Mname)中,有:Sno → Sdept ,Sdept → MnameMname 传递函数依赖于Sno第二节规范化函数依赖码范式2NF3NFBCNF码定义 6.4设K 为R<U,F>中的属性或属性组合。
若K U ,则K 称为R 的侯选码(Candidate )F Key )。
若候选码多于一个,则选定其中的一个做为若候选多个,则选定其中的个做主码(Primary Key )。
主属性和非主属性 全码[]例2]关系模式S(Sno, Sdept, Sage),单个属性Sno是码,SC(Sno,Cno,Grade)中,(Sno,Cno)是码[例3]关系模式R(P,W,A)(P W A)P:演奏者W:作品A:听众一个演奏者可以演奏多个作品某一作品可被多个演奏者演奏听众可以欣赏不同演奏者的不同作品y码为(P,W,A),即All-Key外码定义6.5关系模式R 中属性或属性组X 并非R的码,但X 是另一个关系模式的码,则称X 是R 的外部X是另一个关系模式的码则称X R码(Foreign key)也称外码如在SC(Sno,Cno,Grade)中,Sno不是码,但Sno是关系模式S(Sno,Sdept,Sage)的码,则Sno是关系)的码则模式SC的外部码主码与外码一起提供了表示关系间联系的手段第二节规范化函数依赖码范式2NF3NFBCNF范式范式是符合某一种级别的关系模式的集合关系数据库中的关系必须满足一定的要求。
满足不同程度要求的为不同范式范式的种类:第一范式(1NF)第二范式(2NF)第三范式(3NF)BC范式(BCNF)第四范式(4NF)第五范式(5NF)各种范式之间存在联系:1⊃2⊃⊃⊃⊃NFNF53NFNFNFBCNF4某一关系模式R为第n范式,可简记为R∈nNF。
一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化核心范式实例分析下面表格是个不规范化()学生选课系统的实例下面表格是一个不规范化(UNF)学生选课系统的实例,我们将从这个实例开始,一步一步将其规范化表中套表ModuleCodeModule TitleStudentCodeStudentNameDate of Birth Grade Result IS701DatabaseProgramming & WebDevelopmentM928642M928268N926484N978787BloggsSmithGreenMorris10/01/198401/04/198025/08/1975ACDFDistinctionPassPassFail IS702CommunicationTechnologiesM928273N926484N978787BloggsGreenMorris01/04/198025/08/1975EBCFailMeritPassFail符合的式未规范化的式IS705Business SystemsM928268N926484N978787SmithGreenMorris01/04/198025/08/1975ACBDistinctionPassMerit UNF Un-normalised Form(不符合1NF的形式、未规范化的形式)第一步:方法是剔除表中所套的表将UNF 转换成1NF ,方法是剔除表中所套的表SnoCnoSnameBirthdateGradeResultCno CnameSCCourseM928642IS701BloggsADistinctionIS701Database Programming& Web Development M928268IS701Smith10/01/1984C PasspIS702CommunicationTechnologies N926484IS701Green 01/04/1980D PassN978787IS701Morris 25/08/1975F FailgIS705Business Systems1NF定义:如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF。