2. Khĩa
2.2. Thuật tốn tìm khĩa
2.2.1. Thuậttốntìmmộtkhĩa
Sửdụngđồthịcĩhướngđểtìmkhĩanhưsau: Bước1:
Mỗinútcủađồthịlà tênmộtthuộctínhcủalượcđồquanhệR CungnốihaithuộctínhAvàBthểhiệnphụthuộchàmA B
Thuộc tính chỉ cĩcác mũi tênđi ra (nghĩa là chỉnằm trong vếtrái của phụ thuộc
hàm)đượcgọilànútgốc
Thuộctính chỉcĩcácmũitênđitới (nghĩalàchỉnằmtrongvếphảicủa phụthuộc
hàm)đượcgọilànútlá Bước2:
Xuấtphát từ tậpcácnútgốc (X),dựatrêntậpcácphụ thuộchàm F,tìm baođĩng
XF.
Nếu XF =Qthì X là khĩa, ngượclại bổ sung một thuộctính khơng thuộcnút lá
vàoXrồithựchiệntìmbaođĩngcủaX.Dừngkhitìmđượcmộtkhĩac ủaR.
Vídụ
Cholượcđồquan hệR(A,B,C,D,E,G,H)vàtậpphụthuộchàm F={B A,DA CE, D H,GH C,AC D}
TìmmộtkhĩacủaR.
PhânrãvếphảitacĩF={B A,DA C,DA E,D H,GH C,AC D}
Trang 82/109
Nhậnthấy từ đồthịtrên,nút B vàGlànútgốc.Khĩacủa R phảichứa thuộctí nhB hoặc
G,trongví dụnàychọnB.
BF = BA,Vì BF ≠QnênB khơnglàkhĩa.Nhậnthấy Dlàthuộctínhởvếtráic ủabaphụ
thuộchàmtrongFnênbổsungthuộctínhDvàođểxétkhĩa.
BDF =BDACEH ,vì BDF ≠ QnênBDkhơnglàkhĩa.BổsungthuộctínhG.
BDGF = BDGACEH,vì BDGF =QnênBDGlàkhĩa.
2.2.2. Thuậttốntìmtấtcảcáckhĩa
+
+ +
+ +
Tập thuộctính nguồn,kýhiệu làN, làtậpchứa nhữngthuộctính chỉxuất hiện ở vếtrái,
khơngnằmbênvếtráivàvếphảicủamọiphụthuộchàm
Tập thuộctínhtrunggian,kýhiệu làTG,là tậpchứanhữngthuộctính vừaxuất hiệnởvế
trái,vừaxuấthiệnởvếphảitrongcácphụthuộchàm
Thuậttốn
Bước1:Tính tậpnguồnN.Nếu NF =Qthìchỉcĩ1khốlàN,ngượclạiquab ước2
Bước2:Tính tậptrunggianTG.TínhtậptấtcảcáctậpconXicủatậpTG. Bước3:TìmtậpSchứamọisiêukhĩaSi:
VớimỗiXi,nếu (N∪Xi)F =Q thì Si =(N∪Xi) Bước4:Loạicácsiêukhĩakhơngtốitiểu:
∀Si,Sj∈S, nếu Si ⊂Sjthì S =S−Sj
Trang 83/109
Vídụ.Cholượcđồquan hệR(A,B,C)vàtậpphụthuộchàm F={AB C, C A}
TìmmọikhĩacủaR.
Bước1:N={B}, NF =B≠Q
Bước2:TG={AC},tậpcáctậpcontrunggianlà CTG={∅,A,C,AC}
+ + N Xi N∪Xi (N∪X i)+ (N∪Xi)+ =Q+ ? B ∅ B B Sai B A BA BAC Đúng B C BC BCA Đúng B AC BAC BAC Đúng +
Bước4:Loạicácsiêukhĩakhơngtốitiểu:
Nhậnthấyrằng BA⊂ BACnênloạisiêukhĩa BAC.Tậpcáckhĩacịnlạilà S =
{BA,BC}
Cảitiếnthuậttốn
Nhận thấy rằng ở bước3, khi xéttập một conXi, nếu (N∪Xi) =Q, khiđĩ
N ∪Xi là
một khố. Trong trường hợp này nếu xét tiếp các tập Xj:Xi⊂Xj , thì hiển nhiên
(N ∪Xj) =Q,vàcuốicùngsiêukhố N∪Xj cũngsẽbịloạiởbước4.
Hơnnữa,bướctínhtậpconđầutiênlàrỗngcũng khơngcầntính.
Do đĩ, khi tính bao đĩng của tập thuộctính, khơng tính Xi=∅và nếu (N∪
Xi) =Q,
thựchiệnloạibỏcáctính tốnchocáctrường hợp Xj:Xi⊂Xj .Khiđĩkếtthúc thuậttốn
tạibước 3, khơngcần thực hiện bước4 vì tất cảcáckhố nhận được ởbước 3 đều là tối
tiểu.
3. Ràngbuộctồnvẹn
3.1. Ràngbuộctồnvẹn–cácyếutốcủaràngbuộctồnvẹn
Trang 84/109
Trong CSDL luơn tồn tại nhiều mối liên hệ giữa các thuộc tính, các bộ, các bảng với
nhau.Cácmốiliênhệnàylànhữngđiềukiệnbấtbiếnmàtấtcảcácbộcủanhữn gquanhệ
Bước3:
cĩliên quan đềuphảithỏa mãntạimọi thờiđiểm. Nhữngđiều kiệnbấtbiếnđ ĩ đượcgọi
làràngbuộctồnvẹn.
Ràng buộc tồn vẹn (Intergrity constraint) viết tắt tiếng việt là RBTV, là một điều kiện
được định nghĩa liên quan đến một hay nhiều quan hệ khác nhau. Các mối li ên hệ ràng
buộc lànhững điều kiện bấtbiến mà mọi thể hiện của quan hệ đều phải thỏa mãn trong
mọithờiđiểm.
Trongthựctế,RBTVlàcácquytắcquảnlý trongthếgiớithực.
Mục đích của RBTV là bảo đảm tính nhất quán của dữ liệu, bảo đảm rằng dữ liệu luơn
biểudiễnđúngngữnghĩatrongthựctế.
Vídụ:vớigiaodịchchuyểntiền,thựchiệnquacácbướcsau: Tạitàikhoảncủangườigởi:trừtiền
Tạitàikhoảncủangườinhận:thêmtiền
Nếucả haiviệctrên đềuthànhcơng thìhồn tấtgiaodịch, ngượclại quay luigiao
dịch.
Qua ví dụ trên,giao dịch thựchiện trừtiền vàtăng tiềntrong tàikhoảncủang ười gởi và
người nhận, nếu khơng thì khơng thực hiện gì cả. Việc thực hiện giao dịch cầ n phải bảo
đảmtínhđúngcủadữ liệu.
MỗimộtRBTVcĩcácyếutốsau:
Bốicảnh
Bối cảnh là một hay nhiều quan hệ cần phải sử dụng để kiểm tra RBTV. Ha y nĩi cách
khác bối cảnh củaRBTV lànhữngquan hệ cĩkhảnăng bị vi phạmRBTVkhi thực hiện
cácthaotáccậpnhậtdữliệu(thêm,xĩa,sửacácbộ)
Biểudiễn:điềukiệnhaynộidung
Điềukiện được kiểmtra trênmọi thay đổicủa thểhiện củacác quan hệcơ sở. Điềukiện
của một RBTV cĩ thể được biểu diễn bằng nhiều cách khác nhau, chẳng hạn như ngơn
Khi một RBTVbị vi phạm, cĩthể xử lýbằng cách thơngbáo choNSDbiết R BTVđãbị
vi phạmnhư thế nào,hoặc từ chối thực hiện thao tác cập nhật dữ liệu và thơn g báo cho NSDbiếtthaotác cậpnhậtbịtừchối trêncácquanhệnà ovàtạicácbướcn ào. Trang 85/109 Tầmảnhhưởng
Trong quá trình phân tích thiết kế CSDL, cần thiết phải lập bảng tầm ảnh hưởng cho
RBTV nhằm xác định thời điểm cần kiểm tra RBTV, và khi kiểm tra cần kiể m tra trên
quanhệnào.
Dấu + thể hiện thao tác cĩ thể gây ra vi phạm RBTV. Trong trường hợp + (A) cho biết
thao tácsửacĩthểgâyvi phạmtrên thuộctínhA. Dấu- thểhiện thaotáckhơn g vi phạm
RBTV.
3.2. Cácloạiràngbuộctồnvẹn
Trong quá trình phân tích thiết kế CSDL, yêu cầu cần thiết là phải tìm đ ược những
TênRBTV Thêm Xĩa Sửa
R1 + - +(A)
R2 + - +(B)
… … … …
Rn - - +
BảngtầmảnhhưởngcủamộtRBTVcĩdạngsau:
RBTV tiềm ẩn trong CSDL. Việc phân loại RBTV cho phép người phân tích tìm kiếm
đầy đủ,tránh bỏsĩtnhững RBTV.Các loại RBTVđược phân thànhhaidạng chínhnhư
sau:
RBTVcĩbốicảnhlàmộtquanhệ RBTVcĩbốicảnhlànhiềuquan hệ
3.2.1. Ràngbuộctồnvẹncĩbốicảnhlàmộtquanhệ
RBTV cĩ bối cảnh là một quan hệ được chia thành ba loại: RBTV miền giá trị, RBTV
liênbộvàRBTVliênthuộctính
3.2.1.1. Ràngbuộctồnvẹnmiềngiátrị
Quyđịnhrõvềmiềngiátrịcủamộtthuộctính.
Vídụ.Thờigianphâncơngthamgiađềáncủamộtnhânviênkhơngquá40h/t uần
Bốicảnh:quan hệPHANCONG
Trang 86/109
Biểudiễn: ∀pc∈PHANCONG(pc.ThoiGian≤ 40)
Vídụ. Điểmcủamơnhọcphảilà thangđiểm10
Bốicảnh:quanhệKETQUA(MaMH, MaLop, MaKH,Diem) Biểudiễn: ∀kq∈KETQUA(kq.Diem≥0∧kq.Diem≤ 10)
RB3 Thêm Xĩa Sửa
MUONSACH + - +(NgayMuon,NgayHenTra,NgayThucTra)
RB1 Thêm Xĩa Sửa
PHANCONG + - +(ThoiGian)
RB2 Thêm Xĩa Sửa
KETQUA + - +(Diem)
3.2.1.2.
Ràngbuộctồn vẹnli ênthuộctính
Quyđịnh cácràngbuộcgiữacácthuộctínhkhácnhautrongcùngmộtquan hệ
Vídụ.Ngàytrảsáchphảilàbằnghoặcsaungàymượnsách
Bối cảnh:quan hệMUONSACH(MaSach, MaDocGia,NgayMuon, NgayHenTra,
NgayThucTra) Biểu
diễn:
∀ms∈MUONSACH(ms.NgayMuon≤ ms.NgayHenTra∧ms.NgayMuon
≤ ms.NgayThucTra)
Quy định sự tồntại của một hoặc nhiều bộphụ thuộc vào sự tồn tạicủa m ột hoặc nhiều
bộkháctrongcùngquanhệ.
RBTVkhĩa chínhlàRBTV liênbộ
Trang 87/109
Vídụ.Mỗiđềántrong cơngtycĩmộtmãduynhấtđểphânbiệtvớicácđềánkhác Bốicảnh:quan hệDEAN
Điềukiện: ∀da1,da2∈DEAN:da1≠ da2⇒(da1.MaDA≠ da2.MaDA) Bảngtầmảnhhưởng:
Bảngtầmảnhhưởng:
3.2.1.3. Ràngbuộctồnvẹnliênbộ
RB4 Thêm Xĩa Sửa
DEAN + - +(MaDA)
RB4 Thêm Xĩa Sửa
RBTVvềsốlượngcácbộtrongmộtquanhệ.
Vídụ.Mỗisinhviêntrongmộthọckỳđượcđăngkýkhơngquá8mơnhọc Bốicảnh:quan hệDANGKY(MaSV,MaMH)
Biểu diễn:
∀dk1∈DANGKY :count(dk2∈DANGKY |dk2.MaSV =dk1.MaS
V)≤8 ,
trongđĩcount()làhàmđếmsốbộcủamộtquan hệthỏađiềukiệntrong ngoặc().
RBTVcĩbốicảnhlànhiềuquan hệđượcchiathànhnămloại: RBTVthamchiếu
RBTVliênbộ-liênquanhệ
RBTVliênthuộctính-liênquanhệ RBTVdothuộctínhtổnghợp RBTVdochutrình
3.2.2.1. RBTVthamchiếu
Quy địnhgiátrịxuất hiệncủamột tậpthuộctính trongmột quanhệphải xuất hiệntrong
một tập thuộc tính trong một quan hệ khác. RBTV này cịn được gọi là R BTV tham
chiếu,RBTVphụthuộctồntạihayRBTVkhĩangoại. Trang 88/109
VídụRBTVtrên2quanhệ
Một nhân viên phải thuộc về một phịng trong cơng ty, nghĩa là tr ong quan hệ
Bảngtầmảnhhưởng:
Bảngtầmảnhhưởng:
3.2.2. Ràngbuộctồnvẹncĩbốicảnhlànhiềuquanhệ
RB6 Thêm Xĩa Sửa
NHANVIEN + - +(MaNV,MaNQL)
RB5 Thêm Xĩa Sửa
NHANVIEN + - +(Phong)
NHANVIEN, nếu một mã phịng (Phong) mà nhân viên trực thuộc xuất hiện, thì mã
phịng này phải xuất hiện trong quan hệ PHONGBAN, cụ thể làthuộc tính (MaPhong).
Nhưvậy:
Bốicảnh:NHANVIEN,PHONGBAN Biểu
diễn:
∀nv∈NHANVIEN((nv.Phong= NULL)∨ (∃pb∈PHONGBAN(nv.Phong
= pb.MaPhong)))
Ngườiquản lý(MaNQL)củamộtnhânviêncũngphải làmộtnhânviêntron g cơngty
Bốicảnh:NHANVIEN Điều
kiện:
∀nv∈NHANVIEN((nv.MaNQL= NULL)∨ (∃nv1∈NHANVIEN(nv.MaN
QL=nv1.MaNV)))
Giảsửr2cĩmộtkhĩangoại〈 thamchiếuđếnKtrongr1,khiđĩ: 〈(r2)⊆
K(r1)
Thêm
Khithêmmộtbột2vàor2thìphảibảođảmtồntạit1 trongr1saocho t1[K]=
t2[〈]
Bảngtầmảnhhưởng:
VídụRBTVtrên1quanhệ
Bảngtầmảnhhưởng:
Trang 89/109
Xĩa
Giả sử xĩa t1 khỏi r1. Khi đĩ cần xử lý các bộ trong r2 tham chiếu tới t1
, nghĩa là
s = ⌠〈=t1[K](r2) . Nếu s≠∅thì
Khơngthựchiệnhànhđộngxĩadữ liệu,hoặc Xĩa dâychuyền,nghĩalàxĩatấtcảcácbộtrongs
Sửa
Trườnghợpcậpnhậtt2trongr2
Cậpnhậtt2trongr2,sửakhĩangoại〈
Tương tựnhưtrườnghợpth
êmdữl iệu
Kiểmtra t2[〈]∈ K(r1)
Trườnghợpcậpnhậtt1trongr1
Cậpnhậtt1trongr1
Tươngtựnhưtrườnghợpxĩadữliệu Kiểmtra ⌠〈=t1[K](r2 )=∅
3.2.2.2. RBTVliênbộ-liênquanhệ
Quyđịnhvềtừngnhĩmcácbộcủanhiềuquanhệbốicảnhkhácnhau.
VídụMột hĩađơnbán hàngphải cĩít nhấtmột mặthàng, nghĩalàmột chiti ếthĩa đơn
bánhàngphảicĩítnhấtmộtmặthàng. Bốicảnh:HOADON, CTIETHD
RB7 Thêm Xĩa Sửa
HOADON + - +(MaHD)
CTIETHD - + +(MaHD)
Biểudiễn: ∀hd∈HOADON(∃cthd∈CTIETHD(hd.MaHD=cthd.MaHD))
Trang 90/109
3.2.2.3. RBTVliênthuộctính-liênquanhệ
Quyđịnhvềmốiliênhệgiữacácthuộctínhtrênnhiềuquan hệbốicảnhkhác nhau.
VídụGiả sử chophép thanhtốn tiền nhiềulầnvàthanh tốnsau khimua hàng,khi đĩ ngày t h anhtố n tiềnth e o một h ĩađơn m uahàn
gphảibằnghoặcsaungàymuahàng.
Bối cảnh: HOADON(MaHD, MaKH, NgayHD,
TriGia),
THANHTOAN(MaHD,NgayTToan,LanTToan,SoTienTT oan)
Biểudiễn:
∀hd∈HOADON(∀tt∈THANHTOAN(hd.MaHD=tt.MahD⇒hd.NgayHD≤
tt.NgayTToan))
Bảngtầmảnhhưởng:
RB9 Thêm Xĩa Sửa
SINHVIEN + - +(MaSV,DTB)
KETQUA + + +(MaSV,Diem)
RB8 Thêm Xĩa Sửa
HOADON + - +(MaHD,NgayHD)
3.2.2.4. RBTVdothuộctínhtổnghợp
Quyđịnhvềmốiliênhệgiữacácthuộctínhdosựcĩmặtcủathuộctínhtínht ốn.
VídụĐiểmtrungbìnhcủasinhviênbằngtrungbìnhcủacácmơnmàsinhvi êntheohọc
Bối cảnh: SINHVIEN(MaSV, HoSV, TenSV,
Khoa, DTB)
KETQUA(MaSV,MaMon,Diem) Biểudiễn:
∀sv∈SINHVIEN(∃kq∈KETQUA(sv.MaSV =kq.MaSV ⇒sv.DTB= AVG(kq.
Diem)))
3.2.2.5. RBTVdochutrình
Trang 91/109
Xảy rakhicĩsự hiệndiện củachutrình.Đểnhậndiện chutrình,ngườitabiểu diễnl ược
Bảngtầmảnhhưởng:
Bảngtầmảnhhưởng:
Nútthểhiệnlượcđồ NHANVIEN
Nútthuộctínhkết
MaNV=MaNV
Cungnối giữa nút lượcđồ vànút thuộc
VídụMộtnhânviênchỉđượcphâncơngvàocácđềándophịngmìnhchủtrì Bốicảnh:NHANVIEN,DEAN,PHANCONG
Đồthịthểhiệnchutrìnhnhưsau:
MaNV=MaNV
PHANCONG NHANVIEN
MaDA=MaDA DEAN Phong=Phong
Biểu diễn:
∀pc∈PHANCONG(∃nvda∈NV_DA(nvda.MaNV = pc.MaNV ∧nvda.MaDA
= pc.MaDA))
với: NV_DA←NHANVIENPhong=MaPhong DEAN
Bảngtầmảnhhưởng:
RB10 Thêm Xĩa Sửa
Trang92/109
đồCSDLnhưsau:
NHANVIEN - + +(MaNV,Phong)
DEAN - + +(MaDA,Phong)
Bàitập1
Hãychứngminh3tínhchấtphânrã,kếthợpvàtựabắccầu.
Hãytìmhiểucáctínhchấtcủabaođĩngtậpthuộctính,phủtốithiểu
Bàitập2
Cholượcđồquan hệR(A,B,C,D,E,G)vàtậpphụthuộchàm F={A C ,A EG,B D,G E}
Tìm ABF,CGDF,AF
Bàitập3
Cholượcđồquan hệR(A,B,C,D,E,G)vàtậpphụthuộchàm F={B C,A EG,B A,G E}
Tìm ABF,CGDF,AF
Bàitập4
Cholượcđồquan hệR(A,B,C,D,E)vàtậpphụthuộchàm F={A C ,BC D,D E,E A}
Tìm ABF,BDF,DF
Bàitập5
Cholượcđồquan hệR(A,B,C,D,E)vàtậpphụthuộchàm F={B C,AC D,D G,AG E}
Chobiết AC →E cĩthuộcF+khơng? Chobiết BD→AD cĩthuộcF+khơng?
Trang 93/109
Vớicácbàitập7,8,9:
Tìmmộtkhĩa(theothuậttốntìm mộtkhĩa) Tìmmọikhĩa(theothuậttốn tìmmọikhĩa) Tìmphủtốithiểu
4. Bàitập
+ + +
+ + +
Bàitập7
CholượcđồquanhệR(A,B,C,D)vàtậpphụthuộchàm
F={AB CD,B C,C D}
Bàitập8
CholượcđồquanhệR {ABCDEFGHKLM}vàtậpphụthuộchàm
F={A B,C D,E F, G AHK,AH G,GLC M}
Bàitập9
CholượcđồquanhệR {ABCDEFGHKL}vàtậpphụthuộchàm
F={A B,AC D,F G,FK LEH,E FH}
Bàitập10
Với hai bài tốn tình huống là quản lý đề án và quản lý ngân hàng, ngoại tr ừ các ràng
buộc khố chính và khố ngoại, hãy tìm tất cả các RBTV theo yêu cầu: bối cảnh, biểu
diễn,tầmảnhhưởng.VớinhữngRBTVtìmđược,hãyphântheotừngloạiRBT V.
Trang 94/109
Dạng chuẩn và chuẩn hĩa cơ sở dữ liệ u
Chương này giới thiệu các dạng chuẩn, phân rã bảo tồn thơng tin, bảo tồn phụ thuộc
hàm, qua đĩ cũng trình bày cách phân rã bảo tồn bảo tồn thơng tin và bả o tồn phụ
thuộc.
1. Dạngchuẩncủalượcđồquanhệ
Đểdễdàngtrìnhbàycácdạngchuẩn,cầnnắmrõcáckháiniệm:
Thuộctính khố:
Cho lược đồquanhệ Q(A1,A2,...,An ), thuộctính B đượcgọi là thuộc tínhkho
á nếuB là
một thuộctínhthànhphần trongmột khố nào đĩcủaQ,ngược lạiB đượcg
ọilà thuộc
tínhkhơng khố
Vídụ:R(A,B,C,D),F={AB C,B D,BC A}