習題參考解答

 

[ Ch 01 ]

 

 

[ 習題1-2 ]

教師基本資料資料庫

詮釋資料

資料

資料項

欄位長度

型態

資料一

資料二

資料三

姓名

19

Char

張三

李四

王五

身份證字號

10

Char

A122000111

B220111111

C122333999

出生年月日

8

Date

500101

550202

601212

主要授課課程

20

Char

資料庫管理

計算機概論

電子商務

 

 

 

[ 習題1-3 ]

若是依圖所示的架構 , 由於每台 PC dbaseIII 都可能增修檔案伺服器裡的資料。此時萬一兩台 PC 要修改同一筆資料,便可能會各修改一半,造成資料不一致

 

[ CH 02 ]

 

[習題2-2]

ERD中,如果”緊急聯絡人”可能與其他實體型態形成關係型態,或是有一個屬性是唯一時(比如姓名),則採用弱實體型態。否則用多值複合屬性表示較簡潔。

 

 

[習題2-4]

A. 不符合。因為 M1 M2 各有兩台購物車的 cartTime 一樣。

B. 符合。

C. 不符合。因為 M2 有兩台購物車的 cartTime 一樣,且 C2 沒有相對應的會員。

D. 符合。

E. 不符合。因為 M1 M2 各有兩台購物車的 cartTime 一樣,且( M1, C2 )重複記載。

F. 不符合。因為 M2 有兩台購物車的 cartTime 一樣,且( M1, C1 )重複記載。。

G. 不符合。因為 M1 有四台購物車,但其中兩兩 cartTime 一樣。

[習題2-6]

A. •  無法清楚指出兩隊比賽後,哪一支隊伍優勝,哪一支隊伍落敗的情形

 •  無法處理同一天同兩個隊伍比賽超過一場時,比賽場次的先後次序。

.

 

[習題2-8]

 

 

[ CH 03 ]

 

[習題3-2]

 

 

 

[習題3-4]

 

 

 

 

[習題3-8]

請注意假設迷你世界裡僅記載現況資料,不包括歷史紀錄,因此,每一個 VideoCopy 僅能最多被一位會員租借。

 

 

 

[習題3-10]

 

 

 

[習題3-11]

 

 

 

 

[習題3-13]

 

 

 

 

 

[ Ch 04 ]

 

[ 習題4-2 ]

(1). 因為 Product 資料表裡沒有 編號為 'b00234' 的產品,因此違反『參考完整限制』。

(2). 因為欲新增的序列值 (‘b10234' ,‘Lin') Author 資料表裡已經有相同序列值存在,違反『關聯鍵限制』,因此此資料無法新增。

