You are on page 1of 75

CHƢƠN V.

THIẾT KẾ CƠ SỞ DỮ LIỆU QUAN HỆ


Ở MỨC KHÁI NIỆM

TS. Nguyễn Thị Kim Ngân


Nội dung
 Dư thừa và dị thường dữ liệu
 Phụ thuộc hàm
 Hệ tiên đề Armstrong
 Bao đóng của tập thuộc tính
 Phủ của một tập PTH
 Xác định khóa của lược đồ quan hệ
 Chuẩn hóa lược đồ quan hệ
 Các phép tách lược đồ quan hệ
 Chuyển đổi mô hình thực thể liên kết sang mô hình quan hệ
Các phép tách lược đồ quan hệ
 Định nghĩa phép tách lược đồ quan hệ
 Phép tách kết nối không tổn thất về BCNF
 Phép tách bảo toàn phụ thuộc về 3NF
Các phép tách lược đồ quan hệ
 Định nghĩa phép tách lược đồ quan hệ
 Phép tách kết nối không tổn thất về chuẩn BCNF
 Phép tách bảo toàn phụ thuộc về chuẩn 3NF
Định nghĩa phép tách lược đồ quan hệ
Cho lược đồ quan hệ R=<U, F>
U1, U2, …, Uk là các tập con của U sao cho U1  U2 …  Uk=U
Fi= Ui(F)={{XY| XY F+, XYUi}, i=1,..,k

Phép tách lược đồ R là việc thay thế R=<U, F> bằng các lược đồ
con R1 =<U1 , F1>, R2 =<U2 , F2>, …, Rk=<Uk, Fk>

Kí hiệu phép tách: =(R1, R2, …, Rk) hoặc =(U1, U2, …, Uk)
Phép tách kết nối không tổn thất
Cho lược đồ quan hệ R=<U, F>
r là một quan hệ bất kỳ trên R thỏa mãn F
U1, U2, …, Uk là các tập con của U sao cho U=U1  U2 …  Uk
Fi= Ui(F)={XY| XY F+, XYUi}, i=1,..,k
Ri=<Ui,Fi>, i=1,..,k
ri=Ui(r), i=1,..,k

Phép tách R thành {R1, R2, …, Rk} được gọi là tách kết nối không
tổn thất (Lossless Join Decomposition) đối với tập phụ thuộc hàm
F nếu r=r1 * r2 *…* rk
Phép tách kết nối không tổn thất
Bổ đề
Cho, R=<U,F> là một lược đồ quan hệ,
r là một quan hệ trên R thỏa F
U1, U2, …, Uk là các tập con của U sao cho U=U1  U2 …  Uk
Fi= Ui(F)={XY| XY F+, XYUi}, i=1,..,k
Ri=<Ui,Fi>, i=1,..,k
=(R1, R2, …, Rk) là một phép tách của R
ri=Ui(r), i=1,..,k
m(r)=r1 * r2 *…* rk
Khi đó i) r m(r)
ii) Nếu s=m(r) thì Ui(s)=ri, i=1,..,k
iii) m(m(r))=m(r)
Kiểm tra tính kết nối không tổn thất của
một phép tách
Bài toán
Cho lược đồ R <U, F>, trong đó, U={A1, A2, …, An} là tập các thuộc
tính, F là tập các phụ thuộc hàm,
U1, U2, …, Uk là các tập con của U sao cho U1  U2 …  Uk=U

Kiểm tra phép tách =(U1, U2, …, Uk) có phải là phép tách kết nối
không tổn thất hay không?
Kiểm tra tính kết nối không tổn thất của
một phép tách
Thuật toán
Vào: U={A1, A2, …, An}, F, =(U1, U2, …, Uk)
Ra: Kết luận  có phải là phép tách kết nối không tổn thất hay không?
Phƣơng pháp:
Bước 1: Lập bảng kxn,
Tại dòng i, cột j ta kí hiệu là aj nếu AjUi, ngược lại, ta kí hiệu là bij
Bước 2: Với mỗi XY  F, xét các dòng có kí hiệu bằng nhau trên tập X. Các dòng này sẽ
được thay đổi kí hiệu để chúng mang giá trị bằng nhau trên tập Y, theo quy tắc:
- Nếu tồn tại một kí hiệu có dạng aj thì các kí hiệu còn lại được đổi thành aj
- Nếu không có giá trị nào có dạng aj thì lấy tùy ý một ký hiệu bij để làm bằng
Bước 2 được lặp lại cho đến khi không có thay đổi nào trên bảng nữa
Nếu tại bước kết thúc, bảng có một dòng gồm toàn ký hiệu dạng aj thì  là phép tách kết nối
không tổn thất, ngược lại  là phép tách kết nối tổn thất
Kiểm tra tính kết nối không tổn thất của
một phép tách
Ví dụ
Cho R=<U, F>, trong đó U={S, A, I, P} và F={SA, SI  P}
Kiểm tra =(SA, SIP) có là phép tách không tổn thất hay không?

Bảng khởi tạo


S A I P

SA a1 a2 b13 b14

SIP a1 b22 a3 a4
Kiểm tra tính kết nối không tổn thất của
một phép tách
Ví dụ 1:
Cho U={S, A, I, P} và F={SA, SI  P}
Kiểm tra =(SA, SIP) có là phép tách không tổn thất hay không?

Xét SA
S A I P S A I P

SA a1 a2 b13 b14  SA a1 a2 b13 b14

SIP a1 b22 a3 a4 SIP a1 a2 a3 a4


Kiểm tra tính kết nối không tổn thất của
một phép tách
Ví dụ 1:
Cho U={S, A, I, P} và F={SA, SI  P}
Kiểm tra =(SA, SIP) có là phép tách không tổn thất hay không?

