database management fall 2003 the one-to-one and recursive relationships

29
Database Management Fall 2003 The one-to-one and recursive relationships

Upload: cuthbert-calvin-chambers

Post on 17-Dec-2015

220 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Database Management Fall 2003 The one-to-one and recursive relationships

Database ManagementFall 2003

The one-to-oneand recursive relationships

Page 2: Database Management Fall 2003 The one-to-one and recursive relationships

An organization chart

Managing Director Alice

Marketing Ned

Andrew Clare

Accounting Tod

Nancy

Purchasing Brier Sarah

Personnel & PR Sophie

Assume each departmenthas one and only one manager.

Page 3: Database Management Fall 2003 The one-to-one and recursive relationships

Modeling a 1:1 relationship

• 1:1 relationship is labeled– A relationship descriptor

• Obvious relationships are not labeled

DEPT

deptname

deptfloor

deptphone

Department’s boss

EMP

empno

empfname

empsalary

empno (FK) deptname (FK)

Page 4: Database Management Fall 2003 The one-to-one and recursive relationships

Mapping a 1:1 relationship

• Usual rules apply• Where do you put the foreign key?

– DEPT– EMP– Both tables (Watson)

Page 5: Database Management Fall 2003 The one-to-one and recursive relationships

Results of mapping

deptdeptname deptfloo

rdeptphone

empno

Management 5 2001 1Marketing 1 2002 2Accounting 4 2003 5Purchasing 4 2004 7Personnel & PR

1 2005 9

empempno

empfname

empsalary

deptname

1 Alice 75000 Management2 Ned 45000 Marketing3 Andrew 25000 Marketing4 Clare 22000 Marketing5 Todd 38000 Accounting6 Nancy 22000 Accounting7 Brier 43000 Purchasing8 Sarah 56000 Purchasing9 Sophie 35000 Personnel & PR

Manager

Page 6: Database Management Fall 2003 The one-to-one and recursive relationships

(revises Watson, p. 139)

CREATE TABLE DEPT(DeptName CHAR(15) NOT NULL, DeptFloor SMALLINT NOT NULL, DeptPhone SMALLINT NOT NULL, EmpNo SMALLINT NOT NULL,

PRIMARY KEY(DeptName),CONSTRAINT FK_DeptHead

FOREIGN KEY(EmpNo) REFERENCES EMP )

The SQL…

Page 7: Database Management Fall 2003 The one-to-one and recursive relationships

(revises Watson, p. 139)

CREATE TABLE EMP(EmpNo SMALLINT NOT NULL, EmpFName CHAR(10), EmpSalary DECIMAL(7,0), DeptName CHAR(15), BossNo SMALLINT,

PRIMARY KEY(EmpNo),CONSTRAINT FK_DeptMember

FOREIGN KEY(DeptName) REFERENCES DEPT,CONSTRAINT FK_BossFOREIGN KEY(BossNo) REFERENCES EMP(EmpNo) )

The SQL, continued…

Page 8: Database Management Fall 2003 The one-to-one and recursive relationships

You can’t execute both of the preceding Create Table statements, as written, because DEPT’sforeign key (EmpNo) requires that EMP alreadyexist… and EMP’s foreign key (DeptName) requiresthat DEPT already exist.

Solution:[1] Create DEPT without the foreign key.[2] Create EMP with its foreign keys.[3] Add the foreign key to DEPT:

ALTER TABLE DEPTADD CONSTRAINT FK_DeptHead

FOREIGN KEY(EmpNo) REFERENCES EMP

Oops! One small problem…

Page 9: Database Management Fall 2003 The one-to-one and recursive relationships

Querying a 1:1 relationship

List the salary of each department’s boss.

SELECT empfname, deptname, empsalary FROM emp

WHERE empno IN (SELECT empno FROM dept);

empfname deptname empsalary

Alice Management 75000

Ned Marketing 45000

Todd Accounting 38000

Brier Purchasing 43000

Sophie Personnel & PR 35000

Page 10: Database Management Fall 2003 The one-to-one and recursive relationships

An organization chart

Managing Director Alice

Marketing Ned

Andrew Clare

Accounting Tod

Nancy

Purchasing Brier Sarah

Personnel & PR Sophie

Now model the fact that managersare also employees.

Page 11: Database Management Fall 2003 The one-to-one and recursive relationships

Recursion

Factorial

5! = 5 x 4 x 3 x 2 x 1

OR

n! = n x (n - 1) x (n – 2) x (n – 3) …

OR recursive function (definition refers to itself):

f(1) = 1

f(n) = f(n-1) x n

Page 12: Database Management Fall 2003 The one-to-one and recursive relationships

Modeling a recursive relationship

• A recursive relationship relates an entity to itself• Label recursive relationships

EM P

Em p N oEm p F N am eEm p S alaryD ep tN am e (F K )B o s s N o (F K )

D EP T

D ep tN am eD ep tF lo o rD ep tP ho neEm p N o (F K )

D ep thead

D ep tm em b er

B o s s