(3). 新增序列值 (‘b10234' ,‘Chen') ,因無相同之序列值,參考關聯裡也有相對應的產品編號, 滿足所有的限制 ,所以可以順利新增。
(4).
欲新增的序列值 (‘b10234' , null) 之創作者名稱值為 null 主鍵不得為空值 ,因此違反『實體完整限制』。

 

 

 

[ 習題4-4 ]

 

 

 

[ 習題4-6 ]

 

 

 

[ 習題4-10 ]

A.

 

 

B.

1. 不會。 因為 主鍵不可為空值,並且不可有兩筆相同的序列值同時存在,因此只是刪除一筆序列值時並不會影響。

2. 會, 因為影片拷貝和影片種類都有外部鍵參考到影片。

 

 

[ 習題4-12 ]

 

 

 

[ 習題4-13 ]

 

 

 

[ 習題4-15 ]

 

 

 

[ 習題4-17 ]

 

 

 

[ Ch 05 ]

 

[ 習題5-2 ]

Null可能有以下三種意義:
1.
 知道該屬性有值但還未填入
2.
 該屬性不可能有值
3.
 不知道該屬性是否有值

比如在算 COUNTSUM AVERAGE時,到底是忽略其值(即假設該屬性值不存在),還是給它一個預設值(比如 0 ),並沒有明確定義。(不過各 DBMS 會有一預設作法,通常是忽略其值)

 

[ 習題5-4 ]

 

 

 

[ 習題5-5 ]

 

 

 

 

[ 習題5-6 ]

 

  

 

 

[ 習題5-7 ]

 

[ 習題5-8 ]

 

[ 習題5-11 ]

 

[ 習題5-13 ]

 

[ 習題5-15 ]

 

[ Ch 06 ]

 

[ 習題6-1 ]

1.
CREATE TABLE Student
(sId CHAR (8) NOT NULL ,
sName VARCHAR (30) NOTNULL ,
gender CHAR (1),
bDate DATE ,
email VARCHAR (20),
PRIMARY KEY (sId));

CREATE TABLE Course
(cNo CHAR (8) NOT NULL ,
cName VARCHAR (30) NOTNULL ,
cDesc VARCHAR (100),
PRIMARY KEY (cNo));

CREATE TABLE Takes
(sId CHAR (8) NOT NULL ,
cNo CHAR (8) NOT NULL ,
finalScore DECIMAL(3, 1),
PRIMARY KEY (sId, cNo),
FOREIGN KEY (sId) REFERENCES Student(sId)
ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (cNo) REFERENCES Course(cNo)
ON DELETE CASCADE ON UPDATE CASCADE );

CREATE TABLE Item
(cNo CHAR (8) NOT NULL ,
iName VARCHAR (30) NOT NULL ,
dueDate DATE,
PRIMARY KEY (cNo, iName),
FOREIGN KEY (cNo) REFERENCES Course(cNo)
ON DELETE CASCADE ON UPDATE CASCADE );

CREATE TABLE Evaluated
(sId CHAR (8) NOT NULL ,
cNo CHAR (8) NOT NULL ,
iName VARCHAR (30) NOT NULL ,
score DECIMAL(3, 1),
PRIMARY KEY (sId, cNo, iName),
FOREIGN KEY (cNo, iName) REFERENCES Item(cNo, iName)
ON DELETE CASCADE ON UPDATE CASCADE );

CREATE TABLE Teacher
(tNo CHAR (8) NOT NULL ,
tName CHAR (8) NOT NULL ,
title VARCHAR (30),
PRIMARY KEY (tNo));

CREATE TABLE TeacherDepartment
(tNo CHAR (8) NOT NULL ,
department VARCHAR (30) NOT NULL ,
PRIMARY KEY (tNo, department),
FOREIGN KEY (tNo) REFERENCES Teacher(tNo)
ON DELETE CASCADE ON UPDATE CASCADE );

CREATE TABLE Teaches
(tNo CHAR (8) NOT NULL ,
cNo CHAR (8) NOT NULL ,
PRIMARY KEY (tNo, cNo),
FOREIGN KEY (tNo) REFERENCES Teacher(tNo)
ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (cNo) REFERENCES Course(cNo)
ON DELETE CASCADE ON UPDATE CASCADE );

 

 

[ 習題6-3 ]

1.
CREATE TABLE Project
( pNo CHAR(10) NOT NULL ,
pName VARCHAR(15),
PRIMARY KEY (pNo));

2.
CREATE TABLE Budget
( pNo CHAR(10) NOT NULL ,
year DATE NOT NULL ,
amount INTEGER(10) ,
PRIMARY KEY (pNo, year)
FOREIGN KEY (pNo) REFERENCE Project (pNo)
ON DELETE CASCADE ON UPDATE CASCADE );

 

 

[ 習題6-4 ]

2.
SELECT DISTINCT name
FROM Browse AS B, Member AS M, Product AS P
WHERE B.mId = M.mId AND B.pNo = P.pNo AND P.pName =‘
蔡依林專輯二 ';

3.
SELECT tNo, transMid
FROM Transaction
WHERE to_char(transTime, ‘yyyy') = ' 2004' AND method = ‘cart';

 

 

 

[ 習題6-6 ]

SELECT S.sId, S.name
FROM Student AS S,Takes AS T,Course AS C
WHERE C.courseName='
資料庫管理 '
AND S.sId=T.sId
AND T.courseId=C.courseId;

 

 

[ 習題6-9 ]

SELECT title, aName
FROM Video AS V, Agency AS A
WHERE V.uCode = A.uCode AND director='
李安':

 

 

[ 習題6-11 ]

SELECT Merchandise.name, Member.name,.bottomPrice, expired
FROM Merchandise, Member
WERE Merchandise.mId  = Member.mId
AND Merchandise.name LIKE ‘%
聲寶電漿電視 % '
AND to_char(expired,'yyyymmddhh') > ‘ 20060501'

 

[ 習題6-13 ]

SELECT constraint
FROM Patron, Interest
WHERE name= '
陳水扁'
AND date >= to_date ('20021101','yyyymmdd')
AND Patron.patronId=Interest.patronId;

 

 

 

[ Ch 07 ]

 

[ 習題7-1 ]

對於每一筆上網達成的交易,若其中定價超過 500 的商品種樣數超過 2 個的話,則列出其交易編號和所購買定價超過 500 的商品種樣數。這顯然與 Q20 不同。

 

 

[ 習題7-2 ]

1.
( SELECT mId, name
FROM Member
WHERE address LIKE ‘%
台北縣 %' AND
mId NOT IN ( SELECT introducer
FROM Member);

5.
( SELECT DISTINCT mId, name
FROM (Member NATURAL JOIN Browse) NATURAL JOIN Product
WHERE pName = ‘
蔡依林專輯二 ')
EXCEPT
( SELECT DISTINCT mId, name
FROM Member JOIN ((Transaction NATURAL JOIN Record) NATURAL JOIN Product) ON mId = transMid
WHERE pName = ‘
蔡依林專輯二 ');

 

[ 習題7-4 ]

1.
SELECT Product.pNo, pName, unitPrice, COUNT (name)
FROM Product LEFT OUTER JOIN Author ON Product.pNo=Author.pNo
GROUP BY Product.pNo, pName, unitPrice;

3.
SELECT SUM (salePrice)
FROM Transaction NATURAL JOIN Record
WHERE to_char(transTime,'yyyymmdd') = ' 200402'

6.
CREATE VIEW Browselnf (mId, name, browseTime, pName)
AS ( SELECT Member.mId, name, browseTime, pName
FROM Member, Browse, Product
WHERE Browse.pNo = Product.pNo AND Browse.mId = Member.mId);

7.
GRANT SELECT
ON BrowseInf
TO syhwang;

11.
SELECT Product.pNo, pName, SUM (salePrice)
FROM Product LEFT OUTER JOIN (Record NATURAL JOIN Transaction) AS R ON Product.pNo = R.pNo
WHERE to_char (transTime, ‘yyyymm') = ‘ 200410' AND
Product.pNo IN
( SELECT pNo
FROM Browse
WHERE to_char (brwoseTime,'yyyymm') = ‘ 200410'
GROUP BY pNo
HAVING COUNT ( DISTINCT mId)> 100 )
GROUP BY Product.pNo, pName;

 

 

 

[ 習題7-5 ]

2.
SELECT tNo, COUNT (pNo)
FROM Record
WHERE tNo IN (
SELECT tNo
FROM Record
GROUP BY tNo
HAVING SUM (salePrice)>1000)
GROUP BY tNo;

或是
SELECT tNo,COUNT(pNo)
FROM Record
GROUP BY tNo HAVING SUM(salePrice)>1000;

3.
SELECT mId, name, SUM (salePrice)
FROM Member LEFT OUTER JOIN (Transaction NATURAL JOIN Record)
ON (mId = transMid AND to_char (transTime, ‘yyyymm') = ‘ 200510' )
GROUP BY mId, name;

 

[ 習題7-6 ]

2.
CREATE ASSERTION Book_need_author
CHECK (NOT EXISTS
 (SELECT *
 FROM Product AS P
 WHERE catalog='Book' AND
  NOT EXISTS (SELECT *
   FROM Author
   WHERE pNo=P.pNo)));

 

 

 

[ 習題7-7 ]

SELECT sId, COUNT(*)
FROM Article
WHERE sId IN ( SELECT sId
       FROM Takes NATRUAL JOIN Course
       WHERE courseName = ‘ 資料庫管理 ')
GROUP BY sId;

 

[ 習題7-12 ]

1.
假設拍賣者姓名為唯一。
SELECT Member.name, Merchandise.bottomPrice, MAX (Bid.price)
FROM Merchandise, Member, Bid
WHERE Merchandise.mId  = Member.mId
 AND Merchandise.mId  = Bid.merMid
 AND Merchandise.seqNo = Bid.merSeqno
 AND Merchandise.mId  = ‘m0002'
 AND Merchandise.seqNo = ‘ 003'
GROUP BY Member.name, Merchandise.bottomPrice ;

2.
假設沒有叫價過的會員不列出
SELECT mId, totalBid, totalDeal
FROM ( SELECT mId, COUNT (*) AS totalBid
 FROM Bid
 WHERE to_char (datetime,'yyyymm') = ‘ 200211'
 GROUP BY mId)
 LEFT OUTER JOIN
 ( SELECT transMid, COUNT (*) AS totalDeal
 FROM Merchandise
 WHERE   to_char (expired,'yyyymm') = ‘ 200211'
 GROUP BY transMid)
 ON mId=transMid;

 

[ 習題7-14 ]

1.
SELECT dId, name, position
FROM Doctor NATURAL JOIN Department
WHERE dName = ‘
一般內科 '
ORDER BY position;

2.
SELECT dId, name, COUNT (*)
FROM Doctor LEFT OUTER JOIN Registers ON (Doctor.dId = Registers.dId
       AND to_char (startDateTime, ‘yyyymm) = ‘ 200604' )
WHERE Doctor.dNo IN
   ( SELECT dNo
   FROM Department
   WHERE dName = ‘ 一般內科 ')
GROUP BY dId, name;

3.
SELECT pNo, name, birthday, sex
FROM Patient AS P
WHERE NOT EXISTS
 ( SELECT dId
 FROM Doctor NATURAL JOIN Department
 WHERE dName=' 一般內科 ')
 EXCEPT
 ( SELECT dId
 FROM Registers AS R
 WHERE to_char (startDateTime, ‘yyyy') = ‘ 2005' AND R.pNo = P.pNo);

4.
SELECT P.dName, COUNT(*)
FROM Department AS P, Doctor AS D, Registers AS R
WHERE P.dNo = D.dNo AND D.dId = R.dId
AND to_char (R.startDateTime, ‘yyyymm') = ‘ 200604'
AND P.dNo IN
  ( SELECT dNo
  FROM Doctor
  GROUP BY dNo
  HAVING COUNT(*) > 10);

5.
CREATE TABLE DoctorPatients
(dId CHAR(10) NOT NULL,
totalNum INT );

INSERT INTO DoctorPatients
AS ( SELECT dId, COUNT (*)
  FROM Doctor LEFT OUTER JOIN Registers
  ON Doctor.dId = Registers.dId)
GROUP BY dId);

6.
CREATE TRIGGER increment
AFTER INSERT ON Registers
FOR EACH ROW
UPDATE DoctorPatients
SET totalNum = totalNum + 1
WHERE dId = New.dId;

[ 習題7-16 ]

1.
SELECT depName, COUNT (*)
FROM Department, Patron
WHERE Department.depId=Patron.depId
GROUP BY depName;

2.
SELECT title
FROM Book
WHERE categoryId IN (
   SELECT categoryId
   FROM Patron, Involves
    WHERE Patron.patronId=Involves.patronId
   AND Patron.name=' 張三 ')
 OR categoryId IN (
   SELECT categoryId
   FROM CallCategory
   WHERE parent IN (
    SELECT categoryId
    FROM Patron, Involves
    WHERE Patron.patronId=Involves.patronId
    AND Patron.name=' 張三 '))
 OR categoryId IN (
   SELECT categoryId
   FROM Callcategory
   WHERE parent IN (
    SELECT categoryId
    FROM Callcategory
    WHERE parent IN (
     SELECT categoryId
     FROM Patron,Involves
     WHERE Patron.patronId=Involves.patronId
     AND Patron.name=' 張三 ')));

 

 

[ Ch 08 ]

 

[ 習題8-2 ]

1.
CREATE ASSERTATION invNo_tNo_FD
CHECK ( NOT EXISTS
SELECT *
FROM Transaction
GROUP BY invNo
HAVING COUNT (tNo) > 1);

2.
CREATE ASSERTATION tNopNo_invNo_FD
CHECK ( NOT EXISTS
SELECT *
FROM Transaction1 NATURAL JOIN Transaction2
GROUP BY tNo, pNo
HAVING COUNT (invNo) > 1);

 

 

 

 

[ 習題8-4 ]

 

 

[ 習題8-8 ]

1. (1){B} ® {D}
 (2){C} ® {E}
 (3){F} ® {A}
 (4) {A, B} ® {A,B,C,D,E,F}
 (5) {F, B} ® {A,B,C,D,E,F}

2.{A,B},{F,B}

3.
R1( F,B ,C)
R2( F ,A)
R3( B ,D)
R4( C ,E)
{A,B}
® {C,E,F} 無法藉由檢查個別的關聯來確定,必須檢查 R1 R2 才行。

 

[ 習題8-10 ]

 

T( A1, A2, A3, A4)

T1( A1, A4, A3), T2( A4 ,A2)

T1( A1, A2, A3),T2( A4 ,A2)

1.{A1, A2} A3

2.{A1, A2} A4

3. A4 A2

4.{A1, A4} A2

5.{A1, A4} A3

是否會產生虛假值

是否滿足 BCNF

 

 

[ 習題8-12 ]

 

 

[ 習題8-14 ]

1. {callNumber, seqNum, author}

2.
B1( callNumber, seqNum, author)
B2( callNumber , title, publisherName, publisherAddress, publisherPhone)
B3( callNumber, seqNum, storedBranch)

3.
B1( callNumber, seqNum, author )
B2( callNumber , title, publisherName)
B3( publisherName , publisherAddress, publisherPhone)
B4( callNumber, seqNum , storedBranch)

4.
B1( callNumber, author )
B1' ( callNumber , seqNum) /*
可省略 */
B2( callNumber , title, publisherName)
B3( publisherName , publisherAddress, publisherPhone)
B4( callNumber, seqNum , storedBranch)

 

 

[ Ch09 ]

 

[ 習題9-3 ]

1.
(1)
計算每個中間節點最多容納的節點指標數 P:
 (P * 8 ) + (P – 1) * 8 <= 2048
 16P <= 2056
 ® 每個中間節點最多存 128指標

(2)
計算每個葉節點平均容納的紀錄指標數 p
 P * (10+8) +8 <=2048
 18P <= 2040
 ® 每個葉節點最多均存 113個記錄指標

假設葉節點和中間節點全滿,所以每一層的節點數為:

 

總指標數

節點數

葉節點

500,0000記錄指標

500000/113=4425

中間節點一

4425 節點指標

4425/128=35

根節點

35節點指標

1

B+-Tree至少是三層。

假設葉節點和中間節點都是半滿,所以每一層的節點數為:

 

總指標數

節點數

葉節點

500,0000記錄指標

500000/57=8771

中間節點一

8771 節點指標

8771/64=137

中間節點二

137節點指標

137/64=2

根節點

2節點指標

1

B+-Tree至多是四層。

2.
(1)
計算每個中間節點最多容納的節點指標數 P:
 (P * 8 ) + (P – 1) * (8+20) <= 2048
 36P <= 2076
 ® 每個中間節點平均存 57個節點指標

(2) 計算每個葉節點最多容納的紀錄指標數 p
 p * (10+28) +8 <=2048
 38p <= 2040
 ® 每個葉節點最多存 53個記錄指標

假設葉節點和中間節點全滿,所以每一層的節點數為:

 

總指標數

節點數

葉節點

500,0000記錄指標

500000/53=9434

中間節點一

9434節點指標

9434/57=166

中間節點二

166節點指標

166/57=3

根節點

3節點指標

1

B+-Tree至少是四層

假設葉節點和中間節點都是半滿,所以每一層的節點數為:

 

總指標數

節點數

葉節點

500,0000記錄指標

500000/27=18518

中間節點一

18518節點指標

18518/29=638

中間節點二

638節點指標

638/29=22

根節點

22節點指標

1

B+-Tree至多是四層

 

 

[ 習題9-5 ]

1.

 

 

2.

 

 

 

 

[ 習題9-7 ]

1.

I1.

 

 

I2.

 

2.
A.
 n5 -> n6 -> n7 -> n8 -> n9
B.
 n4 -> n5 -> n6 -> n7

3.
A. n7->n8->n9
B. n8->n9

4. 當索引屬性越多,該 B+-tree 所佔的空間就越大。而滿足多維範圍條件的紀錄在 B+-tree 的葉節點裡並不連續,因此,在執行這個搜尋時,就必須造訪更多的節點,因此成本有可能變大。

 

 

[ Ch10 ]

 

[ 習題10-2 ]

 

[. 初始查詢樹]

 

 

[. SELECT的動作往下移,盡量接近葉節點]

 

 

[. 將條件較嚴格的SELECT中間節點盡量往左邊移]

 

[ . 將相鄰的×中間節點 和 σ中間節點合併成一個中間節點 ]

 

 

[. PROJECT的動作往下移,盡量接近葉節點(或SELECT的中間節點)]

 

[ 習題10-4 ]

1.    SL(Select 循序搜尋) 將資料表的每一資料頁裡的每一筆記錄都拿出來做條件比對,如果成立就將該筆資料放置結果裡。

SSI(Select 單一索引結構搜尋):其中個子條件的屬性有建立適當的索引結構,這種方式利用該索引結構找出所有滿足條件的記錄之記錄指標,從而取出記錄,(之後為CPU處理時間)最後再將這些記錄做其他條件比對,滿足條件的才放置在結果裡。

SCI(Select 複合索引結構搜尋):有一多屬性值索引是由多個子條件所組合而成,這種方式利用該索引結構找出所有滿足條件之記錄指標,從而取出記錄,必要時(之後為CPU處理時間)再將這些記錄做整個條件比對,滿足條件的才放置在結果裡。

 

2.    (a) SL方式的成本: bRecord 40000

(b) SSI使用salePrice索引:

  xsalePrice+bRecord/23+40000/2=20003

(c) SCI計算的成本公式:

使用(amount, salePrice)索引成本:由於沒有其他資訊,所以假設合乎條件的佔1/2*1/2=1/4,因此選擇幅度

samount, salePrice =200000/4=50000

xamount, salePrice-1 +bI1amount, salePrice /2+samount, salePrice

=3+5000/2+50000=52503

結論:使用SSI (salePrice)索引的成本最低,而使用SCI amount, salePrice)索引,成本最高。

 

[ 習題10-5 ]

sunitPrice,catalog 仍為500,但因滿足條件的記錄指標在葉節點裡並沒有連續儲存,所以葉節點需造訪bI1unitPrice,catalog/2次,因此成本為

 

x unitPrice,catalog-1bI1unitPrice,catalog/2s unitPrice,catalog

 =3+1000+500

1503

[ 習題10-8 ]

 

 

[習題10-10]

 

 

[ Ch11 ]

 

[ 習題11-1 ]

 

 

 

[ 習題11-4 ]

  ANS:

1.JNL)巢狀迴圈法Nested loop):

for R的每一個資料頁PR do

begin

PR載入主記憶體裡;

for PR裡的每一筆記錄 rR do

        rR.found = FALSE;

    for S的每一個資料頁PS do

      begin

                        PS載入主記憶體裡;

       for PR裡的每一筆記錄rR do

                    for PS裡的每一筆記錄rS do

                            if rR.A= rS.B then

begin

 rR.found:=TRUE;

rR+rS寫入Result;

if Result已滿 then Result寫入硬碟並清空Result;

                              end

      end

for PR裡的每一筆記錄 rR do

      if rR.found=FALSE then

begin

rR+NULL寫入Result;

if Result已滿 then Result寫入硬碟並清空Result;

end

      end

2.JI)索引迴圈法Index loop):

for R的每一個資料頁PR do

begin

    PR載入主記憶體;

    for PR裡的每一筆記錄rR do

    begin

            rR.A搜尋S.BB+-tree並載入含有相匹配的S記錄的資料頁;

令這些匹配的S記錄指標集合為M;

if M=Æ then

begin

rR+NULL寫入Result;

if Result已滿 then Result寫入硬碟並清空Result;

break;

end

            for M裡的每一筆記錄rS do

            begin

                    將包含rS的資料頁載入主記憶體;

rR+rS寫入Result;

if Result已滿 then Result寫入硬碟並清空Result;

            end

end

end.

 

3. JSM)排序合併法(Sort-Merge):

載入R的第一個資料頁PR至主記憶體;

載入S的第一個資料頁PS至主記憶體;

rR¬PR的第一筆記錄;

rS¬PS的第一筆記錄;

do

if (rR.A= rS.B) then

begin

連續搜尋PR的下一筆記錄直到A值不同,令這些A值相同的記錄所成的集合是RR;

連續搜尋PS的下一筆記錄直到B值不同,令這些B值相同的記錄所成的集合是SS;

RRSS任兩筆記錄結合並寫入Result;

if Result已滿 then Result寫入硬碟並清空Result;

                  end

else  if  (rR.A> rS.B)

then rS¬ PS的下一筆記錄

else begin // rR.A< rS.B

rRNULL記錄結合並寫入Result;

if Result已滿 then Result寫入硬碟並清空Result;

                                rR¬ PR的下一筆記錄

end

if (rR = NULL) 載入R的下一個資料頁PR至主記憶體;

if (rS = NULL) 載入S的下一個資料頁PS至主記憶體;

until (PR = NULL OR PS = NULL) /* 表示RS已全部載入完畢 */

if (PS = NULL) /* 表示R可能還有剩下的紀錄

      do

rRNULL記錄結合並寫入Result;

if Result已滿 then Result寫入硬碟並清空Result;

                                rR¬ PR的下一筆記錄

if (rR = NULL) 載入R的下一個資料頁PR至主記憶體;

until (PR = NULL)

 

 

 

 

 

[ 習題11-7 ]

 

 

 

 

 

[ 習題11-10 ]

 

 

 

 

[ 習題11-12 ]


 

 

 

 

[ Ch12]

 

[ 習題12-1 ]

A. 系統追蹤檔緩衝區愈大,愈不會因為系統追蹤檔緩衝區已滿,而強迫將緩衝區裡的硬碟頁寫入硬碟。
B.
資料頁緩衝區愈大,愈不會因為資料頁緩衝區已滿,為空出一個硬碟頁而強迫將緩衝區裡的資料頁寫入硬碟。
C.
檢查點的間隔時間愈長,愈少作檢查點的運算,在系統不當機的情形下,可以提高交易執行效率。
D.
記憶體裡最多可有的修改過的資料頁頁數愈多,愈不會因為記憶體的資料被修改太多,而需強迫將緩衝區裡的資料頁寫入硬碟。

簡而言之,將這些參數值變大,都有助於提高交易執行效率。

 

 

 

[ 習題12-3 ]

由於只有 T1 在當機前 Commit ,所以復原後 T2 T3 所執行過的運算全部被還原,因此:

X=5, Y=0, Z=15, A=0, B=0, C=0;

 

 

[ 習題12-5 ]

 

 

[ 習題12-7 ]

 

 

 

 

 

[ 習題12-10 ]

 

 

 

 

[ Ch13]

 

[ 習題13-2 ]

 

 

[習題13-3]

若我們以第一種方式對學生特殊化分類作轉換,並以第二種方式對計分項目作轉換,則得到以下的關聯綱目。

 

 

 

 

[ 習題13-6 ]

我們用第三種方式來轉換 Account 的分類,並用第二種方式來轉換 Transaction 分類。

 

 

[ 習題13-11 ]

A0005 不存在於 Person Company( 依據群類規定, AccountOwner 的每一個實體必須是 Company person 的其中之一 ) 此外 AccountOwner 中的 A0001 同時是 Person Company ,雖說從群類的定義來說是允許的,不過如果用常識判斷,一輛車不該屬於兩個實體,也應該去除。

 

[ 習題13-13 ]

(1).EERD圖如下所示:

(2).轉成的關聯綱目:

 

[ 習題13-14 ]

 

[ 習題13-15 ]

 

 

 

[ Ch14]

 

[ 習題14-1 ]

在純文字中,並沒有所謂的標示語言 ( 用來描述文件的內容和格式 ) ,如果要找出所要的資訊,則需要將一段文字從頭到尾的搜尋過一遍,但由於人類語言的不精確性,電腦軟體很難確切擷取出正確的意義。

 

 

[習題14-3]

 

 

[ 習題14-6 ]

<?xml version =“ 1.0” ?>
<schema targetNamespace="http://www.mis.nsysu.edu.tw/db-book/transactions/" xmlns="http://www.w3.org/2001/XMLSchema">

<element name =“transactions”>
 <complexType>
 <sequence>
  <element ref=“transaction” maxOccurs=“unbounded”/>
 </sequence>
 </complexType>
</element>
<element name =“transaction”>
 <complexType>
 <sequence>
  <element ref=“record” minOccurs=” 1” maxOccurs=“unbounded”/>
  <attribute name=”tNo” type=”id”/>
  <attribute name=”transMid” type=”id”/>
  <attribute name=”method” type=”string”/>
 </sequence>
 </complexType>
</element>
<element name =“record”>
 <complexType>
 <sequence>
  <attribute name=”pNo” type=”id”/>
  <attribute name=”amount” type=”string”/>
  <attribute name=”salePrice” type=”string”/>
 </sequence>
 </complexType>
</element>
</schema>

假設以上 XML Schema 檔案名稱為 transactions.xsd ,以下為有效的 XML 檔:

<?xml version =“ 1.0” ?>
<transactions
xmlns="http://www.mis.nsysu.edu.tw/db-book/transactions/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <
schemaLocation =“http://www.mis.nsysu.edu.tw/db-book/transactions/transactions.xsd >
< transaction tNo =” 91100”
transMid =” a 0911234” method =” cart”>
 < record pNo =”b 30999” amount =” 1” salePrice =” 450” />
</ transaction >
< transaction tNo =” 92666”
transMid =”c 0927777” method =” cart”>
 < record pNo =”d 11222” amount =” 1” salePrice =” 300” />
 < record pNo =”d 20777” amount =” 1” salePrice =” 350” />
 < record pNo =”v 00111” amount =” 2” salePrice =” 800” />
</ transaction >
< transaction tNo =” 91888”
transMid =” a 0910001” method =” fax”>
  < record pNo =”b 40555” amount =” 3” salePrice =” 1650” />
  < record pNo =”d 03333” amount =” 2” salePrice =” 850” />
</ transaction >
< transaction tNo =” 92333”
transMid =” c 0927777” method =” email”>
  < record pNo =”b 51111” amount =” 1” salePrice =” 700” />
</ transaction >
< transaction tNo =” 90111”
transMid =” b 0905555” method =” cart”>
  < record pNo =”v 01888” amount =” 3” salePrice =” 1350” />
</ transaction >
< transaction tNo =” 92555”
transMid =” b 0922468” method =” cart”>
  < record pNo =”b 10234” amount =” 5” salePrice =” 3000” />
  < record pNo =”b 40555” amount =” 10” salePrice =” 5000” />
</ transaction >
</ transactions>

 

 

[ 習題14-9 ]

DOM的方式是在記憶體裡建置一個樹狀結構,雖然方便,但可以想見其效率會較差,且對於巨大的XML檔案,DOM的方式也不可行。SAX並不試圖將整個XML檔案載入,而只提供一些API來抓取XML裡的資料。也因此,所以SAX並無法新增XML資料或整批寫出XML檔案。兩種方式都是用來造訪文件裡的元素和屬性,並無法做搜尋。XPath則提供了一種簡單的查詢方式,XQuery的目的類似XPath,不過搜尋功能更強大,語法也較為複雜,可以做較複雜的條件搜尋。