Xét SI  P
S A I P S A I P S A I P

SA a1 a2 b13 b14  SA a1 a2 b13 b14  SA a1 a2 b13 b14

SIP a1 b22 a3 a4 SIP a1 a2 a3 a4 SIP a1 a2 a3 a4


Kiểm tra tính kết nối không tổn thất của
một phép tách
Ví dụ 1:
Cho U={S, A, I, P} và F={SA, SI  P}
Kiểm tra =(SA, SIP) có là phép tách không tổn thất hay không?

Xét SI  P
S A I P S A I P S A I P

SA a1 a2 b13 b14  SA a1 a2 b13 b14  SA a1 a2 b13 b14

SIP a1 b22 a3 a4 SIP a1 a2 a3 a4 SIP a1 a2 a3 a4

=(SA, SIP) là phép tách kết nối không tổn thất


Kiểm tra tính kết nối không tổn thất của
một phép tách
Định lý
Giả sử =(U1, U2) là một phép tách của lược đồ quan hệ R=<U,F>.
Khi đó,  là phép tách kết nối không tổn thất
U1  U 2   U1 \ U 2   F 

 U1  U 2   U 2 \ U1  F 
Kiểm tra tính kết nối không tổn thất của
một phép tách
Chứng minh định lý
Giả sử U={A1, A2, …, Ai-1, Ai …, Aj, Aj+1…, An}
U1={A1, A2, …, Ai-1, Ai …, Aj}
U2={Ai , …, Aj,Aj+1 …, An}
Bảng khởi tạo
A1 A2 … Ai-1 Ai … Aj Aj+1 … An

U 1 a1 a2 … ai-1 ai … aj b1j+1 … b1n

U2 b21 b22 … bi-1 ai … aj aj+1 … an


Kiểm tra tính kết nối không tổn thất của
một phép tách
Chứng minh định lý
Giả sử U={A1, A2, …, Ai-1, Ai …, Aj, Aj+1…, An}
U1={A1, A2, …, Ai-1, Ai …, Aj}
U2={Ai , …, Aj,Aj+1 …, An}
Nếu U1U2 U1\U2 F+ => Ai, Ai+1 …, Aj A1, A2, …, Ai-1 F+
A1 A2 … Ai-1 Ai … Aj Aj+1 … An A1 A2 … Ai-1 Ai … Aj Aj+1 … An

U 1 a1 a2 … ai-1 ai … aj b1j+1 … b1n  U1 a1 a2 … ai-1 ai … aj b1j+1 … b1n

U2 b21 b22 … bi-1 ai … aj aj+1 … an U 2 a1 a2 … ai-1 ai … aj aj+1 … an


Kiểm tra tính kết nối không tổn thất của
một phép tách
Chứng minh định lý
Giả sử U={A1, A2, …, Ai-1, Ai …, Aj, Aj+1…, An}
U1={A1, A2, …, Ai-1, Ai …, Aj}
U2={Ai , …, Aj,Aj+1 …, An}
Nếu U1U2 U1\U2 F+ => Ai, Ai+1 …, Aj A1, A2, …, Ai-1 F+
A1 A2 … Ai-1 Ai … Aj Aj+1 … An A1 A2 … Ai-1 Ai … Aj Aj+1 … An

U 1 a1 a2 … ai-1 ai … aj b1j+1 … b1n  U1 a1 a2 … ai-1 ai … aj b1j+1 … b1n

U2 b21 b22 … bi-1 ai … aj aj+1 … an U 2 a1 a2 … ai-1 ai … aj aj+1 … an

=(U1, U2) là phép tách kết nối không tổn thất


Kiểm tra tính kết nối không tổn thất của
một phép tách
Chứng minh định lý
Giả sử U={A1, A2, …, Ai-1, Ai …, Aj, Aj+1…, An}
U1={A1, A2, …, Ai-1, Ai …, Aj}
U2={Ai , …, Aj,Aj+1 …, An}
Nếu U1U2 U2\U1 F+ => Ai, Ai+1 …, Aj Aj+1,…, Ai-1 F+
A1 A2 … Ai-1 Ai … Aj Aj+1 … An A1 A2 … Ai-1 Ai … Aj Aj+1 … An

U 1 a1 a2 … ai-1 ai … aj b1j+1 … b1n  U1 a1 a2 … ai-1 ai … aj aj+1 … an

U2 b21 b22 … bi-1 ai … aj aj+1 … an U2 b21 b22 … bi-1 ai … aj aj+1 … an


Kiểm tra tính kết nối không tổn thất của
một phép tách
Chứng minh định lý
Giả sử U={A1, A2, …, Ai-1, Ai …, Aj, Aj+1…, An}
U1={A1, A2, …, Ai-1, Ai …, Aj}
U2={Ai , …, Aj,Aj+1 …, An}
Nếu U1U2 U2\U1 F+ => Ai, Ai+1 …, Aj Aj+1,…, Ai-1 F+
A1 A2 … Ai-1 Ai … Aj Aj+1 … An A1 A2 … Ai-1 Ai … Aj Aj+1 … An

U 1 a1 a2 … ai-1 ai … aj b1j+1 … b1n  U1 a1 a2 … ai-1 ai … aj aj+1 … an

U2 b21 b22 … bi-1 ai … aj aj+1 … an U2 b21 b22 … bi-1 ai … aj aj+1 … an

=(U1, U2) là phép tách kết nối không tổn thất


