Chuaån hoùa CSDL Caùc vaán ñeà trong caùc baûng quan heä Ví duï 1 : Inventory part warehouse quantity warehouse-address
Jan 27, 2016
Chuaån hoùa CSDLChuaån hoùa CSDL
Caùc vaán ñeà trong caùc baûng quan heä Ví duï 1:
Caùc vaán ñeà trong caùc baûng quan heä Ví duï 1:
Inventory
part warehouse quantity
warehouse-address
Chuaån hoùa CSDLChuaån hoùa CSDL
Caùc vaán ñeà trong caùc baûng quan heä
Caùc vaán ñeà trong caùc baûng quan heä
part warehouse quantity warehouse-address
Inventory
bolt King Bros. 20 Long St. 20
nut King Bros. 40 Long St. 20
screw King Bros. 10 Long St. 20
NULL Lucid Ltd. NULL Compton Pl. 10
Chuaån hoùa CSDLChuaån hoùa CSDL
Caùc vaán ñeà trong caùc baûng quan heä INVENTORY table
– Ñòa chæ nhaø kho laäp laïi trong nhieàu boä
chöùa maët haøng coù taïi nhaø kho ñoù
– Neáu ñòa chæ moät nhaø kho thay ñoåi, caùc
boä löu caùc maët haøng chöùa trong nhaø kho
naøy ñeàu phaûi thay ñoåi theo
– Neáu coù thôøi ñieåm naøo ñoù moät nhaø kho
khoâng coù maët haøng naøo thì khoâng coù boä
ñeå löu ñòa chæ nhaø kho, hoaëc caàn phaûi coù
1 boä maø thuoäc tính veà maët haøng vaø soá
löôïng phaûi NULL
Caùc vaán ñeà trong caùc baûng quan heä INVENTORY table
– Ñòa chæ nhaø kho laäp laïi trong nhieàu boä
chöùa maët haøng coù taïi nhaø kho ñoù
– Neáu ñòa chæ moät nhaø kho thay ñoåi, caùc
boä löu caùc maët haøng chöùa trong nhaø kho
naøy ñeàu phaûi thay ñoåi theo
– Neáu coù thôøi ñieåm naøo ñoù moät nhaø kho
khoâng coù maët haøng naøo thì khoâng coù boä
ñeå löu ñòa chæ nhaø kho, hoaëc caàn phaûi coù
1 boä maø thuoäc tính veà maët haøng vaø soá
löôïng phaûi NULL
Chuaån hoùa CSDLChuaån hoùa CSDL
Caùc vaán ñeà trong caùc baûng quan heä
Ví duï 2:
Caùc vaán ñeà trong caùc baûng quan heä
Ví duï 2:Institution
Employee Department Location
Peter ITACS 15.101
Paul ITACS 15.101
Kate ITACS 15.104
Mike Math 10.001
Jane Math 10.008
NULL Physics 15.78
Chuaån hoùa CSDLChuaån hoùa CSDL
Caùc vaán ñeà trong caùc baûng quan heä
Institution table
– Vò trí cuûa phoøng ban laäp laïi trong moïi boä
chöùa nhaân vieân cuûa phoøng ban ñoù
– Neáu vò trí phoøng ban thay ñoåi thì moïi boä löu
nhaân vieân cuûa phoøng ban ñoù phaûi ñöôïc
caäp nhaät
– Neáu moät phoøng ban chöa coù nhaân vieân thì
khoâng coù boä ñeå löu vò trí cuûa phoøng ban
hoaëc coù boä maø moät soá thuoäc tính phaûi
laø NULL
Caùc vaán ñeà trong caùc baûng quan heä
Institution table
– Vò trí cuûa phoøng ban laäp laïi trong moïi boä
chöùa nhaân vieân cuûa phoøng ban ñoù
– Neáu vò trí phoøng ban thay ñoåi thì moïi boä löu
nhaân vieân cuûa phoøng ban ñoù phaûi ñöôïc
caäp nhaät
– Neáu moät phoøng ban chöa coù nhaân vieân thì
khoâng coù boä ñeå löu vò trí cuûa phoøng ban
hoaëc coù boä maø moät soá thuoäc tính phaûi
laø NULL
Chuaån hoùa CSDLChuaån hoùa CSDL
Caùc vaán ñeà trong caùc baûng quan heä
Ví duï 3:Insertion test
Caùc vaán ñeà trong caùc baûng quan heä
Ví duï 3:Insertion test
Employee
emp# carchild
100 TRS200 John
100 TRS200 Kate
100 SWG100 John
100 SWG100 Kate
100 ??? Peter
Chuaån hoùa CSDLChuaån hoùa CSDL
Caùc vaán ñeà trong caùc baûng quan heä Employee table
– Vieäc ñaêng kyù soá xe phaûi ñöôïc laäp laïi cho
töøng ngöôøi con
– Teân cuûa moät ngöôøi con caàn ñöôïc laäp laïi
vôùi moãi soá ñaêng kyù xe (buøng noå soá
boä !)
– Do söï dö thöøa döõ lieäu, döõ lieäu coù theå
trôû neân maát tính nhaát quaùn
– Neáu 1 ngöôøi khoâng coù con (hoaëc xe) thì trò
thuoäc tính con (hoaëc xe) caàn phaûi ñeå NULL
Caùc vaán ñeà trong caùc baûng quan heä Employee table
– Vieäc ñaêng kyù soá xe phaûi ñöôïc laäp laïi cho
töøng ngöôøi con
– Teân cuûa moät ngöôøi con caàn ñöôïc laäp laïi
vôùi moãi soá ñaêng kyù xe (buøng noå soá
boä !)
– Do söï dö thöøa döõ lieäu, döõ lieäu coù theå
trôû neân maát tính nhaát quaùn
– Neáu 1 ngöôøi khoâng coù con (hoaëc xe) thì trò
thuoäc tính con (hoaëc xe) caàn phaûi ñeå NULL
Chuaån hoùa CSDLChuaån hoùa CSDL
Caùc vaán ñeà trong caùc baûng quan heä
Ví duï 4:
Keát 2 baûng thoâng qua thuoäc tính city
Caùc vaán ñeà trong caùc baûng quan heä
Ví duï 4:
Keát 2 baûng thoâng qua thuoäc tính citySupplier
s# sname salary city
10 Peter 100K Paris
20 Joan 120K Rome
Company
cname city
Golden Bolts Paris
Red Nuts Rome
Green Tomatoes Rome
Chuaån hoùa CSDLChuaån hoùa CSDL
Caùc vaán ñeà trong caùc baûng quan heä
Nhaø cung caáp 'Peter' soáng vaø laøm vieäc cho moät coâng ty ôû 'Paris‘.
Nhaø cung caáp 'Joan' soáng taïi 'Rome' vaø laøm vieäc cho coâng ty 'Green Tomatoes' nhöng khoâng laøm vieäc
cho coâng ty ‘Red Nuts'
Caùc vaán ñeà trong caùc baûng quan heä
Nhaø cung caáp 'Peter' soáng vaø laøm vieäc cho moät coâng ty ôû 'Paris‘.
Nhaø cung caáp 'Joan' soáng taïi 'Rome' vaø laøm vieäc cho coâng ty 'Green Tomatoes' nhöng khoâng laøm vieäc
cho coâng ty ‘Red Nuts'
Supplier JOIN Company
s# sname salary city cname
10 Peter 100K Paris Golden Bolts
20 Joan 120K Rome Red Nuts
20 Joan 120K Rome Green Tomatoes?
Chuaån hoùa CSDLChuaån hoùa CSDL
Caùc vaán ñeà trong caùc baûng quan heä
Baûng Supplier vaø Company
– Keát 2 baûng thoâng qua thuoäc tính city coù theå sinh ra caùc boä bieåu dieãn thoâng tin sai
Caùc vaán ñeà trong caùc baûng quan heä
Baûng Supplier vaø Company
– Keát 2 baûng thoâng qua thuoäc tính city coù theå sinh ra caùc boä bieåu dieãn thoâng tin sai
Supplier JOIN Company
s# sname salary city cname
10 Peter 100K Paris Golden Bolts
20 Joan 120K Rome Red Nuts
20 Joan 120K Rome Green Tomatoes
Chuaån hoùa CSDLChuaån hoùa CSDL
Söï baát thöôøng cuûa pheùp caäp nhaät (Update anomalies)Söï baát thöôøng cuûa pheùp theâm vaøo
(Insertion anomaly)
Söï baát thöôøng cuûa pheùp caäp nhaät (Update anomalies)Söï baát thöôøng cuûa pheùp theâm vaøo
(Insertion anomaly)Employee
emp# carchild
100 TRS200 John
100 TRS200 Kate
100 SWG100 John
100 SWG100 Kate
100 ??? Peter
Vieäc theâm 1 haøng keùo theo vieäc theâm caùc haøng khaùc (vaán ñeà buøng noå soá haøng)
Vieäc theâm 1 haøng taïo ra moät soá thuoäc tính NULL
Chuaån hoùa CSDLChuaån hoùa CSDL
Söï baát thöôøng cuûa pheùp caäp nhaät
Söï baát thöôøng cuûa pheùp loaïi boû (Deletion anomaly)
Söï baát thöôøng cuûa pheùp caäp nhaät
Söï baát thöôøng cuûa pheùp loaïi boû (Deletion anomaly) Institution
Employee Department Location
Peter ITACS 15.101
Paul ITACS 15.101
Kate ITACS 15.104
Mike Math 10.001
Jane Math 10.008
Vieäc loaïi moät
haøng daãn ñeán
vieäc maát thoâng
tin
Vieäc xoùa boû 1
thoâng tin daãn
ñeán vieäc loaïi
nhieàu hôn 1 haøng
Chuaån hoùa CSDLChuaån hoùa CSDL
Söï baát thöôøng cuûa pheùp caäp nhaät
Söï baát thöôøng cuûa pheùp söûa ñoåi (Modification anomaly)
Söï baát thöôøng cuûa pheùp caäp nhaät
Söï baát thöôøng cuûa pheùp söûa ñoåi (Modification anomaly)
Employee
emp# carchild
100 TRS200 John
100 TRS200 Kate
100 SWG100 John
100 SWG100 Kate
Vieäc söûa ñoåi
moät haøng ñoøi
hoûi vieäc söûa
ñoåi ôû caû moät
soá haøng khaùc
Chuaån hoùa CSDLChuaån hoùa CSDL
Nguyeân taéc chæ ñaïo trong thieát keá CSDL
Thieát keá caùc baûng quan heä sao cho vieäc giaûi thích yù nghóa cuûa noù ñöôïc deã daøng. Khoâng keát hôïp nhieàu thuoäc tính khoâng lieân quan trong cuøng moät baûng
Thieát keá caùc baûng quan heä sao cho traùnh ñöôïc nhöõng söï baát thöôøng trong vieäc theâm, bôùt hay söûa ñoåi caùc boä
Thieát keá caùc baûng quan heä sao cho soá thuoäc tính coù theå NULL laø toái thieåu
Nguyeân taéc chæ ñaïo trong thieát keá CSDL
Thieát keá caùc baûng quan heä sao cho vieäc giaûi thích yù nghóa cuûa noù ñöôïc deã daøng. Khoâng keát hôïp nhieàu thuoäc tính khoâng lieân quan trong cuøng moät baûng
Thieát keá caùc baûng quan heä sao cho traùnh ñöôïc nhöõng söï baát thöôøng trong vieäc theâm, bôùt hay söûa ñoåi caùc boä
Thieát keá caùc baûng quan heä sao cho soá thuoäc tính coù theå NULL laø toái thieåu
Chuaån hoùa CSDLChuaån hoùa CSDL
Nguyeân taéc chæ ñaïo trong thieát keá CSDL
Thieát keá caùc baûng quan heä sao
cho chuùng coù theå ñöôïc keát bôûi
caùc ñieàu kieän baèng nhau treân
caùc thuoäc tính khoùa chính hoaëc
khoùa ngoaïi, maø khoâng sinh ra caùc
boä khoâng coù trong thöïc teá
Nguyeân taéc chæ ñaïo trong thieát keá CSDL
Thieát keá caùc baûng quan heä sao
cho chuùng coù theå ñöôïc keát bôûi
caùc ñieàu kieän baèng nhau treân
caùc thuoäc tính khoùa chính hoaëc
khoùa ngoaïi, maø khoâng sinh ra caùc
boä khoâng coù trong thöïc teá
Chuaån hoùa CSDLChuaån hoùa CSDL
Phuï thuoäc haøm (Functional dependency-FD)
Cho löôïc ñoà quan heä R = ( A1, ..., An) vaø
2 taäp X, Y khaùc roãng laø 2 taäp con cuûa
taäp thuoäc tính cuûa R.
FD X -> Y (ñoïc laø: "X xaùc ñònh haøm Y" )
laø ñuùng trong R neáu, vôùi moïi theå
hieän r cuûa R, khoâng coù hai haøng coù
truøng caùc trò treân taäp thuoäc tính X
maø coù trò khaùc nhau treân moät hoaëc
hôn caùc thuoäc tính trong taäp Y
Phuï thuoäc haøm (Functional dependency-FD)
Cho löôïc ñoà quan heä R = ( A1, ..., An) vaø
2 taäp X, Y khaùc roãng laø 2 taäp con cuûa
taäp thuoäc tính cuûa R.
FD X -> Y (ñoïc laø: "X xaùc ñònh haøm Y" )
laø ñuùng trong R neáu, vôùi moïi theå
hieän r cuûa R, khoâng coù hai haøng coù
truøng caùc trò treân taäp thuoäc tính X
maø coù trò khaùc nhau treân moät hoaëc
hôn caùc thuoäc tính trong taäp Y
Chuaån hoùa CSDLChuaån hoùa CSDL
Phuï thuoäc haøm Ví duï:
EMPLOYEE( e#,ename, dept_name, dept_addr, class )
Vôùi X = { dept_name }, Y= { dept_addr },
thì FD X -> Y laø ñuùng trong EMPLOYEE
Teân phoøng ban xaùc ñònh haøm ñòa chæ cuûa phoøng ban, hoaëc, 1 phoøng ban coù duy nhaát 1 ñòa chæ
Phuï thuoäc haøm Ví duï:
EMPLOYEE( e#,ename, dept_name, dept_addr, class )
Vôùi X = { dept_name }, Y= { dept_addr },
thì FD X -> Y laø ñuùng trong EMPLOYEE
Teân phoøng ban xaùc ñònh haøm ñòa chæ cuûa phoøng ban, hoaëc, 1 phoøng ban coù duy nhaát 1 ñòa chæ
Chuaån hoùa CSDLChuaån hoùa CSDL
• Phuï thuoäc haøm• Phuï thuoäc haøm
e# ename dept_name dept_addr class
10 Peter Math G16 2nd20 Joan CS G15 1st30 Mike CS G15 1st40 Kate CS G15 1st50 Peter Law G20 2nd60 Albert Physics G20 1st
Employee
e# -> ename
Chuaån hoùa CSDLChuaån hoùa CSDL
• Phuï thuoäc haøm• Phuï thuoäc haøm
e# ename dept_name dept_addr class
10 Peter Math G16 2nd20 Joan CS G15 1st30 Mike CS G15 1st40 Kate CS G15 1st50 Peter Law G20 2nd60 Albert Physics G20 1st
Employee
e# -> dept_name
Chuaån hoùa CSDLChuaån hoùa CSDL
• Phuï thuoäc haøm• Phuï thuoäc haøm
e# ename dept_name dept_addr class
10 Peter Math G16 2nd20 Joan CS G15 1st30 Mike CS G15 1st40 Kate CS G15 1st50 Peter Law G20 2nd60 Albert Physics G20 1st
Employee
e# -> dept_addr
Chuaån hoùa CSDLChuaån hoùa CSDL
• Phuï thuoäc haøm • Phuï thuoäc haøm
e# ename dept_name dept_addr class
10 Peter Math G16 2nd20 Joan CS G15 1st30 Mike CS G15 1st40 Kate CS G15 1st50 Peter Law G20 2nd60 Albert Physics G20 1st
Employee
e# -> class
Chuaån hoùa CSDLChuaån hoùa CSDL
• Phuï thuoäc haøm• Phuï thuoäc haøm
e# ename dept_name dept_addr class
10 Peter Math G16 2nd20 Joan CS G15 1st30 Mike CS G15 1st40 Kate CS G15 1st50 Peter Law G20 2nd60 Albert Physics G20 1st
Employee
dept_name -> class
Chuaån hoùa CSDLChuaån hoùa CSDL
• Phuï thuoäc haøm• Phuï thuoäc haøm
e# ename dept_name dept_addr class
10 Peter Math G16 2nd20 Joan CS G15 1st30 Mike CS G15 1st40 Kate CS G15 1st50 Peter Law G20 2nd60 Albert Physics G20 1st
Employee
e# -> ename, e# -> dept_name,e# -> dept_addr,e# -> class,
minimal key -> any other attribute
Chuaån hoùa CSDLChuaån hoùa CSDL
• Phuï thuoäc haøm• Phuï thuoäc haøm
e# ename dept_name dept_addr class
10 Peter Math G16 2nd50 Peter Law G20 2nd 20 Joan CS G15 1st30 Mike CS G15 1st40 Kate CS G15 1st60 Albert Physics G20 1st
Employee
e# -> ename, but ename -/> e#e# -> dept_name, but dept_name -/> e#e# -> dept_addr,e# -> class,dept_name -> class
Chuaån hoùa CSDLChuaån hoùa CSDL
Phuï thuoäc haøm
Chuù yù raèng:
– e# -> e#
– class -> class
– e#, ename -> ename
– if (e# -> ename) then (e#, dept_name -> ename)
– if (e# -> ename) and (e# -> dept_name) and
(e# -> dept_addr) then
e# -> ename,dept_name,dept_address
– if (e# -> dept_name) and (dept_name -> class) then
e# -> class
Phuï thuoäc haøm
Chuù yù raèng:
– e# -> e#
– class -> class
– e#, ename -> ename
– if (e# -> ename) then (e#, dept_name -> ename)
– if (e# -> ename) and (e# -> dept_name) and
(e# -> dept_addr) then
e# -> ename,dept_name,dept_address
– if (e# -> dept_name) and (dept_name -> class) then
e# -> class
Chuaån hoùa CSDLChuaån hoùa CSDL
Tieân ñeà Armstrong
If X Y then X -> Y (reflexivity)
If X -> Y then XZ -> YZ (augmentation)
If X -> Y and Y -> Z then X -> Z
(transitivity)
Tieân ñeà Armstrong
If X Y then X -> Y (reflexivity)
If X -> Y then XZ -> YZ (augmentation)
If X -> Y and Y -> Z then X -> Z
(transitivity)
Taäp tieân ñeà ñaày ñuû vaø toái tieåu
Chuaån hoùa CSDLChuaån hoùa CSDL
Caùc quy taéc boå sung
If X -> Y and X -> Z then X ->YZ
(union)
If X -> Y and WY -> Z then WX ->Z
(pseudotransitivity)
If X -> Y and Y Z then X -> Z
(decomposition)
Caùc quy taéc boå sung
If X -> Y and X -> Z then X ->YZ
(union)
If X -> Y and WY -> Z then WX ->Z
(pseudotransitivity)
If X -> Y and Y Z then X -> Z
(decomposition)
Chuaån hoùa CSDLChuaån hoùa CSDL
Daãn xuaát töø caùc phuï thuoäc haøm
Ví duï:
Given F = {A->B, B->C}, is it true that A->C ?
A -> B & B -> C
A -> C
Daãn xuaát töø caùc phuï thuoäc haøm
Ví duï:
Given F = {A->B, B->C}, is it true that A->C ?
A -> B & B -> C
A -> C
transitivity axiom
Chuaån hoùa CSDLChuaån hoùa CSDL
Daãn xuaát töø caùc phuï thuoäc haømVí duï:
Given F = {A->BC}, is it true that A->B and A->C ?
BC-> B
A->BC & BC-> B
A-> BTöông töï, suy ra A->C
Daãn xuaát töø caùc phuï thuoäc haømVí duï:
Given F = {A->BC}, is it true that A->B and A->C ?
BC-> B
A->BC & BC-> B
A-> BTöông töï, suy ra A->C
transitivity axiom
reflexivity axiom
Chuaån hoùa CSDLChuaån hoùa CSDL
Daãn xuaát töø caùc phuï thuoäc haøm
Ví duï: Given F = {A->B, A ->C}, is it true that A->BC?
A->B A->C
A->AB & AB->BC
A->BC
Daãn xuaát töø caùc phuï thuoäc haøm
Ví duï: Given F = {A->B, A ->C}, is it true that A->BC?
A->B A->C
A->AB & AB->BC
A->BC
augmentation axiomaugmentation axiom
transitivity axiom
Chuaån hoùa CSDLChuaån hoùa CSDL
Daãn xuaát töø caùc phuï thuoäc haøm
Ví duï:
Given F = {A->B},
is it true that AC->B?
AC->A
AC->A & A->B
AC->B
Daãn xuaát töø caùc phuï thuoäc haøm
Ví duï:
Given F = {A->B},
is it true that AC->B?
AC->A
AC->A & A->B
AC->B
reflexivity axiom
transistivity axiom
Chuaån hoùa CSDLChuaån hoùa CSDL
• FD vs. entity• FD vs. entity
sid# name
language
Student
address
sid# -> name
sid# -> address
sid# -/> language
name ? sid#name ? address
Chuaån hoùa CSDLChuaån hoùa CSDL
• FD vs. relationship• FD vs. relationship
Department Chairperson
cname
dname
building#
manages
title
dname -> cname
cname -> dname
dname -> building# cname -> title
dname -> titlecname -> building#dname, cname -> building#, title
Chuaån hoùa CSDLChuaån hoùa CSDL
• Functional dependency vs. relationship• Functional dependency vs. relationship
Employee Projectworks-on
e# enamecdate
budgettitle
e# -> ename title -> budget
title -> cdate
e# -> ename, titlee# -> budgete# -> cdate
e# -> title
Chuaån hoùa CSDLChuaån hoùa CSDL
Daïng chuaån 1 (First Normal Form - 1NF)
Löôïc ñoà quan heä ñaït daïng chuaån 1 neáu moïi
haøng trong baûng quan heä töông öùng coù
cuøng soá thuoäc tính vaø chæ chöùa caùc trò
nguyeân toá, coù nghóa laø khoâng coù söï laäp
laïi caùc thuoäc tính vaø caùc nhoùm trò
Ví duï 1ï: löôïc ñoà quan heä sau khoâng ñaït daïng
chuaån 1
Family
Daïng chuaån 1 (First Normal Form - 1NF)
Löôïc ñoà quan heä ñaït daïng chuaån 1 neáu moïi
haøng trong baûng quan heä töông öùng coù
cuøng soá thuoäc tính vaø chæ chöùa caùc trò
nguyeân toá, coù nghóa laø khoâng coù söï laäp
laïi caùc thuoäc tính vaø caùc nhoùm trò
Ví duï 1ï: löôïc ñoà quan heä sau khoâng ñaït daïng
chuaån 1
Familyperson_name children cars
Peter { Mike Joan}, {PPP777}
Paul {} { KGN004,MN3345}
Chuaån hoùa CSDLChuaån hoùa CSDL
Khoùa (Keys)
Sieâu khoùa (Superkey)
Sieâu khoùa laø moät taäp con khaùc roãng caùc thuoäc tính cuûa löôïc ñoà quan heä R sao cho vôùi baát kyø 2 boä t1, t2 trong baûng quan heä ñònh
nghóa treân R thì t1 [X] t2 [X]
Löu yù raèng khi X laø sieâu khoùa trong R thì X xaùc ñònh haøm moïi thuoäc tính cuûa R: X -> R
Khoùa toái tieåu (Minimal key)
Khoùa toái tieåu K laø sieâu khoùa keøm theâm tính chaát laø neáu loaïi khoûi K baát kyø thuoäc tính naøo cuõng laøm cho K khoâng coøn laø sieâu khoùa
Khoùa (Keys)
Sieâu khoùa (Superkey)
Sieâu khoùa laø moät taäp con khaùc roãng caùc thuoäc tính cuûa löôïc ñoà quan heä R sao cho vôùi baát kyø 2 boä t1, t2 trong baûng quan heä ñònh
nghóa treân R thì t1 [X] t2 [X]
Löu yù raèng khi X laø sieâu khoùa trong R thì X xaùc ñònh haøm moïi thuoäc tính cuûa R: X -> R
Khoùa toái tieåu (Minimal key)
Khoùa toái tieåu K laø sieâu khoùa keøm theâm tính chaát laø neáu loaïi khoûi K baát kyø thuoäc tính naøo cuõng laøm cho K khoâng coøn laø sieâu khoùa
Chuaån hoùa CSDLChuaån hoùa CSDL
Khoùa
Khoùa chính (Primary key)
Khoùa chính laø moät khoùa toái tieåu ñöôïc
ngöôøi phaân tích choïn ñeå caøi ñaët
Khoùa döï tuyeån (Candidate key)
Caùc khoùa döï tuyeån laø caùc khoùa toái
tieåu khaùc maø khoâng phaûi laø khoùa
chính
Khoùa
Khoùa chính (Primary key)
Khoùa chính laø moät khoùa toái tieåu ñöôïc
ngöôøi phaân tích choïn ñeå caøi ñaët
Khoùa döï tuyeån (Candidate key)
Caùc khoùa döï tuyeån laø caùc khoùa toái
tieåu khaùc maø khoâng phaûi laø khoùa
chính
Chuaån hoùa CSDLChuaån hoùa CSDL
Thuoäc tính
Thuoäc tính nguyeân toá (Prime
attribute)
Thuoäc tính nguyeân toá laø moät thuoäc tính
cuûa löôïc ñoà quan heä R maø laø thaønh phaàn
cuûa ít nhaát moät khoùa döï tuyeån
Thuoäc tính khoâng nguyeân toá
(Nonprime attribute)
Thuoäc tính khoâng nguyeân toá laø thuoäc tính
khoâng phaûi laø thuoäc tính nguyeân toá
Thuoäc tính
Thuoäc tính nguyeân toá (Prime
attribute)
Thuoäc tính nguyeân toá laø moät thuoäc tính
cuûa löôïc ñoà quan heä R maø laø thaønh phaàn
cuûa ít nhaát moät khoùa döï tuyeån
Thuoäc tính khoâng nguyeân toá
(Nonprime attribute)
Thuoäc tính khoâng nguyeân toá laø thuoäc tính
khoâng phaûi laø thuoäc tính nguyeân toá
Chuaån hoùa CSDLChuaån hoùa CSDL
Phuï thuoäc haøm ñaày ñuû (full FD) vaø
phuï thuoäc haøm rieâng phaàn (partial FD)
Phuï thuoäc haøm ñaày ñuû
Phuï thuoäc haøm ñaày ñuû laø phuï thuoäc haøm X -> Y maø neáu loaïi baát kyø thuoäc tính A naøo trong X thì (X-A) not-> Y
Phuï thuoäc haøm rieâng phaàn
Phuï thuoäc haøm rieâng phaàn laø phuï thuoäc haøm maø khoâng phaûi laø phuï thuoäc haøm ñaày ñuû
Phuï thuoäc haøm ñaày ñuû (full FD) vaø
phuï thuoäc haøm rieâng phaàn (partial FD)
Phuï thuoäc haøm ñaày ñuû
Phuï thuoäc haøm ñaày ñuû laø phuï thuoäc haøm X -> Y maø neáu loaïi baát kyø thuoäc tính A naøo trong X thì (X-A) not-> Y
Phuï thuoäc haøm rieâng phaàn
Phuï thuoäc haøm rieâng phaàn laø phuï thuoäc haøm maø khoâng phaûi laø phuï thuoäc haøm ñaày ñuû
Daïng chuaån 2 (Second Normal Form -2NF)
Löôïc ñoà quan heä ñaït daïng chuaån 2
neáu moïi thuoäc tính khoâng nguyeân
toá A trong R
phuï thuoäc haøm ñaày ñuû vaøo khoùa
chính cuûa R Ví duï 2:
Daïng chuaån 2 (Second Normal Form -2NF)
Löôïc ñoà quan heä ñaït daïng chuaån 2
neáu moïi thuoäc tính khoâng nguyeân
toá A trong R
phuï thuoäc haøm ñaày ñuû vaøo khoùa
chính cuûa R Ví duï 2:
Chuaån hoùa CSDLChuaån hoùa CSDL
part warehouse quantity warehouse-address
Inventory
bolt King Bros. 20 Long St. 20
nut King Bros. 40 Long St. 20
screw King Bros. 10 Long St. 20
NULL Lucid Ltd. NULL Compton Pl. 10
FD: warehouse -> warehouse-addresspart, warehouse -> quantity
Chuaån hoùa CSDLChuaån hoùa CSDL
Daïng chuaån 2
INVENTORY (part, warehouse, quantity, warehouse-address)
F= { part, warehouse -> quantity,
warehouse -> warehouse-address }
Khoùa : ???
Vì warehouse -> warehouse-address, part, warehouse -> warehouse-address
Khoùa : part, warehouse
INVENTORY khoâng ñaït 2NF vì coù warehouse-address (thuoäc tính khoâng nguyeân toá) khoâng phuï thuoäc ñaày ñuû vaøo khoùa
Daïng chuaån 2
INVENTORY (part, warehouse, quantity, warehouse-address)
F= { part, warehouse -> quantity,
warehouse -> warehouse-address }
Khoùa : ???
Vì warehouse -> warehouse-address, part, warehouse -> warehouse-address
Khoùa : part, warehouse
INVENTORY khoâng ñaït 2NF vì coù warehouse-address (thuoäc tính khoâng nguyeân toá) khoâng phuï thuoäc ñaày ñuû vaøo khoùa
Chuaån hoùa CSDLChuaån hoùa CSDL
Daïng chuaån 2
Löôïc ñoà INVENTORY neân ñöôïc phaân
raõ thaønh caùc löôïc ñoà sau:
P ( part, warehouse, quantity ) F = { part, warehouse -> quantity }Khoùa: part, warehouse
W ( warehouse, warehouse-address )F = { warehouse -> warehouse-address }Khoùa: warehouse
Daïng chuaån 2
Löôïc ñoà INVENTORY neân ñöôïc phaân
raõ thaønh caùc löôïc ñoà sau:
P ( part, warehouse, quantity ) F = { part, warehouse -> quantity }Khoùa: part, warehouse
W ( warehouse, warehouse-address )F = { warehouse -> warehouse-address }Khoùa: warehouse
2NF
2NF
Chuaån hoùa CSDLChuaån hoùa CSDL
Phuï thuoäc haøm baéc caàu (Transitive FD)
Phuï thuoäc haøm X -> Y ñuùng trong R laø
baéc caàu neáu toàn taïi taäp con khaùc roãng
Z cuûa R, Zø khoâng phaûi laø taäp con cuûa
moät khoùa naøo trong R, vaø caùc phuï
thuoäc haøm X->Z vaø Z->Y laø ñuùng trong R
Ñoïc laø: “ Y phuï thuoäc baéc caàu vaøo X
trong löôïc ñoà R” neáu X->Y laø ñuùng trong
R vaø X->Y laø phuï thuoäc haøm baéc caàu
Phuï thuoäc haøm baéc caàu (Transitive FD)
Phuï thuoäc haøm X -> Y ñuùng trong R laø
baéc caàu neáu toàn taïi taäp con khaùc roãng
Z cuûa R, Zø khoâng phaûi laø taäp con cuûa
moät khoùa naøo trong R, vaø caùc phuï
thuoäc haøm X->Z vaø Z->Y laø ñuùng trong R
Ñoïc laø: “ Y phuï thuoäc baéc caàu vaøo X
trong löôïc ñoà R” neáu X->Y laø ñuùng trong
R vaø X->Y laø phuï thuoäc haøm baéc caàu
Chuaån hoùa CSDLChuaån hoùa CSDL
Daïng chuaån 3 (Third Normal Form - 3NF)
Löôïc ñoà quan heä R ñaït daïng chuaån 3 neáu R ñaït daïng chuaån 2 vaø khoâng coù moät thuoäc tính khoâng nguyeân toá naøo cuûa R phuï thuoäc baéc caàu vaøo khoùa chính cuûa R
Ñònh nghóa khaùc:
Löôïc ñoà quan heä R ñaït 3NF neáu vôùi moïi FD
X -> A ñuùng trong R thì:
(i) X laø sieâu khoùa trong R,
hoaëc
(ii) A laø thuoäc tính nguyeân toá trong R
Daïng chuaån 3 (Third Normal Form - 3NF)
Löôïc ñoà quan heä R ñaït daïng chuaån 3 neáu R ñaït daïng chuaån 2 vaø khoâng coù moät thuoäc tính khoâng nguyeân toá naøo cuûa R phuï thuoäc baéc caàu vaøo khoùa chính cuûa R
Ñònh nghóa khaùc:
Löôïc ñoà quan heä R ñaït 3NF neáu vôùi moïi FD
X -> A ñuùng trong R thì:
(i) X laø sieâu khoùa trong R,
hoaëc
(ii) A laø thuoäc tính nguyeân toá trong R
Chuaån hoùa CSDLChuaån hoùa CSDL
Daïng chuaån 3Ví duï 3:
SUPPLIER ( s#, sname, cname, city )
F= { s# -> sname,
s# -> cname, cname -> city, s# -> city }
Khoùa : s#
Löôïc ñoà SUPPLIER khoâng ñaït 3NF vì
thuoäc tính city phuï thuoäc baéc caàu
vaøo s#
Daïng chuaån 3Ví duï 3:
SUPPLIER ( s#, sname, cname, city )
F= { s# -> sname,
s# -> cname, cname -> city, s# -> city }
Khoùa : s#
Löôïc ñoà SUPPLIER khoâng ñaït 3NF vì
thuoäc tính city phuï thuoäc baéc caàu
vaøo s#
2NF
Chuaån hoùa CSDLChuaån hoùa CSDL
Daïng chuaån 3
Löôïc ñoà SUPPLIER neân ñöôïc phaân raõ thaønh caùc löôïc ñoà sau:
S ( s#, sname, cname )F= { s# -> sname, s# -> cname }Khoùa : s#
C ( cname, city )F= { cname -> city }Khoùa : cname
Daïng chuaån 3
Löôïc ñoà SUPPLIER neân ñöôïc phaân raõ thaønh caùc löôïc ñoà sau:
S ( s#, sname, cname )F= { s# -> sname, s# -> cname }Khoùa : s#
C ( cname, city )F= { cname -> city }Khoùa : cname
3NF
3NF
Chuaån hoùa CSDLChuaån hoùa CSDL
Daïng chuaån 3
Ví duï 4:
LOCATION ( city, street, zip-code )F = { city, street -> zip-code,
zip-code -> city
Khoùa1 : city, street
Khoùa2 : street, zip-code
Löôïc ñoà LOCATION ñaït 3NF vì thuoäc
tính city ôû veá phaûi cuûa FD zip-code -> city laø thuoäc tính nguyeân toá
Daïng chuaån 3
Ví duï 4:
LOCATION ( city, street, zip-code )F = { city, street -> zip-code,
zip-code -> city
Khoùa1 : city, street
Khoùa2 : street, zip-code
Löôïc ñoà LOCATION ñaït 3NF vì thuoäc
tính city ôû veá phaûi cuûa FD zip-code -> city laø thuoäc tính nguyeân toá
Chuaån hoùa CSDLChuaån hoùa CSDL
Daïng chuaån 3
LOCATION ( city, street, zip-code )
Daïng chuaån 3
LOCATION ( city, street, zip-code )
city street zip-code
NY 55th 484
NY 56th 484
LA 55th 473
LA 56th 473
LA 57th 474
Vaán ñeà coøn toàn taïi:
Söï laëp laïi cuûa <LA ... 473> vaø <NY ... 484>, bò raøng buoäc bôûi FD: zip-code -> city laø dö thöøa trong baûng LOCATION
Location
Chuaån hoùa CSDLChuaån hoùa CSDL
Daïng chuaån Boyce-Codd (Boyce-Codd Normal Form - BCNF)
Löôïc ñoà quan heä R ñaït BCNF neáu vôùi
moïi FDX->A ñuùng trong R thì X laø sieâu khoùa trong R
Daïng chuaån Boyce-Codd (Boyce-Codd Normal Form - BCNF)
Löôïc ñoà quan heä R ñaït BCNF neáu vôùi
moïi FDX->A ñuùng trong R thì X laø sieâu khoùa trong R
Chuaån hoùa CSDLChuaån hoùa CSDL
Daïng chuaån Boyce-CoddVí duï 5: SCL ( student, course, lecturer)
F= { student, course -> lecturer,
lecturer -> course }
Khoùa1 : student, course; Khoùa2: student, lecturer
Löôïc ñoà quan heä SCL khoâng ñaït BCNF vì
thuoäc tính lecturer khoâng laø sieâu khoùa
Löôïc ñoà quan heä SCL ñaït 3NF vì thuoäc tính
course ôû veá phaûi cuûa FD student, course ->
lecturer laø
thuoäc tính nguyeân toá
Daïng chuaån Boyce-CoddVí duï 5: SCL ( student, course, lecturer)
F= { student, course -> lecturer,
lecturer -> course }
Khoùa1 : student, course; Khoùa2: student, lecturer
Löôïc ñoà quan heä SCL khoâng ñaït BCNF vì
thuoäc tính lecturer khoâng laø sieâu khoùa
Löôïc ñoà quan heä SCL ñaït 3NF vì thuoäc tính
course ôû veá phaûi cuûa FD student, course ->
lecturer laø
thuoäc tính nguyeân toá
Chuaån hoùa CSDLChuaån hoùa CSDL
Daïng chuaån Boyce-Codd
Löôïc ñoà quan heä SCL ( student, course, lecturer)neân ñöôïc phaân raõ thaønh caùc löôïc
ñoà sau:
S ( student, course )Khoùa: student, course
L ( lecturer, course )F= { lecturer -> course }Khoùa: lecturer
Daïng chuaån Boyce-Codd
Löôïc ñoà quan heä SCL ( student, course, lecturer)neân ñöôïc phaân raõ thaønh caùc löôïc
ñoà sau:
S ( student, course )Khoùa: student, course
L ( lecturer, course )F= { lecturer -> course }Khoùa: lecturer
BCNF
BCNF
Chuaån hoùa CSDLChuaån hoùa CSDL
Chuaån hoùa caùc löôïc ñoà quan heä
Cho löôïc ñoà quan heä R ( A1, ..., An )
1. Xaùc ñònh caùc phuï thuoäc haøm
2. Xaùc ñònh caùc khoùa toái tieåu
3. Xaùc ñònh daïng chuaån cao nhaát
maø R thoûa
4. Phaân raõ R thaønh caùc löôïc ñoà
sao cho moãi löôïc ñoà ñaït BCNF
Chuaån hoùa caùc löôïc ñoà quan heä
Cho löôïc ñoà quan heä R ( A1, ..., An )
1. Xaùc ñònh caùc phuï thuoäc haøm
2. Xaùc ñònh caùc khoùa toái tieåu
3. Xaùc ñònh daïng chuaån cao nhaát
maø R thoûa
4. Phaân raõ R thaønh caùc löôïc ñoà
sao cho moãi löôïc ñoà ñaït BCNF
Chuaån hoùa CSDLChuaån hoùa CSDL
Chuaån hoùa caùc löôïc ñoà quan heä Ví duï 6:
S (s#, city, status, p#, qty )
F = { s# -> city,
s# -> status,
city -> status,
s#, p# -> qty,
s#, p# -> city,
s#, p# ->status }
Khoùa : s#, p#
Chuaån hoùa caùc löôïc ñoà quan heä Ví duï 6:
S (s#, city, status, p#, qty )
F = { s# -> city,
s# -> status,
city -> status,
s#, p# -> qty,
s#, p# -> city,
s#, p# ->status }
Khoùa : s#, p#
1NF
not 2NF
Chuaån hoùa CSDLChuaån hoùa CSDL
Chuaån hoùa caùc löôïc ñoà quan heä
S (s#, city, status, p#, qty )
Phaân raõ S thaønh caùc löôïc ñoà sau
SP ( s#, p#, qty)
F = { s#, p# -> qty }
SUPPLIER (s#, city, status )
F = { s# -> city, city -> status , s# -> status }
Chuaån hoùa caùc löôïc ñoà quan heä
S (s#, city, status, p#, qty )
Phaân raõ S thaønh caùc löôïc ñoà sau
SP ( s#, p#, qty)
F = { s#, p# -> qty }
SUPPLIER (s#, city, status )
F = { s# -> city, city -> status , s# -> status }
1NF
BCNFkhoùa: s#, p#
2NFkhoùa: s#
Chuaån hoùa CSDLChuaån hoùa CSDL
Chuaån hoùa caùc löôïc ñoà quan heä
Tieáp tuïc phaân raõ SUPPLIER (s#, city, status )
F = { s# -> city, s# -> status, city -> status }
thaønh:
SUPPLIER’ ( s#, city )F = { s# -> city }
LOCATION ( city, status )F = { city -> status }
Chuaån hoùa caùc löôïc ñoà quan heä
Tieáp tuïc phaân raõ SUPPLIER (s#, city, status )
F = { s# -> city, s# -> status, city -> status }
thaønh:
SUPPLIER’ ( s#, city )F = { s# -> city }
LOCATION ( city, status )F = { city -> status }
2NF
BCNF
BCNF
Chuaån hoùa CSDLChuaån hoùa CSDL
Chuaån hoùa caùc löôïc ñoà quan heäVí duï 7: SSC ( supplier, status, city}
F= { supplier -> status,
city -> status, supplier -> city }
Khoùa: supplier
2 caùch phaân raõ coù theå:
S ( supplier, city ) S ( supplier, status )F = {supplier -> city} F = {supplier -> status }
C ( city, status ) T ( supplier, city ) G = { city -> status } G = { supplier -> city }
Chuaån hoùa caùc löôïc ñoà quan heäVí duï 7: SSC ( supplier, status, city}
F= { supplier -> status,
city -> status, supplier -> city }
Khoùa: supplier
2 caùch phaân raõ coù theå:
S ( supplier, city ) S ( supplier, status )F = {supplier -> city} F = {supplier -> status }
C ( city, status ) T ( supplier, city ) G = { city -> status } G = { supplier -> city }
BCNF BCNF
2NFPhuï thuoäc baéc caàu
Định nghĩa khóa dựa trên tập phụ thuộc hàmCho R(U,F), U là tập thuộc tính, F là tập phụ thuộc hàm
trong R
Với X U, X là một khóa của R nếu: X->U F+ , và Y X, Y ≠ X, mà Y->U F+
R phải có ít nhất 1 khóa và có thể có nhiều khóa Chú ý:
Cho R(U), ta luôn có U->U. Nếu U thỏa điều kiện 2 ở trên thì U là khóa
Khóa của lược đồ quan hệ
Khóa chính (primary key): Là một siêu khóa tối tiểu được người phân tích chọn để cài đặt
Khóa dự tuyển (candidate key): Là các siêu khóa tối tiểu khác không được chọn làm khóa chính
Khi cài đặt vào CSDL, khoá dự tuyển trở thành khóa duy nhất (unique key) và còn được gọi là khóa thứ cấp (secondary key)
Khóa của lược đồ quan hệ
Khóa giúp cho việc nhận biết và tìm record một cách nhanh chóng trong các quan hệ
Ràng buộc đối với khóa chính: NOT NULL và UNIQUE
Ràng buộc đối với khóa dự tuyển: UNIQUE
Khóa của lược đồ quan hệ
Bao đóng của tập thuộc tính X tương ứng tập phụ thuộc hàm F (ký hiệu là XF
+) là tất cả các thuộc tính A sao cho X->A có thể được suy dẫn logic từ F
Thuật toán tìm XF+
Bao đóng của tập thuộc tính
X->A F+ <=> A XF+
Input: R(U, F), X U
Output: XF+
Phương pháp:
X0 = X;
Lặp: Xi+1 = Xi Z sao cho (Y->Z) F và Y Xi cho đến khi
Xi+1 = Xi
Ta có XF+ = Xi
Thuật toán tìm khoáCho R(U,F), các ký hiệu trong thuật toán tìm khoá: Uright(ULeft): Các thuộc tính ở vế phải của tất cả
các PTH N = U – Uright: Các thuộc tính cô lập (không xuất
hiện trong bất kỳ FD nào) và các thuộc tính chỉ xuất hiện ở vế trái của các FD
=> N khoá D = Uright – Uleft: Các thuộc tính chỉ xuất hiện ở vế
phải của các FD=> D khoá
L = U – (N D): là các thuộc tính có thể thuộc hoặc không thuộc khoá
Input: R(U, F)
Output: Các khoá của R
Phương pháp: N = U – Uright. Nếu NF
+ = U, thì N là khoá duy nhất của R. Giải thuật dừng Tìm D = Uright – Uleft, L = U – (N D): Với mọi Li L: Thử với từng Li, các Li có ít phần tử làm trước
X = N Li, Nếu XF+ = U thì X là một khoá của R
Lưu ý: Nếu X = N Li là khoá thì không thử với các Lj L mà Li Lj
Thuật toán tìm tất cả các khoá của một lược đồ quan hệ dựa trên tập PTH
Thuật toán tìm khoá (tt)
Phân rã (decomposition) một lược đồ quan hệ R(U) là thay R bằng tập các lược đồ quan hệ con R1, R2, .., Rk của R sao cho
U1 U2 … Uk = U, với Ui là tập thuộc tính của Ri, trong đó giao của các Ui không nhất thiết phải rỗng
Phân rã các lược đồ quan hệ
• Khi muốn khôi phục lại r (thể hiện của R) ta thực hiện phép kết của các ri ( thể hiện của Ri tương ứng)
• Hỏi:
• Dữ liệu lưu tại các ri có phản ánh trung thực r hay không?
• Khi cần có thể khôi phục lại được r từ các ri hay không?
Cho R(U,F). Nếu R được phân rã bởi phép phân rã ρ thành các Ri, sao cho với mọi thể hiện r(R) thoả tập phụ thuộc hàm F, ta có được r = s (với s có được bằng cách kết các ri), lúc đó ρ được gọi là một phân rã bảo toàn nội dung.
Phân rã bảo toàn nội dung
• Khi phân rã bảo toàn nội dung, r ban đầu luôn được tái tạo một các trung thực bằng cách kết nối các ri
• Kết trong trường hợp này gọi là kết không mất thông tin (lossless join)
Định lý:
Cho R(U,F). Phân rã R thành R1, R2 là bảo toàn nội dung (btnd) tương ứng với F nếu và chỉ nếu
R1 R2 -> R1 - R2 hay R1 R2 -> R2 - R1
Phân rã bảo toàn nội dung (tt)
Ví dụ: R(ABC), F = {A -> B}
• Nếu R được phân rã thành R1(AB) và R2(AC) thì btnd
• Nếu R được phân rã thành R1(AB) và R2(BC) thì không btnd
=> Một phép phân rã có btnd hay không là còn tùy thuộc vào tập pth
Phân rã bảo toàn phụ thuộc hàm
• Chiếu của một tập pth F trên tập thuộc tính Z, ký hiệu ¶Z(F), là tập các phụ thuộc hàm X -> Y trong F+ sao cho XY Z
• Khi phân rã R(U, F) thành các Ri(Ui, Fi) thì:
Ui = U và Fi = ¶Ui (F)
• Phép phân rã ρ là bảo toàn pth nếu:
Fi suy dẫn được tất cả các pth trong F
Phân rã bảo toàn phụ thuộc hàm (tt)
• Các pth trong F là các ràng buộc toàn vẹn trên R
• Khi phân rã btnd nhưng không bảo toàn pth thì dữ liệu có thể được phục hồi giống như ban đầu nhưng không đảm bảo ràng buộc toàn vẹn dữ liệu
• Những pth không được bảo toàn trong phép phân rã cần được kiểm tra, thông qua việc kết nối một số ri, trong quá trình cập nhật dữ liệu
• Trường hợp lý tưởng là phân rã vừa btnd vừa bảo toàn pth
• Chỉ những phép phân rã bảo toàn nội dung mới được cài đặt
Chuẩn hoá dữ liệu và các dạng chuẩn
Định nghĩa: Dạng chuẩn (normal form): Là trạng thái
của một quan hệ có được do áp dụng những quy tắc liên quan đến pth của quan hệ đó.
Chuẩn hoá dữ liệu (data normalization) là quá trình phân rã lược đồ quan hệ chưa chuẩn hoá (có dạng chuẩn thấp) thành các lược đồ quan hệ nhỏ hơn nhưng ở dạng chuẩn cao hơn (có cấu trúc tốt hơn)
Các bước chuẩn hoá Các bước chuẩn hoá dữ liệu
CSDL chöa chuaån hoùaToàn taïi thuoäc tính ña trò
CSDL ôû daïng chuaån 11NF
2NF
3NF
Boyce Codd Normal FormBCNF
4NF
5NF
Loaïi boû thuoäc tính ña trò
Loaïi boû PTH khoâng ñaày ñuû
Loaïi boû PTH baét caàu
Loaïi boû nhöõng dö thöøa cuûa
PTH
Loaïi boû nhöõng PTH
ña trò
Loaïi boû nhöõng dö thöøa phi
chuaån coøn laïi
Tổng kết về chuẩn hoá CSDL Mục tiêu của các dạng chuẩn trên quan hệ là
hạn chế những dư thừa trong dữ liệu lưu trữ. Những dư thừa dữ liệu là do phát sinh từ mối
liên quan giữa các mục dữ liệu thể hiện qua các phụ thuộc hàm.
Dư thừa dữ liệu dẫn đến những dị thường khi thêm, xoá, cập nhật dữ liệu.
Tổng kết về chuẩn hoá CSDL (tt) Trong 2NF và 3NF vẫn còn dư thừa dữ liệu
2NF: loại được sự phụ thuộc riêng phần vào khoá, vẫn tồn tại phụ thuộc bắc cầu vào khoá.
3NF: loại được sự phụ thuộc bắc cầu vào khoá đối với những thuộc tính không nguyên tố.
BCNF: loại bỏ mọi dư thừa dữ liệu mà phụ thuộc hàm có thể tạo ra (không thể suy ra giá trị tại một ô nào trong bảng bằng cách chỉ sử dụng các phụ thuộc hàm cùng với các số liệu đang có trong bảng).
Dạng chuẩn của 1 lược đồ csdl bằng với dạng chuẩn của lược đồ quan hệ có dạng chuẩn thấp nhất
Tổng kết về chuẩn hoá CSDL (tt) Để đạt được dạng chuẩn cao (ít dư thừa dữ
liệu), một lược đồ quan hệ thường được phân rã thành nhiều lược đồ quan hệ con.
Một lược đồ quan hệ luôn có thể được phân rã thành các lược đồ quan hệ con đạt 3NF vừa bảo toàn nội dung vừa bảo toàn phụ thuộc hàm.
Một lược đồ quan hệ luôn có thể được phân rã thành các lược đồ quan hệ con đạt BCNF bảo toàn nội dung nhưng có thể không bảo toàn được tập phụ thuộc hàm.