See Watson, p. 137

This recursiverelationship isone-to-many

Page 13: Database Management Fall 2003 The one-to-one and recursive relationships

Mapping a recursive relationship

• Usual rules• 1:m

– The entity gets an additional column for the foreign key– Need a name different from the primary key

Page 14: Database Management Fall 2003 The one-to-one and recursive relationships

Results of mapping

deptdeptname deptfloor deptphon

eempno

Management

5 2001 1

Marketing 1 2002 2Accounting 4 2003 5Purchasing 4 2004 7Personnel & PR

1 2005 9

empempno empfnam

eempsalary deptname bossno

1 Alice 75000 Management2 Ned 45000 Marketing 13 Andrew 25000 Marketing 24 Clare 22000 Marketing 25 Todd 38000 Accounting 16 Nancy 22000 Accounting 57 Brier 43000 Purchasing 18 Sarah 56000 Purchasing 79 Sophie 35000 Personnel &

PR1

bossno is a foreign key

to empno in emp table

Page 15: Database Management Fall 2003 The one-to-one and recursive relationships

Querying a recursive relationship

Use table aliases to join table to itself.

Find the salary of Nancy’s boss.

SELECT wrk.empfname, wrk.empsalary, boss.empfname, boss.empsalary

FROM emp wrk, emp boss

WHERE wrk.empfname = 'Nancy'

AND wrk.bossno = boss.empno;

wrk.empfname wrk.empsalary boss.empfname boss.empsalary

Nancy 22000 Todd 3800

Page 16: Database Management Fall 2003 The one-to-one and recursive relationships

Joining a table with itselfempempno

empfname

empsalary

deptname bossno

1 Alice 75000 Management2 Ned 45000 Marketing 13 Andrew 25000 Marketing 24 Clare 22000 Marketing 25 Todd 38000 Accounting 16 Nancy 22000 Accounting 57 Brier 43000 Purchasing 18 Sarah 56000 Purchasing 79 Sophie 35000 Personnel & PR 1

empempno

empfname

empsalary

deptname bossno

1 Alice 75000 Management2 Ned 45000 Marketing 13 Andrew 25000 Marketing 24 Clare 22000 Marketing 25 Todd 38000 Accounting 16 Nancy 22000 Accounting 57 Brier 43000 Purchasing 18 Sarah 56000 Purchasing 79 Sophie 35000 Personnel &

PR1

Page 17: Database Management Fall 2003 The one-to-one and recursive relationships

Querying a recursive relationshipAnother perspective: display all data in a single row.Find the names of employees who earn more than their boss.

SELECT wrk.empfname

FROM emp wrk, emp boss

WHERE wrk.bossno = boss.empno

AND wrk.empsalary > boss.empsalary;

wrk bossempno

empfname

empsalary

deptname bossno empno

empfname

empsalary

deptname bossno

2 Ned 45,000 Marketing 1 1 Alice 75,000 Management

3 Andrew 25,000 Marketing 2 2 Ned 45,000 Marketing 14 Clare 22,000 Marketing 2 2 Ned 45,000 Marketing 15 Todd 38,000 Accounting 1 1 Alice 75,000 Manageme

nt6 Nancy 22,000 Accounting 5 5 Todd 38,000 Accounting 17 Brier 43,000 Purchasing 1 1 Alice 75,000 Manageme

nt8 Sarah 56,000 Purchasing 7 7 Brier 43,000 Purchasing 19 Sophie 35,000 Personnel &

PR1 1 Alice 75,000 Manageme

ntempfname

Sarah

Page 18: Database Management Fall 2003 The one-to-one and recursive relationships

Modeling a 1:1 recursive relationship

• The English monarchy

succession

MONARCH

monarch type

monarch namemonarch number

reign begin dateprevious mon name (FK)

previous mon number (FK)

Page 19: Database Management Fall 2003 The one-to-one and recursive relationships

Mapping a 1:1 recursive relationship

monarch

montype

monname

monnum

rgnbeg premonname

premonnum

Queen Victoria I 1837/6/20 William IV

King Edward VII 1901/1/22 Victoria I

King George V 1910/5/6 Edward VII

King Edward VIII 1936/1/20 George V

King George VI 1936/12/11

Edward VIII

Queen Elizabeth

II 1952/2/6 George VI

Page 20: Database Management Fall 2003 The one-to-one and recursive relationships

CREATE TABLE MONARCH(MonNameCHAR(15) NOT NULL, MonNum CHAR(5) NOT NULL, MonTypeCHAR(5) NOT NULL, RgnBeg DATETIME, PreMonName CHAR(15), PreMonNum CHAR(5), SucMonName CHAR(15), SucMonNum CHAR(5),

PRIMARY KEY(MonName,MonNum),CONSTRAINT FK_Predecessor

FOREIGN KEY(PreMonName,PreMonNum) REFERENCES MONARCH(MonName,MonNum),

CONSTRAINT FK_SuccessorFOREIGN KEY(SucMonName,SucMonNum)

REFERENCES MONARCH(MonName,MonNum) )