Kiểm tra tính kết nối không tổn thất của
một phép tách
Định lý
Giả sử =(U1, U2) là một phép tách của lược đồ quan hệ R=<U,F>.
Khi đó,  là phép tách kết nối không tổn thất
U1  U 2   U1 \ U 2   F 

U1  U 2   U 2 \ U1   F

U1  U 2   U1 \ U 2   F 
=>  là phép tách kết nối tổn thất  
U1  U 2   U 2 \ U1   F 
Kiểm tra tính kết nối không tổn thất của
một phép tách
Ví dụ
Cho R=<U,F>, trong đó U={S, A, I, P} và F={SA, SI  P}
Kiểm tra =(SA, SIP) có là phép tách không tổn thất hay không?

Đặt U1={S,A}, U2={S,I,P}


Ta có U1U2 U1\U2  S A
Vì S A  F+ nên =(SA, SIP) là phép tách không tổn thất
Phép tách bảo toàn tập phụ thuộc hàm
Cho R=<U, F>
U1, U2, …, Uk là các tập con của U sao cho U=U1  U2 …  Uk
Fi=Ui(F)={XY| XY F+, XYUi}, i=1,..,k
Ri=<Ui,Fi>, i=1,..,k

Phép tách  =(R1, R2, …, Rk k) được gọi là phép tách bảo toàn tập
phụ thuộc hàm F nếu  Fi phủ F
i 1

Chúng ta có thể viết phép tách  =(U1, U2, …, Uk)


Phép tách bảo toàn tập phụ thuộc hàm
Ví dụ 1. Cho R=<ABCD, {AB, CD}>, =(AB, CD)
Phép tách  có bảo toàn tập phụ thuộc hàm F không?

Đặt F={AB, CD}, U1=AB, U2=CD

F1= U1(F)= AB(AB,CD)={AB}


F2= U2(F)= CD(AB,CD)={CD}
=> F1  F2 = {AB, CD} = F
=> F1  F2 phủ F
=> =(AB, CD) là phép tách bảo toàn tập phụ thuộc hàm F
Phép tách bảo toàn phụ thuộc
Ví dụ 2. Cho R= <CSZ, {CS  Z, Z  C}>, =(CS,CZ)
Phép tách  có bảo toàn tập phụ thuộc hàm F không?

Đặt F={CS  Z, Z  C}, U1=CS, U2=CZ


F1= U1(F)=CS(CS  Z, Z  C)=
F2= U2(F)= CZ(CS  Z, Z  C)={Z  C}
=> F1  F2 = {Z  C}
Ta có CS  Z  F
CS+(F1F2)=CS => Z CS+(F1F2) => CS  Z ∉ (F1  F2)+
=> F1  F2 không phủ F
=> =(CS, CZ) là phép tách không bảo toàn phụ thuộc
Các phép tách lược đồ quan hệ
 Định nghĩa phép tách lược đồ quan hệ
 Phép tách kết nối không tổn thất về chuẩn BCNF
 Phép tách bảo toàn phụ thuộc về chuẩn 3NF
Bổ đề
Cho lược đồ quan hệ R=<U, F>
U1, U2, …, Uk là các tập con của U sao cho U1  U2 …  Uk =U
Fi= Ui(F)={XY| XY F+, XYUi}, i=1,..,k
Ri=<Ui,Fi>, i=1,..,k
=(R1, R2, …, Rk) là một phép tách của R
i) Nếu =( S1, S2, …, Sm) là một phép tách của Ri,  và  là các phép tách kết
nối không tổn thất, thì =( R1, R2, …, Ri-1, S1, S2, …, Sm, Ri+1,…, Rk) là phép
tách kết nối không tổn thất
ii)Nếu  là phép kết nối không tổn thất và Rk+1=Rk+2=…=Rm=R, thì  =( R1, R2,
…, Rk, Rk+1, Rk+2, …, Rm) là phép tách kết nối không tổn thất
Bài toán
Cho lược đồ R=<U, F>. Hãy tách lược đồ R thành các lược đồ con
ở dạng chuẩn BCNF và đảm bảo tính kết nối không tổn thất
Thuật toán
Vào: R=<U, F>
Ra: =( R1, R2, …, Rk) là phép tách kết nối không tổn thất,
sao cho Ri  BCNF, i=1, …, k.
Phương pháp
Bước 1: =(R)
Bước 2: Nếu mọi lược đồ trong  đều thuộc BCNF thì chuyển sang bước 3.
Ngược lại, tìm lược đồ S=<US, FS> trong  mà S ∉ BCNF. Chọn một phụ thuộc
hàm XA FS, X không phải là khóa của S, và A ∉X, thay thế S bởi hai lược
đồ XA và US\{A} với các tập phụ thuộc hàm tương ứng. Qay trở lại bước 2
Bước 3: Kết thúc
Ví dụ
Bài toán
Cho lược đồ R=<CTHRSG, {CT, HR  C, HT  R, CS  G, HS  R}>
Tìm phép tách kết nối không tổn thất của R thành những lược đồ BCNF?
Ví dụ
R có thuộc BCNF không?
R=<CTHRSG, {CT, HR  C, HT  R, CS  G, HS  R}>
Đặt U= CTHRSG
F={CT, HR  C, HT  R, CS  G, HS  R}

Khóa của R là HS
Vì CT  F và HS  C, nên R ∉ BCNF
Ví dụ
Phép tách U=CTHRSG
F={CT, HR  C, HT  R, CS  G, HS  R }
Khóa HS
Ví dụ
Phép tách U=CTHRSG
F={CT, HR  C, HT  R, CS  G, HS  R }
Khóa HS
Ví dụ
Phép tách U=CTHRSG
F={CT, HR  C, HT  R, CS  G, HS  R }
Khóa HS

