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 đồ qua
Trang 1CHƯƠ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
Trang 2 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ệ
Trang 4Cá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
Trang 5Đị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
Trang 6Phé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
Trang 7Phé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
Trang 8Kiểm tra tính kết nối không tổn thất của một phép tách
Trang 9Kiể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 AjUi, ngược lại, ta kí hiệu là bij
Bước 2: Với mỗi XY 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
Trang 10Kiể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
SA a1 a2 b13 b14SIP a1 b22 a3 a4
Trang 11Kiểm tra tính kết nối không tổn thất của một phép tách
Trang 12Kiểm tra tính kết nối không tổn thất của
Trang 13Kiểm tra tính kết nối không tổn thất của
SA a1 a2 b13 b14SIP a1 a2 a3 a4
Trang 14Kiểm tra tính kết nối không tổn thất của một phép tách
U U
U
F U
U U
U
1 2
2 1
2 1
2 1
\
\
Trang 15Kiểm tra tính kết nối không tổn thất của một phép tách
Trang 16Kiểm tra tính kết nối không tổn thất của một phép tách
Trang 17Kiể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+
=(U1, U2) là phép tách kết nối không tổn thất
Trang 18Kiểm tra tính kết nối không tổn thất của một phép tách
Trang 19Kiể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+
=(U1, U2) là phép tách kết nối không tổn thất
Trang 20Kiểm tra tính kết nối không tổn thất của một phép tách
U U
U
F U
U U
U
1 2
2 1
2 1
2 1
U U
U
F U
U U
U
1 2
2 1
2 1
2 1
\
\
Trang 21Kiể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
Trang 22Phép tách bảo toàn tập phụ thuộc hàm
F
1
Trang 23Phép tách bảo toàn tập phụ thuộc hàm
Phép tách có bảo toàn tập phụ thuộc hàm F không?
Trang 24Phép tách bảo toàn phụ thuộc
Trang 25Cá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
Trang 26Bổ đề
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
Trang 27Bà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
Trang 28Thuậ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
Trang 29Ví 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?
Trang 30Ví 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
Trang 31Ví dụ
Phép tách U=CTHRSG
F={C T, HR C, HT R, CS G, HS R } Khóa HS
Trang 32Ví dụ
Phép tách U=CTHRSG
F={C T, HR C, HT R, CS G , HS R } Khóa HS
Trang 33Ví dụ
Phép tách U=CTHRSG
F={C T, HR C, HT R, CS G, HS R } Khóa HS
CS G
Trang 34Ví dụ
Phép tách U=CTHRSG
F={C T, HR C, HT R, CS G, HS R } Khóa HS
CS G
Trang 35Ví dụ
Phép tách U=CTHRSG
F={C T, HR C, HT R, CS G, HS R } Khóa HS
CS G
C T
Trang 36Ví dụ
Phép tách U=CTHRSG
F={C T, HR C, HT R, CS G, HS R } Khóa HS
CS G
C T
Trang 37Ví dụ
Phép tách U=CTHRSG
F={C T, HR C, HT R, CS G, HS R } Khóa HS
Trang 38Ví dụ
Phép tách
U=CTHRSG F={C T, HR C, HT R, CS G, HS R } Khóa HS
Trang 39Cá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
Trang 40Bà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
Trang 41Thuậ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
Trang 42Ví 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
Trang 43Ví 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
Trang 44F 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
Trang 45- 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
Trang 46Phé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
Trang 47 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ệ
Trang 48Mô 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í
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
Trang 49Biểu đồ thực thể liên kết
Địa chỉ Huyện
Bậc lương Lương
Ngày sinh
Giới tính
PHÒNG
Mã phòng
Tên phòng Địa
PHỤ THUỘC
Họ tên
Ngày sinh
Giới tính
Quan
hệ
LÀM VIỆC CHO
PHỤ THUỘC VÀO
HƯỚNG DẪN
ĐIỀU HÀNH
QUẢN LÍ
Ngày bổ nhiệm
THAM GIA
Trang 50Bướ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 đồ
Trang 51Ví dụ
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)
Địa chỉ Huyện
Đường phố
Bậc lương Lương
Ngày sinh
Giới tính
Trang 52Ví dụ
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 )
Địa chỉ Huyện
Đường phố
Bậc lương Lương
Ngày sinh
Giới tính
Trang 53Bướ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 đồ
Trang 54Ví dụ
PHỤ_THUỘC(Mã_nhân_viên, Họ_tên , Ngày_sinh, Giới_tính,
Quan_hệ )
Địa chỉ Huyện
Bậc lương Lương
Ngày sinh
Giới tính
PHỤ THUỘC
Họ tên
Ngày sinh
Giới tính
Quan
hệ
PHỤ THUỘC VÀO
Trang 55Bướ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
Trang 56điểm
Trang 57Bướ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)
hợp) của kiểu liên kết -> các thuộc tính của S
Trang 58Ví dụ
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ỉ)
Địa chỉ Huyện
Bậc lương Lương
Ngày sinh
Giới tính
PHÒNG
Mã phòng
Tên phòng Địa
điểm
QUẢN LÍ
Ngày bổ nhiệm
1
1
Trang 59Bướ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
hợp) của kiểu liên kết -> các thuộc tính của S
Trang 60Ví dụ
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 )
Địa chỉ Huyện
Bậc lương Lương
Ngày sinh
Giới tính
PHÒNG
Mã phòng
Tên phòng Địa
điểm
LÀM VIỆC CHO
Trang 61Bướ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
kiểu liên kết -> Các thuộc tính của của lược đồ mới
Trang 62Ví dụ
THAM_GIA(Mã_nhân_viên, Mã_dự_án, Số_giờ)
Địa chỉ Huyện
Bậc lương Lương
Ngày sinh
Giới tính
THAM GIA
Số giờ
Trang 63Cá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
Trang 64Chuyể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
Trang 65Ví 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í
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
Trang 66Bước 1 Xây dựng biểu đồ ER
Địa chỉ Huyện
Bậc lương Lương
Ngày sinh
Giới tính
PHÒNG
Mã phòng
Tên phòng Địa
PHỤ THUỘC
Họ tên
Ngày sinh
Giới tính
Quan
hệ
LÀM VIỆC CHO
PHỤ THUỘC VÀO
HƯỚNG DẪN
ĐIỀU HÀNH
QUẢN LÍ
Ngày bổ nhiệm
THAM GIA
Trang 67Bướ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ờ)
Trang 68Bướ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