SQL for the 1:1 (revises Watson, p. 143)

Page 21: Database Management Fall 2003 The one-to-one and recursive relationships

A wrinkle: referential integrity complicates the initial data entry. So…

ALTER TABLE MONARCHNOCHECKCONSTRAINT FK_Predecessor,FK_Successor

 

INSERT INTO MONARCHVALUES('Victoria','I','Queen',

‘6/20/1837','William','IV','Edward','VII')

. . . [INSERT statements for the other records] 

ALTER TABLE MONARCHCHECKCONSTRAINT FK_Predecessor,FK_Successor

(Note: a similar thing must be done in entering the DEPT and EMP data in the earlier example. See SQL Server Exercise #4.)

Page 22: Database Management Fall 2003 The one-to-one and recursive relationships

Querying a 1:1 recursive relationship

Who preceded Elizabeth II?

SELECT premonname, premonnum FROM monarch

WHERE monname = 'Elizabeth' and MONNUM = 'II';

premonname premonnum

George VI

Page 23: Database Management Fall 2003 The one-to-one and recursive relationships

Querying a 1:1 recursive relationship

Was Elizabeth II's predecessor a king or queen?

SELECT pre.montype FROM monarch cur, monarch pre

WHERE cur.premonname = pre.monname

AND cur.premonnum = pre.monnum

AND cur.monname = 'Elizabeth'

AND cur.monnum = 'II';

montype

King

Page 24: Database Management Fall 2003 The one-to-one and recursive relationships

Querying a 1:1 recursive relationship

List the kings and queens of England in ascending chronological order.

SELECT montype, monname, monnum, rgnbeg

FROM monarch ORDER BY rgnbeg;

montype monname monnum rgnbeg

Queen Victoria I 1837-06-20

King Edward VII 1901-01-22

King George V 1910-05-06

King Edward VIII 1936-01-20

King George VI 1936-12-11

Queen Elizabeth II 1952-02-06

Page 25: Database Management Fall 2003 The one-to-one and recursive relationships

The m:m recursive relationship …

See Watson, p. 146

P R O D U C T

P ro d IDP ro d D es cP ro d C o s tP ro d P ric e

isc o m p o s ed

o f

m ayap p earin

P R O D U C T

P ro d IDP ro d D es cP ro d C o s tP ro d P ric e

A S S EM B LY

P ro d ID (F K )S ub P ro d ID (F K )Q uantity

• Bill of materials (bom) problem• A product can appear as part of

many other products and can be made up of many products

Page 26: Database Management Fall 2003 The one-to-one and recursive relationships

Mapping an m:m recursive relationshipproduct

prodid proddesc prodcost prodprice

1000 Animal photography kit 725

101 35mm camera 150 300

102 Camera case 10 15

103 70-210 zoom lens 125 200

104 28-85 zoom lens 115 185

105 Photographer’s vest 25 40

106 Lens cleaning cloth 1 1.25

107 Tripod 35 45

108 24 exposure, 100 ASA, 35mm color negative film .85 1

assembly

quantity prodid subprodid

1 1000 101

1 1000 102

1 1000 103

1 1000 104

1 1000 105

2 1000 106

1 1000 107

10 1000 108

Page 27: Database Management Fall 2003 The one-to-one and recursive relationships

The SQL… (revises Watson, p. 147)

CREATE TABLE product (PRODID INT NOT NULL,PRODDESC VARCHAR(30),PRODCOST DECIMAL(9,2),PRODPRICE DECIMAL(9,2),PRIMARY KEY(prodid));

CREATE TABLE ASSEMBLY(QUANTITY INT NOT NULL, PRODID INT NOT NULL, SUBPRODID INT NOT NULL, PRIMARY KEY(PRODID,SUBPRODID),CONSTRAINT FK_MainProduct

FOREIGN KEY(PRODID) REFERENCES PRODUCT,

CONSTRAINT FK_SubProductFOREIGN KEY(SUBPRODID)

REFERENCES PRODUCT(PRODID) )

Page 28: Database Management Fall 2003 The one-to-one and recursive relationships

Querying an m:m recursive relationship

List the product identifier of each component of the animal photography kit.

SELECT subprodid FROM product, assembly

WHERE proddesc = 'Animal photography kit'

AND product.prodid = assembly.prodid;

subprodid

101

106

107

105

104

103

102

108

Page 29: Database Management Fall 2003 The one-to-one and recursive relationships

Querying an m:m recursive relationship

List the product description and cost of each component of the animal photography kit.

SELECT proddesc, prodcost FROM product WHERE prodid IN (SELECT subprodid FROM product, assembly

WHERE proddesc = 'Animal photography kit' AND product.prodid = assembly.prodid);

proddesc prodcost

35mm camera 150.00

Camera case 10.00

70-210 zoom lens 125.00

28-85 zoom lens 115.00

Photographer’s vest 25.00

Lens cleaning cloth 1.00

Tripod 35.00

24 exp. 100ASA 35mm col neg 0.85