CS  G

U1=CSG V1=CTHRS
F1={CS  G} FV1={ C  T, HR  C, HT  R, HS  R}
Khóa CS Khóa HS
Ví dụ
Phép tách U=CTHRSG
F={CT, HR  C, HT  R, CS  G, HS  R }
Khóa HS

CS  G

U1=CSG V1=CTHRS
F1={CS  G} FV1={ C  T, HR  C, HT  R, HS  R}
Khóa CS Khóa HS
Ví dụ
Phép tách U=CTHRSG
F={CT, HR  C, HT  R, CS  G, HS  R }
Khóa HS

CS  G

U1=CSG V1=CTHRS
F1={CS  G} FV1={ C  T, HR  C, HT  R, HS  R}
Khóa CS Khóa HS
CT
U2=CT V2=CHRS
F2={C→T} FV2={HR  C, HC  R, HS  R}
Khoá C Khoá HS
Ví dụ
Phép tách U=CTHRSG
F={CT, HR  C, HT  R, CS  G, HS  R }
Khóa HS

CS  G

U1=CSG V1=CTHRS
F1={CS  G} FV1={ C  T, HR  C, HT  R, HS  R}
Khóa CS Khóa HS
CT
U2=CT V2=CHRS
F2={C→T} FV2={HR  C, HC  R, HS  R}
Khoá C Khoá HS
Ví dụ
Phép tách U=CTHRSG
F={CT, HR  C, HT  R, CS  G, HS  R }
Khóa HS

CS  G

U1=CSG V1=CTHRS
F1={CS  G} FV1={ C  T, HR  C, HT  R, HS  R}
Khóa CS Khóa HS
CT
U2=CT V2=CHRS
F2={C→T} FV2={HR  C, HC  R, HS  R}
Khoá C Khoá HS
HC  R
U3=HRC U4=CHS
F3={HR  C, HC  R} F4={HS→C}
Khoá HC hoặc HR Khoá HS
Ví dụ
Phép tách U=CTHRSG
F={CT, HR  C, HT  R, CS  G, HS  R }
=(U1,U2,U3,U4) Khóa HS

CS  G

U1=CSG V1=CTHRS
F1={CS  G} FV1={ C  T, HR  C, HT  R, HS  R}
Khóa CS Khóa HS
CT
U2=CT V2=CHRS
F2={C→T} FV2={HR  C, HC  R, HS  R}
Khoá C Khoá HS
HC  R
U3=HRC U4=CHS
F3={HR  C, HC  R} F4={HS→C}
Khoá HC hoặc HR Khoá HS
Các phép tách lược đồ quan hệ
 Định nghĩa phép tách lược đồ quan hệ
 Phép tách kết nối không tổn thất về chuẩn BCNF
 Phép tách bảo toàn tập phụ thuộc hàm về chuẩn 3NF
Bài toán
Cho lược đồ R=<U, F>. Hãy tách lược đồ R thành các lược đồ con
ở dạng chuẩn 3NF và bảo toàn tập phụ thuộc hàm F
Thuật toán
Đầu vào: R=<U, F>, F tối tiểu
Đầu ra: =(R1, R2, …, Rk) là phép tách bảo toàn tập phụ thuộc hàm F và Ri 
3NF, i=1,…,k
Phương pháp:
- Nếu có những thuộc tính không xuất hiện trong bất kỳ một phụ thuộc hàm
nào của F, ở cả vế trái lẫn vế phải, thì ta xác định 1 lược đồ quan hệ gồm
những thuộc tính này và xoá chúng ra khỏi U
- Nếu 1 trong các phụ thuộc hàm của F chứa toàn thể các thuộc tính của U thì
phép tách chỉ gồm R
- Trường hợp còn lại, phép tách gồm các lược đồ tương ứng với tập thuộc tính
có dạng XA, với X→A F. Tuy nhiên, nếu trong F gồm các thuộc tính X→A1 ,
X→A2 , …, X→Am thì thay cho các lược đồ với tập thuộc tính có dạng XAi, ta
sử dụng lược đồ với tập thuộc tính: XA1 A2 …Am
Ví dụ
Bài toán
Cho R=<CTHRSG, {C→T, HR→C, HT→R, CS→G, HS→R}>.
Tìm phép tách bảo toàn phụ thuộc thành 3NF của R
Ví dụ
R có thuộc 3NF không?
R=<CTHRSG, {C→T, HR→C, HT→R, CS→G, HS→R}>
Đặt U= CTHRSG
F={CT, HR  C, HT  R, CS  G, HS  R}

Khóa của R là HS
Các thuộc tính không khóa: C,T,R,G
Vì HS → C  F+(do HS là khóa của R) và C →T  F
=> T phụ thuộc hàm bắc cầu vào khóa HS
=> R không thuộc 3NF
Ví dụ
F đã là tập phụ thuộc hàm tối thiểu chƣa?
R=<U, F>
U= CTHRSG
F={CT, HR  C, HT  R, CS  G, HS  R}

F thỏa mãn các điều kiện sau:


i) Vế phải của mỗi phụ thuộc hàm chỉ có 1 thuộc tính
ii) Không có phụ thuộc hàm dư thừa
iii) Không có thuộc tính dư thừa ở vế trái của bất kỳ phụ thuộc hàm nào
=> F là tập phụ thuộc hàm tối thiểu
Ví dụ
Phép tách
R=<U, F>
U= CTHRSG
F={CT, HR  C, HT  R, CS  G, HS  R}
- Không có thuộc tính nào trong U mà không xuất hiện trong bất kỳ một phụ
thuộc hàm nào của F
- Không có phụ thuộc hàm nào chứa toàn thể các thuộc tính trong U

- Mỗi phụ thuộc hàm trong F có thể tách thành một lược đồ như sau:

R1=<CT, {C→T}> R3=<HTR, {HT→R}> R5=<HSR, {HS→R}>


R2=<HRC, {HR→C}> R4=<CSG, {CS→G}>
=(R1,R2,R3,R4,R5) là một phép tách bảo toàn phụ thuộc thành 3NF của R
Phép tách kết nối không tổn thất và bảo
toàn phụ thuộc thành các lược đồ 3NF
Định lý
Cho lược đồ R=<U, F>
=(R1, R2, …, Rk) là một phép tách bảo toàn phụ thuộc thành
các lược đồ thuộc 3NF của R
K là một khóa của R
Khi đó phép tách =(R1, R2, …, Rk,K) thỏa mãn:
i) Là phép tách bảo toàn thông tin
ii) Là phép tách bảo toàn tập F
iii) Các lược đồ con trong  đều thuộc 3NF
Nội dung
 Dư thừa và dị thường dữ liệu
 Phụ thuộc hàm
 Hệ tiên đề Armstrong
 Bao đóng của tập thuộc tính
 Phủ của một tập PTH
 Xác định khóa của lược đồ quan hệ
 Chuẩn hóa lược đồ quan hệ
 Các phép tách lược đồ quan hệ
 Chuyển đổi mô hình thực thể liên kết sang mô hình quan hệ
Mô tả bài toán quản lý
Một công ti cần thiết kế CSDL để quản lý các thông tin sau:
1. Các phòng: Mỗi phòng có 1 tên duy nhất, 1 mã số duy nhất, 1 trưởng phòng và có thể có nhiều
địa điểm. Ngày mà nhân viên được bổ nhiệm làm trưởng phòng được lưu trữ
2. Các dự án: Mỗi dự án có 1 mã số duy nhất, 1 tên duy nhất và 1 địa điểm. Một phòng quản lí
một số dự án
3. Các nhân viên: Mỗi nhân viên cần lưu các thông tin: mã nhân viên, họ tên, ngày sinh, giới tính,
bậc lương, lương, địa chỉ (phân chia thành số nhà, đường phố, xã, huyện, tỉnh). Mỗi nhân viên
có 1 mã nhân viên duy nhất, phân biệt với các nhân viên khác. Một nhân viên thuộc vào một
phòng nào đó, và có thể tham gia nhiều dự án (không bắt buộc các dự án này phải thuộc
phòng làm việc của nhân viên). Số giờ làm việc của mỗi nhân viên cho mỗi dự án được lưu
trữ. Một nhân viên có thể là người hướng dẫn công việc cho một số nhân viên khác
4. Các người phụ thuộc: Những người phụ thuộc của mỗi nhân viên gồm: con, vợ/chồng, bố, mẹ.
Thông tin về người phụ thuộc gồm: họ tên, gới tính, ngày sinh và mối quan hệ với nhân viên
Biểu đồ thực thể liên kết
Mã nhân Giới
tính Ngày bổ
viên
Ngày nhiệm
Tên
sinh Bậc Lương phòng
Họ tên lương Địa
1 1 Mã phòng điểm
QUẢN LÍ
Đường
phố NHÂN VIÊN
Số nhà
Xã N LÀM VIỆC 1 PHÒNG
hd tt CHO
M 1
Huyện THAM
Địa chỉ N ĐIỀU
1 N 1 GIA
HƯỚNG HÀNH
PHỤ
Tỉnh DẪN N
THUỘC Số giờ
VÀO
N DỰ ÁN
PHỤ THUỘC Quan
hệ Địa
Mã dự án
Giới điểm
Họ tên Tên dự
Ngày tính
sinh án
Bước 1. Chuyển kiểu thực thể thành
lược đồ quan hệ
 Mỗi thực thể trong biểu đồ ER chuyển thành một lược đồ quan
hệ. Nguyên tắc:
 Các thuộc tính đơn của thực thể -> các thuộc tính của lược đồ
 Các thuộc tính phức hợp thì chỉ lấy thành phần đơn -> các thuộc
tính của lược đồ
 Chọn một khóa của thực thể làm khóa chính của lược đồ
Ví dụ
Mã nhân Giới
viên tính
Ngày
sinh Bậc Lương
Họ tên lương

Đường
phố NHÂN VIÊN
Số nhà

Huyện Địa chỉ

Tỉnh

NHÂN_VIÊN(Mã_nhân_viên, Họ_tên, Ngày_sinh, Giới_tính,


Bậc_lương, Lương, Số_nhà, Đường_phố, Xã, Huyện, Tỉnh)
Ví dụ
Mã nhân Giới
viên tính
Ngày
sinh Bậc Lương
Họ tên lương

Đường
phố NHÂN VIÊN
Số nhà

Huyện Địa chỉ

Tỉnh

NHÂN_VIÊN(Mã_nhân_viên, Họ_tên, Ngày_sinh, Giới_tính,


Bậc_lương, Lương, Số_nhà, Đường_phố, Xã, Huyện, Tỉnh)
Bước 2. Chuyển kiểu thực thể yếu
thành lược đồ quan hệ
 Mỗi thực thể yếu trong biểu đồ ER chuyển thành một lược đồ
quan hệ. Nguyên tắc:
 Thuộc tính đơn của thực thể-> Thuộc tính của lược đồ
 Thuộc tính phức hợp thì chỉ lấy thành phần đơn -> Các thuộc tính
của lược đồ
 Khóa chính của thực thể chủ -> Khóa ngoài của lược đồ

 Tổ hợp khóa bộ phận của kiểu thực thể yếu và các khóa chính của
các kiểu thực thể chủ liên kết với nó -> Khóa chính của lược đồ
Ví dụ
Mã nhân Giới
viên tính
Ngày
sinh Bậc Lương
Họ tên lương

Đường 1 PHỤ N
phố NHÂN VIÊN THUỘC PHỤ THUỘC Quan
Số nhà VÀO hệ

Họ tên Giới
Ngày tính
sinh
Huyện Địa chỉ

Tỉnh

PHỤ_THUỘC(Mã_nhân_viên, Họ_tên, Ngày_sinh, Giới_tính,


Quan_hệ)
Bước 3. Chuyển thuộc tính đa trị thành
lược đồ quan hệ
Mỗi thuộc tính đa trị A tạo ra một lược đồ quan hệ mới R
Nguyên tắc:
 Các thuộc tính đơn (hoặc các thành phần đơn của thuộc tính phức
hợp) của A -> Các thuộc tính của R
 Các thuộc tính khóa (K) của lược đồ quan hệ hoặc kiểu liên kết có
chứa A -> Các thuộc tính của R
 Tổ hợp các thuộc tính của A và K -> Khóa chính của R
Ví dụ

Tên
phòng
Địa
Mã phòng điểm

PHÒNG

ĐỊA_ĐIỂM(Mã_phòng, địa_chỉ)
Bước 4. Chuyển kiểu liên kết cấp 2, tỉ số
liên kết 1:1 thành lược đồ quan hệ
Nguyên tắc:
 Giảsử, các lược đồ tương ứng với các thực thể tham gia vào liên
kết này là S và T. Chọn một lược đồ (S)
 Khóa chính của T -> Khóa ngoài của S
 Các thuộc tính đơn (hoặc các thành phần đơn của các thuộc tính phức
hợp) của kiểu liên kết -> các thuộc tính của S
Ví dụ
Mã nhân Giới Tên
viên tính phòng
Ngày Địa
Ngày bổ
sinh Bậc Lương Mã phòng điểm
Họ tên nhiệm
lương

Đường 1 1
phố NHÂN VIÊN QUẢN LÍ PHÒNG
Số nhà

Huyện Địa chỉ

Tỉnh
PHÒNG(Mã phòng, Tên_phòng, Mã_nhân_viên, Ngày_bổ_nhiệm)
ĐỊA_ĐIỂM(Mã_phòng, địa_chỉ)
Bước 5. Chuyển kiểu liên kết cấp 2, tỉ số
liên kết 1:N thành lược đồ quan hệ
Nguyên tắc:
 Giả sử, lược đồ quan hệ S tương ứng với thực thể tham gia ở phía
N, lược đồ quan hệ T tương ứng với thực thể tham gia ở phía 1 của
kiểu liên kết.
 Khóa chính của T -> Khóa ngoài của S
 Các thuộc tính đơn (hoặc các thành phần đơn của các thuộc tính phức
hợp) của kiểu liên kết -> các thuộc tính của S
Ví dụ
Mã nhân Giới Tên
viên tính phòng
Ngày Địa
sinh Bậc Lương Mã phòng điểm
Họ tên lương

Đường N LÀM VIỆC 1


phố NHÂN VIÊN PHÒNG
CHO
Số nhà

Huyện Địa chỉ

Tỉnh

NHÂN_VIÊN(Mã_nhân_viên, Họ_tên, Ngày_sinh, Giới_tính, Bậc_lương,


Lương, Số_nhà, Đường_phố, Xã, Huyện, Tỉnh, Mã_phòng)
Bước 6. Chuyển kiểu liên kết cấp 2, tỉ số
liên kết N:M thành lược đồ quan hệ
Nguyên tắc:
 Giả sử, lược đồ quan hệ S tương ứng với thực thể tham gia ở phía
N, lược đồ quan hệ T tương ứng với thực thể tham gia ở phía M
của kiểu liên kết.
 Khóa chính của S và T -> Khóa ngoài của lược đồ mới
 Các thuộc tính đơn (các thành phần đơn của các thuộc tính phức hợp) của
kiểu liên kết -> Các thuộc tính của của lược đồ mới
 Hợp của khóa chính của S và T -> Khóa chính của lược đồ mới
Ví dụ
Mã nhân Giới
viên tính
Ngày
sinh Bậc Lương
Họ tên lương

Đường M N
NHÂN VIÊN THAM DỰ ÁN
phố
GIA
Số nhà

Số giờ Địa
Mã dự án
điểm
Huyện Địa chỉ Tên dự
án
Tỉnh

THAM_GIA(Mã_nhân_viên, Mã_dự_án, Số_giờ)


Cách thiết kế các lược đồ cơ sở dữ liệu
cho một bài toán quản lí
Cách 1: Chuyển biểu đồ ER thành các lược đồ quan hệ
Cách 2: Dùng các phép tách
Chuyển biểu đồ ER thành các lược đồ
quan hệ
 Bước 1: Xây dựng biểu đồ thực thể liên kết (ER) của bài toán
quản lí
 Bước 2: ER -> Các lược đồ quan hệ.
 Bước 3: Xây dựng tập phụ thuộc hàm của mỗi lược đồ. Kiểm
tra dạng chuẩn của mỗi lược đồ. Lược đồ nào chưa thuộc
dạng chuẩn tốt thì dùng các phép tách để tách lược đồ này
thành các lược đồ con thuộc dạng chuẩn tốt
Ví dụ
Một công ti cần thiết kế CSDL để quản lý các thông tin sau:
1. Các phòng: Mỗi phòng có 1 tên duy nhất, 1 mã số duy nhất, 1 trưởng phòng và có thể có nhiều
địa điểm. Ngày mà nhân viên được bổ nhiệm làm trưởng phòng được lưu trữ
2. Các dự án: Mỗi dự án có 1 mã số duy nhất, 1 tên duy nhất và 1 địa điểm. Một phòng quản lí
một số dự án
3. Các nhân viên: Mỗi nhân viên cần lưu các thông tin: mã nhân viên, họ tên, ngày sinh, giới tính,
bậc lương, lương, địa chỉ (phân chia thành số nhà, đường phố, xã, huyện, tỉnh). Mỗi nhân viên
có 1 mã nhân viên duy nhất, phân biệt với các nhân viên khác. Một nhân viên thuộc vào một
phòng nào đó, và có thể tham gia nhiều dự án (không bắt buộc các dự án này phải thuộc
phòng làm việc của nhân viên). Số giờ làm việc của mỗi nhân viên cho mỗi dự án được lưu
trữ. Một nhân viên có thể là người hướng dẫn công việc cho một số nhân viên khác
4. Các người phụ thuộc: Những người phụ thuộc của mỗi nhân viên gồm: con, vợ/chồng, bố, mẹ.
Thông tin về người phụ thuộc gồm: họ tên, gới tính, ngày sinh và mối quan hệ với nhân viên
Bước 1. Xây dựng biểu đồ ER
Mã nhân Giới
tính Ngày bổ
viên
Ngày nhiệm
Tên
sinh Bậc Lương phòng
Họ tên lương Địa
1 1 Mã phòng điểm
QUẢN LÍ
Đường
phố NHÂN VIÊN
Số nhà
Xã N LÀM VIỆC 1 PHÒNG
hd tt CHO
M 1
Huyện THAM
Địa chỉ N ĐIỀU
1 N 1 GIA
HƯỚNG HÀNH
PHỤ
Tỉnh DẪN N
THUỘC Số giờ
VÀO
N DỰ ÁN
PHỤ THUỘC Quan
hệ Địa
Mã dự án
Giới điểm
Họ tên Tên dự
Ngày tính
sinh án
Bước 2. Xây dựng các lược đồ quan hệ
NHÂN_VIÊN(Mã_nhân_viên, Họ_tên, Ngày_sinh, Giới_tính, Bậc_lương,
Lương, Số_nhà, Đường_phố, Xã, Huyện, Tỉnh, Mã_phòng)

PHỤ_THUỘC(Mã_nhân_viên, Họ_tên, Ngày_sinh, Giới_tính, Quan_hệ)

PHÒNG(Mã phòng, Tên_phòng, Mã_nhân_viên, Ngày_bổ_nhiệm)

ĐỊA_ĐIỂM(Mã_phòng, Địa_chỉ)

DỰ_ÁN(Mã_dự_án, Tên_dự_án, Địa_điểm, Mã_phòng)

THAM_GIA(Mã_nhân_viên, Mã_dự_án, Số_giờ)


Bước 3. Kiểm tra dạng chuẩn của lược
đồ
NHÂN_VIÊN(Mã_nhân_viên, Họ_tên, Ngày_sinh, Giới_tính, Bậc_lương,
Lương, Số_nhà, Đường_phố, Xã, Huyện, Tỉnh, Mã_phòng)
F1= {Mã_nhân_viên {Họ_tên, Ngày_sinh, Giới_tính, Bậc_lương, Lương,
Số_nhà, Đường_phố, Xã, Huyện, Tỉnh, Mã_phòng}}
=>NHÂN_VIÊN  BCNF

PHỤ_THUỘC(Mã_nhân_viên, Họ_tên, Ngày_sinh, Giới_tính, Quan_hệ)


F2= {Mã_nhân_viên, Họ_tên  {Ngày_sinh, Giới_tính, Quan_hệ}}
=>PHỤ_THUỘC  BCNF
Bước 3. Kiểm tra dạng chuẩn của lược
đồ
PHÒNG(Mã phòng, Tên_phòng, Mã_nhân_viên, Ngày_bổ_nhiệm)
F3 ={Mã_phòng  {Tên_phòng, Mã_nhân_viên, Ngày_bổ_nhiệm}}
=>PHÒNG  BCNF

ĐỊA_ĐIỂM(Mã_phòng, Địa_chỉ)
F4={}
=>ĐỊA_ĐIỂM  BCNF
Bước 3. Kiểm tra dạng chuẩn của lược
đồ
DỰ_ÁN(Mã_dự_án, Tên_dự_án, Địa_điểm, Mã_phòng)
F5={Mã_dự_án  {Tên_dự_án, Địa_điểm, Mã_phòng}}
=>DỰ_ÁN  BCNF

THAM_GIA(Mã_nhân_viên, Mã_dự_án, Số_giờ)


F6={{Mã_nhân_viên, Mã_dự_án}  Số_giờ}
=>THAM_GIA  BCNF
Tập các lược đồ quan hệ của bài toán
NHÂN_VIÊN(Mã_nhân_viên, Họ_tên, Ngày_sinh, Giới_tính, Bậc_lương, Lương, Số_nhà,
Đường_phố, Xã, Huyện, Tỉnh, Mã_phòng)
F1= {Mã_nhân_viên {Họ_tên, Ngày_sinh, Giới_tính, Bậc_lương, Lương, Số_nhà,
Đường_phố, Xã, Huyện, Tỉnh, Mã_phòng}}
PHỤ_THUỘC(Mã_nhân_viên, Họ_tên, Ngày_sinh, Giới_tính, Quan_hệ)
F2= {Mã_nhân_viên, Họ_tên  {Ngày_sinh, Giới_tính, Quan_hệ}}
PHÒNG(Mã phòng, Tên_phòng, Mã_nhân_viên, Ngày_bổ_nhiệm)
F3 ={Mã_phòng  {Tên_phòng, Mã_nhân_viên, Ngày_bổ_nhiệm}}
ĐỊA_ĐIỂM(Mã_phòng, Địa_chỉ)
F4={}
DỰ_ÁN(Mã_dự_án, Tên_dự_án, Địa_điểm, Mã_phòng)
F5={Mã_dự_án  {Tên_dự_án, Địa_điểm, Mã_phòng}}
THAM_GIA(Mã_nhân_viên, Mã_dự_án, Số_giờ)
F6={{Mã_nhân_viên, Mã_dự_án}  Số_giờ}
Dùng các phép tách
 Bƣớc 1: Xây dựng lược đồ ban đầu bao gồm tất cả các thuộc
tính và tất cả các phụ thuộc hàm. Kiểm tra dạng chuẩn của
lược đồ quan hệ
 Bƣớc 2: Nếu lược đồ chưa thuộc dạng chuẩn tốt, dùng các
phép tách để tách thành các lược đồ con ở dạng chuẩn tốt
Ví dụ
Một công ti cần thiết kế CSDL để quản lý các thông tin sau:
1. Các phòng: Mỗi phòng có 1 tên duy nhất, 1 mã số duy nhất, 1 trưởng phòng và có thể có nhiều
địa điểm. Ngày mà nhân viên được bổ nhiệm làm trưởng phòng được lưu trữ
2. Các dự án: Mỗi dự án có 1 mã số duy nhất, 1 tên duy nhất và 1 địa điểm. Một phòng quản lí
một số dự án
3. Các nhân viên: Mỗi nhân viên cần lưu các thông tin: mã nhân viên, họ tên, ngày sinh, giới tính,
bậc lương, lương, địa chỉ (phân chia thành số nhà, đường phố, xã, huyện, tỉnh). Mỗi nhân viên
có 1 mã nhân viên duy nhất, phân biệt với các nhân viên khác. Một nhân viên thuộc vào một
phòng nào đó, và có thể tham gia nhiều dự án (không bắt buộc các dự án này phải thuộc
phòng làm việc của nhân viên). Số giờ làm việc của mỗi nhân viên cho mỗi dự án được lưu
trữ. Một nhân viên có thể là người hướng dẫn công việc cho một số nhân viên khác
4. Các người phụ thuộc: Những người phụ thuộc của mỗi nhân viên gồm: con, vợ/chồng, bố, mẹ.
Thông tin về người phụ thuộc gồm: họ tên, gới tính, ngày sinh và mối quan hệ với nhân viên
Bước 1
R(Mã_nhân_viên, Họ_tên_nv, Ngày_sinh, Giới_tính, Bậc_lương, Lương, Số_nhà,
Đường_phố, Xã, Huyện, Tỉnh, Họ_tên_pt, Ngày_sinh, Giới_tính, Quan_hệ, Mã phòng,
Tên_phòng, Mã_nhân_viên_tp, Ngày_bổ_nhiệm, Mã_địa_điểm, Địa_chỉ_phòng, Mã_dự_án,
Tên_dự_án, Địa_điểm, Số_giờ)

F= {Mã_nhân_viên {Họ_tên_nv, Ngày_sinh, Giới_tính, Bậc_lương, Lương, Số_nhà,


Đường_phố, Xã, Huyện, Tỉnh, Mã_phòng}, {Mã_nhân_viên, Họ_tên_pt}  {Ngày_sinh,
Giới_tính, Quan_hệ}, Mã_phòng  {Tên_phòng, Mã_nhân_viên_tp, Ngày_bổ_nhiệm},
Mã_nhân_viên_tp Mã_nhân_viên, Mã_địa_điểm  {Mã_phòng, Địa_chỉ_phòng}, Mã_dự_án
 {Tên_dự_án, Địa_điểm, Mã_phòng}, Mã_nhân_viên, Mã_dự_án}  Số_giờ}}
R  1NF
Bước 2
Dùng phép tách kết nối không tổn thất thành BCNF ta có các lược đồ

NHÂN_VIÊN(Mã_nhân_viên, Họ_tên, Ngày_sinh, Giới_tính, Bậc_lương, Lương, Số_nhà, Đường_phố,


Xã, Huyện, Tỉnh, Mã_phòng)
F1= {Mã_nhân_viên {Họ_tên, Ngày_sinh, Giới_tính, Bậc_lương, Lương, Số_nhà, Đường_phố, Xã,
Huyện, Tỉnh, Mã_phòng}}
PHỤ_THUỘC(Mã_nhân_viên, Họ_tên, Ngày_sinh, Giới_tính, Quan_hệ)
F2= {Mã_nhân_viên, Họ_tên  {Ngày_sinh, Giới_tính, Quan_hệ}}
PHÒNG(Mã phòng, Tên_phòng, Mã_nhân_viên, Ngày_bổ_nhiệm)
F3 ={Mã_phòng  {Tên_phòng, Mã_nhân_viên, Ngày_bổ_nhiệm}}
ĐỊA_ĐIỂM(Mã_phòng, Địa_chỉ)
F4={}
DỰ_ÁN(Mã_dự_án, Tên_dự_án, Địa_điểm, Mã_phòng)
F5={Mã_dự_án  {Tên_dự_án, Địa_điểm, Mã_phòng}}
THAM_GIA(Mã_nhân_viên, Mã_dự_án, Số_giờ)
F6={{Mã_nhân_viên, Mã_dự_án}  Số_giờ}

You might also like