บทที่ 3 การออกแบบฐานข้อมูล database design ·...
TRANSCRIPT
บทที่ 3 การออกแบบฐานข้อมูล
1
วิชา การออกแบบและพฒันาซอฟตแ์วร์
อ เพยีรทิพย ์ศรีสุธรรม
2
การออกแบบฐานข้อมูลระดบัตรรกะ (แปลง ER-เป็น
แบบจาํลองฐานข้อมูลเชงิสัมพนัธ์)
กระบวนการปรับบรรทดัฐาน (The Normalization Process)
การออกแบบฐานข้อมูลระดบักายภาพ (Data Dictionary)
เนือ้หา
3
การออกแบบฐานข้อมูลระดบัตรรกะ
(Logical Database Design)
(การแปลง แบบจาํลอง E-R เป็น แบบจาํลองฐานข้อมูลเเชิงสมัพันธ)์
ER-Model
แบบจาํลองฐานข้อมูลเเชิงสมัพันธ์
การแปลงรปู ER-Diagram เป็น Relation
4
1.การแปลงเอนติตีป้กติและแอททริบิวท์ของเอนตติีป้กติ
2.การแปลงความสัมพนัธ์ระหว่างเอน็ติตี้
5
แอททริบิวต์แบบปกติ (Simple or Atomic Attribute)
เอน็ติตีป้กตแิต่ละเอนติตีใ้นแผนภาพ E-R จะถูกแปลงเป็นรีเลชั่น
ชื่อของรีเลชันจะเหมอืนกบัชื่อเอน็ติตี้
แต่ละแอททริบิวต์จะแปลงเป็นคอลมัย์ของรีเลชั่น
แอททริบิวต์ทีเ่ป็นตวัชี้เฉพาะ (ทีข่ดีเส้นใต้) จะถูกแปลงเป็นคยี์หลกัในรีเลชั่น
องค์ประกอบในแผนภาพ E-R องค์ประกอบในโมเดลฐานข้อมูลเชิงสัมพนัธ์
นักศึกษา
นักศึกษา
นักศึกษา
รหัสนักศึกษา
ชื่อนักศึกษาเพศ
สังกดัคณะรหัส
นักศึกษา
ชื่อนักศึกษา เพศ สังกดั
คณะ
การแปลงความสัมพนัธ์(Relationship) เป็น Relation (ตาราง)
6
one to one ไม่มกีารสร้าง relation ใหม่ แต่จะเป็นการปรับปรุงคู่รีเลชั่นทีม่คีวามสัมพนัธ์
กนัโดยการเพิม่เตมิฟิวด์ทีท่าํหน้าทีเ่ป็นคยี์นอก
one to many ไม่มกีารสร้าง relation ใหม่ แต่จะเป็นการปรับปรุงคู่รีเลชั่นทีม่คีวามสัมพนัธ์
กนัโดยการ เพิม่เตมิฟิวด์ทีท่าํหน้าทีเ่ป็นคยี์นอก
many to many จะต้องสร้าง Relation อนัใหม่ในกรณทีีเ่ป็น many to many
การแปลงความสัมพนัธ์(Relationship) เป็น Relation (ตาราง)
7
การแปลงความสัมพนัธ์ระหว่าง 2 เอน็ตติิ ้(แบบเงือ่นไขของเวลาเข้ามา
เกีย่วข้อง)
ความสัมพนัธ์ทั้ง 3 ชนิด (1:1, 1:M, M:N) เมือ่แปลงแล้วจะมกีาร
สร้าง relation ใหม่ 1 รีเลชั่น เกดิจากความสัมพนัธ์ ทีม่เีงือ่นไขเวลาเข้ามาเกีย่วข้อง
การแปลง one-to-one Relationship เป็น Relation (ตาราง)
8
แปลง Entity ที่สมัพันธก์นัไปเป็น Relation
เอา Primary Key ของ Entity ฝั่งใดฝั่งหนึ่งเป็น Foreign Key ของ Entity ฝั่งตรงกนัข้าม
11บริหาร
รหัสผู้รับผดิชอบ
โครงการชื่อ-สกลุ รหัสโครงการ
ชื่อโครงการ
โครงการผู้รับผดิชอบ
ผู้รับผดิชอบ (รหัสผู้รับผดิชอบโครงการ, ชื่อ-สกลุ)
โครงการ(รหัสโครงการ,ชื่อ, รหัสผู้รับผดิขอบโครงการ)
ผู้รับผดิชอบ(รหัสผู้รับผดิชอบโครงการ, ชื่อ-สกลุ,รหัสโครงการ)
โครงการ(รหัสโครงการ,ชื่อ)
คียน์อก
คียน์อก
หรือ
รหัส
ผู้รับผดิชอบ
ชื่อ-สกลุ รหัสโครงการ
01 Chanchai 1
02 Kittisak 2
03 Wittaya 3
รหัสโครงการ ชื่อ
1 โครงการสร้างเขื่อน
2 โครงการขดุลอกคูคลอง
3 โครงการสร้างฝายทดนํ้า
รหัส
ผู้รับผดิชอบ
ชื่อ-สกลุ
01 Chanchai
02 Kittisak
03 Wittaya
รหัส
โครงการ
ชื่อ รหัส
ผู้รับผดิชอบ
1 โครงการสร้างเขื่อน 01
2 โครงการขดุลอกคูคลอง 02
3 โครงการสร้างฝายทดนํ้า 03
ผู้รับผดิชอบ
โครงการ
กรณี 1 กรณี 2
9
ผู้รับผดิชอบ
โครงการ
การแปลง one-to-one Relationship เป็น Relation (ตาราง)
วธิีที่ 2
วธิีที่ 1
การแปลง one-to-one Relationship เป็น Relation (ตาราง) ทีม่เีวลาเข้ามาเกีย่วข้อง
10
11รับผดิชอบ
รหัสนักศึกษา ชื่อ-สกลุรหัสโปรเจค็
ชื่อโปรเจ๊ค
โปรเจค็นักศึกษา
ภาคเรียน ปีการศึกษา
จากตวัอยา่ง เป็น ER แสดงความสมัพนัธ์ ระหวา่งนกัศกึษากบัโปรเจ็คที่
รับผิดชอบ
เพื่อให้ตรวจสอบได้วา่ นกัศกึษาคนไหน ทําโปรเร็จอะไรเมื่อไหร่ ดงันัน้ ต้องระบุ
ด้วยวา่ ทําโปรเจ็คภาคเรียนใด ปีการศกึษาใด
(เพิ่มเตมิ)
การแปลง one-to-one Relationship เป็น Relation (ตาราง) ทีม่เีวลาเข้ามาเกีย่วข้อง
11
การแปลงความสมัพนัธ์ แบบ 1:1 ที่มีเงื่อนไขเรื่องเวลาเข้ามาด้วย จะต้อง
แปลงเป็นรีเลชัน่ใหมเ่กิดขึน้ ในตวัอยา่งคือ รีเลชัน่ การรับผิดชอบโปรเจ็ค
จากตวัอยา่งจะได้จะได้ทัง้หมด 3 รีเลชัน่คือ
นกัศกึษา
โปรเจ็ค
การรับผิดชอบโปรเจค็ (แปลงมาจาก 1:1 ที่มีเงื่อนไขเวลาเข้ามา
เกี่ยวข้องด้วย)
(เพิ่มเตมิ)
12
แอททริบิวต์ที่จะเป็น คีย์หลกั (Primary Key)ของรีเรชัน่ การรับผิดชอบโปรเจค็ คือ
ทางเลือกที่ 1
ใช้ คีย์หลักของ รีเลชั่น นักศึกษา และ คีย์หลักของรีเลชั่นโปรเจค็ ผลที่ได้คือ
การรับผิดชอบโปรเจค็(รหสันักศึกษา,รหสัโปรเจค็,ภาคเรียน,ปีการศึกษา)
ทางเลือกที่ 2
สร้างคีย์หลักขึน้มาใหม่ แต่นําคีย์หลักของ รีเลชั่น นักศึกษา และ คีย์หลักของรีเลชั่นโปร
เจค็ มาเป็นคีย์นอก
การรับผิดชอบโปรเจค(เลขที่โปรเจค็,รหสันักศึกษา,รหสัโปรเจค็,ภาคเรียน,ปีการศึกษา)
11รับผดิชอบ
รหัสนักศึกษา ชื่อ-สกลุ รหัสโปรเจค็ชื่อโปรเจ๊ค
โปรเจค็นักศึกษา
ภาค
เรียนปีการศึกษา
(เพิ่มเตมิ)
13
รหสันักศึกษา ชื่อ สกุล
49001 นายปราโมทย์ สินมั่นคง
49002 นายคงเดช มีถาวร
49003 นายปรีชา กจิตรง
นักศึกษา
รหสัโปรเจค็ ชื่อโปรเจค็
P01 ระบบหอพักออนไลน์
P02 ระบบขายออนไลน์
P03 ระบบประวัตบิุคลากร
P04 ระบบเช่ารถออนไลน์
โปรเจค็
รหสันักศึกษา รหสัโปรเจค็ ภาคเรียน ปีการศึกษา
49001 P01 2 2551
49002 P02 2 2552
49003 P03 2 2553
49001 P04 1 2552
การรับผิดชอบโปรเจค็ คีย์หลักของตาราง และ เป็นคีย์นอก ด้วย
(เพิ่มเตมิ)
ทางเลือกที่ 1
14
รหสันักศึกษา ชื่อ สกุล
49001 นายปราโมทย์ สินมั่นคง
49002 นายคงเดช มีถาวร
49003 นายปรีชา กจิตรง
นักศึกษารหสัโปรเจค็ ชื่อโปรเจค็
P01 ระบบหอพักออนไลน์
P02 ระบบขายออนไลน์
P03 ระบบประวัตบิุคลากร
P04 ระบบเช่ารถออนไลน์
โปรเจค็
รหสั รหสันักศึกษา รหสัโปรเจค็ ภาคเรียน ปีการศึกษา
1 49001 P01 2 2551
2 49002 P02 2 2552
3 49003 P03 2 2553
4 49001 P04 1 2552
การรับผิดชอบโปรเจค็
คีย์หลัก คีย์นอก คีย์นอก (เพิ่มเตมิ)
ทางเลือกที่ 2
15
การแปลง one-to-many Relationship เป็น Relation (ตาราง)
นาํ Primary Key ของ
Entity ฝั่ง One มาเป็น
Foreign Key ให ้Relation
ของ Entity ฝั่ง Many
Foreign Key
have
1
M
16
Customer_ID Customer_Name Customer_Address
01 นายธนภทัร ศรีสุธรรม กรุงเทพ
02 นางธญัญาพร ศรีแกว้ นนทบุรี
03 นายเอกชยั ปานมาก สมุทรปราการ
Order_Id Order_Date Customer_Id
OD01 11/01/53 01
OD02 12/01/53 01
OD03 12/03/53 02
CUSTOMER
ORDER
17
การแปลง one-to-many Relationship เป็น Relation (ตาราง) มเีวลามาเกีย่วข้อง
M1
รหัสอาจารย์ ชื่อ-สกลุ รหัสนักศึกษาชื่อ-สกลุ
นักศึกษาอาจารย์ เป็นทีป่รึกษา
ภาคการศึกษา ปีการศึกษา
จากตวัอยา่ง เป็น ER แสดงความสมัพนัธ์ ระหวา่งอาจารย์กบันกัศกึษา
เพื่อให้ตรวจสอบได้วา่ ในภาคเรียนและปีการศกึษาใดๆ อาจารย์แตล่ะคนเป็น
ที่ปรึกษานกัศกึษาคนไหนบ้าง
(เพิ่มเตมิ)
การแปลง one-to-one Relationship เป็น Relation (ตาราง) ทีม่เีวลาเข้ามาเกีย่วข้อง
18
การแปลงความสมัพนัธ์ แบบ 1:M ที่มีเงื่อนไขเรื่องเวลาเข้ามาด้วย จะต้อง
แปลงเป็นรีเลชัน่ใหมเ่กิดขึน้ ในตวัอยา่งคือ รีเลชัน่ การรับผิดชอบโปรเจ็ค
จากตวัอยา่งจะได้จะได้ทัง้หมด 3 รีเลชัน่คือ
นกัศกึษา
อาจารย์
การเป็นที่ปรึกษา (แปลงมาจาก 1:M ที่มีเงื่อนไขเวลาเข้ามาเกี่ยวข้อง
ด้วย)
(เพิ่มเตมิ)
19
แอททริบิวต์ที่จะเป็น คีย์หลกั (Primary Key)ของรีเรชัน่ การเป็นที่ปรึกษา คือ
ทางเลือกที่ 1 ใช้ คีย์หลักของ รีเลชั่น อาจารย์ (คือ รหสัอาจารย์)และ คีย์หลักของรีเลชั่นนักศึกษา (คือ รหสันักศึกษา) มาเป็นคีย์หลัก ในขณะเดยีวกัน ก็ทาํหน้าที่เป็นคีย์นอกด้วย ผลที่ได้
การเป็นที่ปรึกษา(รหสัอาจารย์,รหสันักศึกษา,ภาคการศึกษา,ปีการศึกษา)
ทางเลือกที่ 2 สร้างคีย์หลักขึน้มาใหม่ ในที่นีต้ัง้ชื่อให้เป็น รหสั แต่นําคีย์หลักของ รีเลชั่น อาจารย์ และ คีย์หลักของรีเลชั่นนักศึกษา มาเป็นคีย์นอก
การเป็นที่ปรึกษา(รหสั,รหสัอาจารย์,รหสันักศึกษา,ภาคการศึกษา,ปีการศึกษา)
M1
รหัสอาจารย์ ชื่อ-สกลุ รหัสนักศึกษาชื่อ-สกลุ
นักศึกษาอาจารย์ เป็นทีป่รึกษา
ภาคการศึกษา ปีการศึกษา
(เพิ่มเตมิ)
20
รหสันักศึกษา ชื่อ สกุล
49001 นายปราโมทย์ สินมั่นคง
49002 นายคงเดช มีถาวร
49003 นายปรีชา กจิตรง
50001 นายเอก ใจดี
นักศึกษา
รหสัอาจารย์ ชื่อ สกุล
T001 นางสาวออมสิน น่ารัก
T002 นางสาวนํา้ค้าง สวยดี
T003 นางสาวหนิง สวยมาก
อาจารย์
รหสัอาจารย์ รหสันักศึกษา ภาคเรียน ปีการศึกษา
T001 49001 2 2551
T002 49002 2 2552
T003 49003 2 2553
T001 50001 1 2554
การเป็นที่ปรึกษา
คีย์นอก คีย์นอก
คีย์หลัก
(เพิ่มเตมิ)
ทางเลือกที่ 1
21
อาจารย์
นักศึกษา
รหสั รหสันักศึกษา รหสัโปรเจค็ ภาคเรียน ปีการศึกษา
1 T001 49001 2 2551
2 T002 49002 2 2552
3 T003 49003 2 2553
4 T001 50001 1 2552
การเป็นที่ปรึกษา
คีย์หลัก คีย์นอก คีย์นอก
รหสันักศึกษา ชื่อ สกุล
49001 นายปราโมทย์ สินมั่นคง
49002 นายคงเดช มีถาวร
49003 นายปรีชา กจิตรง
50001 นายเอก ใจดี
รหสัอาจารย์ ชื่อ สกุล
T001 นางสาวออมสิน น่ารัก
T002 นางสาวนํา้ค้าง สวยดี
T003 นางสาวหนิง สวยมาก
(เพิ่มเตมิ)
ทางเลือกที่ 2
การแปลง many-to-many Relationship เป็น Relation (ตาราง)
สามารถแปลงความสมัพนัธ์ M:N ใหอ้ยูใ่นรูปของเอนติตี้เชิงสมัพนัธ์ (Associative
Entity) ได ้
จาก ER-Diagram การลงทะเบียนของนกัศึกษา ความสมัพนัธ์ “ลงทะเบียน”
สามารถแปลงใหอ้ยูใ่นรูป เอนติตี้เชิงสมัพนัธ์ ไดด้งัรูปต่อไป
22
รหัสน.ศชื่อ
สกลุ
ภาคเรียน ปีการศึกษา
เกรด
ลงทะเบียน
รหัสวชิา
หน่วยกติ
ชื่อวชิา
M N
นักศึกษา วชิา
เกรดเฉลีย่
23
รหัสน.ศชื่อ
สกลุ
ภาคเรียน
เกรด
รหัสวชิา
หน่วยกติ
ชื่อวชิา
M N
นักศึกษา วชิา
เกรดเฉลีย่
ปีการศึกษา
การลงทะเบียนM 11
ความสนัพนัธ์ ลงทะเบียน เปลี่ยนเป็นเอนติตี้เชิงสมัพนัธ์ การลงทะเบียน
ลงทะเบียน การลงทะเบียน
เพิ่มเตมิ
24
แปลงความสมัพนัธ์แบบ many-to-many ใหเ้ป็น Relation ใหม่
นาํคียห์ลกัของ เอนติตี้ทั้ง 2 เอนติตี้ที่มีความสมัพนัธ์กนั มาใส่เป็น คียห์ลกัของ Relation ที่เกิดจาก
ความสมัพนัธ์แบบ many to many (M:N)
ในกรณีที่ Relation ที่ไดจ้ากการแปลงความสมัพนัธ์ (M:N) มีแอททริบิวตท์ี่จาํเป็นตอ้งนาํมาเป็น
ประกอบของคียห์ลกัได ้เพื่อใหบ้อกความแตกต่างของแต่ละแถวได ้ตอ้งนาํมาเป็นส่วนหนึ่งของคีย์
หลกัดว้ย
ส่วนเอนติตี้อื่นๆ กแ็ปลงตามปกติเหมือนขั้นตอนก่อนหนา้ที่ไดก้ล่าวมาแลว้
จากตวัอย่าง จะได้ 3 relation คอื
1) นักศึกษา (รหัสน.ศ. ,ชื่อ, สกลุ, เกรดเฉลีย่)
2) วชิา (รหัสวชิา,ชื่อวชิา , หน่วยกติ)
3) การลงทะเบียน(รหัสนักศึกษา,รหัสวชิา,ภาคเรียน,ปีการศึกษา,เกรด)
แต่ต้องพจิารณาเงือ่นไขทีต่้องการด้วย เช่น ถ้าให้นักศึกษาสามารถลงทะเบยีนวชิาเดมิซํ้าได้เพราะไม่ผ่าน
ต้องกาํหนด ภาคเรียนกบัปีการศึกษาเป็นส่วนหนึ่งของคยี์หลกัด้วย ดงันั้นจะได้ผลลพัธ์ดงันี้
“การลงทะเบียน(รหัสนักศึกษา,รหัสวชิา,ภาคเรียน,ปีการศึกษา,เกรด)”
การแปลง many-to-many Relationship เป็น Relation (ตาราง)
1) นักศึกษา (รหัสนักศึกษา ,ชื่อ, สกลุ, เกรดเฉลีย่)
2) วชิา (รหัสวชิา,ชื่อวชิา , หน่วยกติ)
3) การลงทะเบียน( รหัสนักศึกษา ,รหัสวชิา , ภาคเรียน, ปีการศึกษา, เกรด)
ไดผ้ลลพัธท์ั้งหมด 3 relations
Relation ทีเ่กดิจาก
ความสัมพนัธ์แบบ
many to manyForeign key
คียน์อก
Foreign key
คียน์อก
Composite primary key (คียห์ลกัทีป่ระกอบดว้ยแอททริบวิตห์ลายตวั)
25
26
จงแปลงแบบจําลอง E-R ต่อไปนี ้เป็นแบบจําลองฐานข้อมูลเชิงสัมพนัธ์
N
M 1
M
รถยนต์
รหัสรถยนต์
ประเภท
รหัสประเภทชื่อประเภท
ผู้เช่า
รหัสผู้เช่า ชื่อ-สกลุ
จดัอยู่
เช่า
ทีอ่ยู่เบอร์โทรศัพท์
สี
ราคาซื้อเลขทะเบยีน
เลขทีบ่ัตรประชาชน
วนัทีเ่ช่า
วนัทีส่่งคนื
ค่าเช่า/วนั
แบบจาํลอง E-R ระบบเช่ารถยนต์
1
M
N
M 1
M
พนักงาน
รหัสพนักงาน
ตาํแหน่ง
รหัสตาํแหน่งชื่อตาํแหน่ง
ลูกค้า
รหัสลูกค้า ชื่อ-สกลุ
ดาํรง
สังกดั
ทีอ่ยู่เบอร์โทรศัพท์
เบอร์โทร
ทีอ่ยู่ชื่อ-สกลุ
เลขทีบ่ัตรประชาชน
ชื่อแผนกรหัสแผนก
แผนก
ดูแล
แบบจาํลอง E-R ระบบบุคลากร
1 1
M Nนักศึกษา
รหัสนักศึกษา
ห้องพกั
หมายเลขห้องพกัจาํนวนเตยีง
หอพกั
หมายเลหอพกั
ประเภทหอ
พกั
เบอร์โทร
ทีอ่ยู่ชื่อ-สกลุ
จาํนวนห้อง
ชื่อสกลุรหัสอาจารย์
อาจารย์ ดูแล
อตัราค่าห้อง
ปีการศึกษา ภาคเรียนเพศ
เบอร์โทร
ทีอ่ยู่เพศ
มี
1
M
แบบจาํลอง E-R ระบบหอพักนักศึกษา
Bill_detail
ER-Diagramของระบบการขายสินค้า
Customer
Cus_ID
Cus_name
Address
order
Bill_No
Bill_date
Employee
Emp_ID
Emp_name
salary
Product
Product_ID
Product_name
price
order_detail
1
M
1
M
1 M 1M
Amount
Price_s
TypeProductTypeID
TypeName
1
M
detail_date
Total_Pricehave
have
have
ความหมายและจุดประสงค์ของการนอร์มลัไลเซชั่น
ฟังก์ชันการขึน้ต่อกนั (Function Dependencies)
กระบวนการนอร์มลัไลเซชั่น
31
กระบวนการปรับบรรทดัฐาน (Normalization)
นอร์มลัไลเซชัน่ เป็นทฤษฎีที่ผูอ้อกแบบฐานขอ้มูลจะตอ้งนาํมาใชใ้นการ
แปลงขอ้มูลที่อยูใ่นรูปแบบที่ซบัซอ้น ใหอ้ยูใ่นรูปแบบที่ง่ายต่อการ
นาํไปใชง้านและก่อใหเ้กิดปัญหานอ้ยที่สุด
ในบทนี้จะสอนกระบวนการนอร์มลัไลเซชนั ใน 3 ระดบัดว้ยกนัคือ
นอร์มลัไลชัน่ระดบัที่ 1 หรือเรียกวา่ 1NF
นอร์มลัไลชัน่ระดบัที่ 2 หรือเรียกวา่ 2NF
นอร์มลัไลชัน่ระดบัที่ 3 หรือเรียกวา่ 3NF
32
ความหมายและจุดประสงค์ของการนอร์มลัไลเซชั่น
33
วิเคราะหค์วาม
ตอ้งการของผูใ้ช้E-R Diagram
รีเลชั่นทีม่รีูปแบบไม่เป็นบรรทดัฐาน
(Unnormalized relation)
1 NF
2 NF
3 NF
บอยด์ คอดด์
4 NF
รีเลชั่นทีม่เีป็นบรรแบบทดัฐาน
(Normalized relation)
กระบวนการปรับบรรทดั
ฐาน (Normalization)
ลดความซํ้ าซอ้นของขอ้มูล เมื่อลดความซํ้ าซอ้นกท็าํใหล้ดเนื้อหาที่ใช้
ในการจดัเกบ็ขอ้มูล
ลดปัญหาความไม่ถูกตอ้งของขอ้มูล เมื่อขอ้มูลไม่เกิดความซํ้ าซอ้นทาํ
ใหก้ารปรับปรุงขอ้มูลสามารถทาํไดจ้ากแหล่งขอ้มูลเพียงแหล่งเดียว
ลดความผดิพลาดที่อาจเกิดจากการปรับปรุงขอ้มูล (update anomalies)
ซึ่งประกอบดว้ย
34
วตัถุประสงค์ของนอร์มลัไลซ์ (Normalization)
ความซํ้าซ้อนและข้อผดิพลาดจากการปรับปรุงข้อมูล
35
แนวคิดหลกัอนัสาํคญัของการออกแบบฐานขอ้มูลเชิงสมัพนัธ์ คือ การ
ออกแบบใหม้ีการเกบ็ขอ้มูลซํ้ าซอ้นนอ้ยที่สุด
เพื่อประหยดัเนื้อที่ในการเกบ็ขอ้มูลและลดปัญหาที่จะเกิดดงัตวัอยา่ง
ต่อไปนี้
36
รหัสพนักงาน ชื่อ-สกลุ ตาํแหน่ง เงนิเดอืน รหัสสาขา ทีอ่ยู่
SG21 ชูชาติ สุขศรี ผูจ้ดัการ 30000 B005 เชียงใหม่
SG37 ศิริ ดวงเด่น ผูช้่วย 20000 B003 กรุงเทพ
SG14 ดวงใจ มีสุข เลขานุการ 20000 B003 กรุงเทพ
SG09 อจัฉรา เขียวแกว้ ผูจ้ดัการ 30000 B007 พิษณุโลก
รหัสพนักงาน ชื่อ-สกลุ ตาํแหน่ง เงนิเดอืน รหัสสาขา
SG21 ชูชาติ สุขศรี ผูจ้ดัการ 30000 B005
SG37 ศิริ ดวงเด่น ผูช้่วย 20000 B003
SG14 ดวงใจ มีสุข เลขานุการ 20000 B003
SG09 อจัฉรา เขียวแกว้ ผูจ้ดัการ 30000 B007
รหัสสาขา ทีอ่ยู่
B005 เชียงใหม่
B003 กรุงเทพ
B007 พิษณุโลก
Employee (พนักงาน) Branch (สาขา)
Employee_Branch (รวมรายละเอยีดของพนักงานไว้ด้วยกนักบัรายละเอยีดของสาขา)
ตวัอย่างการออกแบบฐานข้อมูลทีด่ี
ตวัอย่างการออกแบบฐานข้อมูลทีจ่ะมปีัญหาของความซํ้าซ้อนตามมา
37
ตวัอย่างปัญหาความซํ้าซ้อนในข้อมูล รีเลชั่น EMPLOYEE_BRANCE
ความผดิพลาดจากการเพิม่
oถ้าต้องการเพิม่พนักงานใหม่ ทีอ่ยู่สาขา B005
oจะต้องกรอก B005 และทีอ่ยู่สาขา คอื เชียงใหม่ เพิม่อกี
รหัสพนักงาน ชื่อ-สกลุ ตาํแหน่ง เงนิเดอืน รหัสสาขา ทีอ่ยู่
SG21 ชูชาติ สุขศรี ผูจ้ดัการ 30000 B005 เชียงใหม่
SG37 ศิริ ดวงเด่น ผูช้่วย 20000 B003 กรุงเทพ
SG14 ดวงใจ มีสุข เลขานุการ 20000 B003 กรุงเทพ
SG09 อจัฉรา เขียวแกว้ ผูจ้ดัการ 30000 B007 พิษณุโลก
38
ตวัอย่างปัญหาความซํ้าซ้อนในข้อมูล รีเลชั่น EMPLOYEE_BRANCE
รหัสพนักงาน ชื่อ-สกลุ ตาํแหน่ง เงนิเดอืน รหัสสาขา ทีอ่ยู่
SG21 ชูชาติ สุขศรี ผูจ้ดัการ 30000 B005 เชียงใหม่
SG37 ศิริ ดวงเด่น ผูช้่วย 20000 B003 กรุงเทพ
SG14 ดวงใจ มีสุข เลขานุการ 20000 B003 กรุงเทพ
SG09 อจัฉรา เขียวแกว้ ผูจ้ดัการ 30000 B007 พิษณุโลก
ความผดิพลาดจากการเพิม่
ถ้าต้องการเพิม่สาขา จะมปีัญหาคอื ตารางนีม้ทีั้งข้อมูลพนักงานและข้อมูล
สาขาอยู่รวมกนั
หากจะเพิม่เฉพาะ รหัสสาขา และ ทีอ่ยู่ กไ็ม่ได้เพราะ รหัสพนักงาน จะมคี่า
ว่างไม่ได้เพราะเป็น Primary Key ของตาราง
ดงันั้นจะบันทกึได้กต็่อเมือ่มพีนักงานแล้ว
39
ความผดิพลาดจากการลบข้อมูล
ถ้าลบข้อมูลหนึ่งแล้วส่งผลกระทบกบัข้อมูลอืน่ ทีต่้องถูกลบตาม
เช่น พนักงานรหัส SG21 ลาออก กล็บแถวนั้นออก
ข้อมูลสาขา B005 กจ็ะหายไปด้วย
ข้อผดิพลาดจากการเปลีย่นแปลง
ในกรณทีีต่้องการเปลีย่นแปลงข้อมูลบางตัวของสาขา
เช่น เปลีย่นทีอ่ยู่ของ B003 กต็้องเปลีย่นหลายที ่
ถ้าหากมพีนักงานสังกดัสาขานีห้ลายทีก่ต็้องไปตามแก้ทุก ๆ ที ่
ดงันั้นเราควรแยกตาราง Employee_Brance ออกเป็นสองตาราง คือ ตาราง
พนกังาน และตารางสาขา
40
พนักงาน
สาขา
รหัสพนักงาน ชื่อ-สกลุ ตาํแหน่ง เงนิเดอืน รหัสสาขา
SG21 ชูชาติ สุขศรี ผูจ้ดัการ 30000 B005
SG37 ศิริ ดวงเด่น ผูช้่วย 20000 B003
SG14 ดวงใจ มีสุข เลขานุการ 20000 B003
SG09 อจัฉรา เขียวแกว้ ผูจ้ดัการ 30000 B007
รหัสสาขา ทีอ่ยู่
B005 เชียงใหม่
B003 กรุงเทพ
B007 พิษณุโลก
ฟังก์ชั่นการขึน้ต่อกนั (Functional Dependency : FD)
ถ้าให้ X และ Y เป็น Attribute ใน Relation ใดๆ แทนด้วย
R(X,Y) Attribute Y เป็น จะถูกเรียกว่ามีฟังก์ชันการขึน้ต่อ
กันกับแอททริบวิต์ X กต็่อเมื่อ แต่ละค่าที่ไม่ซํา้กันของ
แอททริบวิต์ X มีข้อมูลของ Y ที่เกี่ยวข้องกับ X เพยีง 1 ค่า
เขียนแทนด้วย สัญลักษณ์ X Y
41
42
EmployeeNo Name Position
S01 ฉัตรชัย มีสมบัติ Manager
S02 เอกชัย ใจดี Manager Assistant
S03 มนีรัตน์ เจริญสุข Manager
S04 ขวญัชัย ใจเพชร Manager Assistant
S05 มานพ เกตุแก้ว Staff
S06 ดวงกมล ทพิย์เทพ Staff
ตวัอย่าง
EmployeeNo Position
ตวัอย่าง A) employeeNo Position
B) Position (not) employeeNo
43
EmployeeNo Position
employeeNo S21 Manager
Position EmployeeNo
Manager
employeeNo S41
employeeNo S21
A
B
การขึน้ต่อกนั ค่า X จะต้องกาํหนดค่า Y ได้ 1:1
1) Complete dependencies การขึน้ต่อกนัอย่างสมบูรณ์
แอททริบิวตท์ี่ไม่ใช่คียห์ลกั ขึ้นต่อ แอททริบิวตห์รือกลุ่มของแอททริบิวตท์ี่
เป็นคียห์ลกั
ตวัอยา่ง ตารางที่มีแอทริบิวตค์่าเดียวทาํหนา้ที่เป็นคียห์ลกั คือ หมายเลขบตัร
ประชาชน
หมายเลขบตัรประชาชน ชื่อเจา้ของบตัร
ชนิดของฟังก์ชั่นการขึน้ต่อกนั ( Functional Dependency :FD)
44
หมายเลขบตัรประชาชน ชื่อเจ้าของบัตร
3440100634931 กนกวรรณ พว่งพงษ์
3437283420343 ชาตชิาย เตชะวงศ์
2938742039485 กิ่งกาญ เดชาทรัพย์
45
ตัวอย่าง ตารางที่มีแอทริบิวต์หลายตัวขึ้นกบัคีย์หลักตัวเดียว
หมายเลขบตัรประชาชน ชื่อเจา้ของบตัร,วนัเกิด,วนัทีท่ําบตัร
ชนิดของฟังก์ชั่นการขึน้ต่อกนั ( Functional Dependency :FD)
หมายเลขบตัรประชาชน ชื่อเจ้าของบัตร วันเกดิ วันที่ทาํบตัร
3440100634931 กนกวรรณ พว่งพงษ์ 27/03/2520 28/04/2553
3437283420343 ชาตชิาย เตชะวงศ์ 23/06/2522 25/02/2553
2938742039485 กิ่งกาญ เดชาทรัพย์ 21/04/2525 19/0125/52
46
ตวัอย่าง ตารางที่มีแอทริบวิหลายตวัรวมกนัเป็นคีย์หลัก คือ รหัสนักศึกษา รหัสวิชา
ชนิดของฟังก์ชั่นการขึน้ต่อกนั ( Functional Dependency :FD)
รหสันักศึกษา รหสัวชิา เกรด
520014001 S001 A
520014001 S002 B
520014002 S001 C
520014002 S002 A
ตารางการลงทะเบียน
รหสันักศึกษา,รหสัวชิา เกรด
2) Partial Dependency (การขึ้นต่อกนับางส่วน)
เกิดขึ้นเมื่อคียห์ลกัประกอบดว้ยหลาย Attribute รวมกนั
เมื่อแอตทริบิวตบ์างส่วนของคียห์ลกั สามารถไประบุค่าแอตทริบิวตต์วัอื่น ๆ ที่
ไม่ใช่คียห์ลกัของรีเลชัน่ได ้
รหสันกัศึกษา รหสัวิชา เกรด ชื่อวิชา
Partial Dependency
รหสันักศกึษา, รหสัวชิา เกรด , ชื่อวชิา
รหสัวชิา ชื่อวชิา
ชนิดของฟังก์ชั่นการขึน้ต่อกนั ( Functional Dependency :FD)
47
48
ตวัอย่างฟังก์ชั่นการขึน้ต่อกนัแบบ Partial
รหัสนักศึกษา รหัสวชิา เกรด ชื่อวชิา
534267001 F01 A การเขยีนโปรแกรม
534267001 F02 B การออกแบบฐานข้อมูล
534267002 F01 D การเขยีนโปรแกรม
534267002 F02 A การออกแบบฐานข้อมูล
534267003 F01 A การเขยีนโปรแกรม
534267003 F02 C การออกแบบฐานข้อมูล
3 Transitive Dependency เกดิขึน้เมือ่ Attribute ทีไ่ม่ใช่ Primary Key ไปขึน้อยู่
กบั Attribute อืน่ทีไ่ม่ใช่ Primary Key ในรีเลชั่นนั้น ๆ
เลขประจาํตวั ชื่อ สกุล ที่อยู่ ตาํแหน่ง รถประจาํตาํแหน่ง
01 ฉัตรชัย มสีมบัติ กรุงเทพ ผู้จัดการ BMW
02 เอกชัย ใจดี นนทบุรี ผู้ช่วยผู้จัดการ Honda
03 มนีรัตน์ เจริญสุข เชียงใหม่ ผู้จัดการ BMW
04 ขวญัชัย ใจเพชร ราชบุรี ผู้ช่วยผู้จัดการ Honda
คาํอธิบาย เลขประจาํตวั เป็นคยี์หลกั (Primary Key) ของตาราง
เลขประจาํตวั ชื่อสกลุ, ทีอ่ยู่, ตาํแหน่ง
ตาํแหน่ง รถประจาํตาํแหน่ง
ชนิดของฟังก์ชั่นการขึน้ต่อกนั (Functional Dependency : FD)
49
Normalization คือ กระบวนการปรับปรุงโครงสร้างขอ้มูลของฐานขอ้มูลที่มีความ
ซํ้ าซอ้นใหอ้ยูใ่นรูปแบบที่เป็นบรรทดัฐาน (Normal Form)
การนอร์มลัไลเซชนัมีไดถ้ึง 5 ระดบั ในระดบัที่ 3 กจ็ดัวา่เพียงพอสาํหรับการ
ออกแบบฐานขอ้มูลในปัจจุบนั
1NF - กาํจดั repeating group
(กาํจดักลุ่มของขอ้มลูที่มีความซํ้ าซอ้น)
2NF - กาํจดั partial dependency
(กาํจดัการขึ้นต่อกนับางส่วน)
3NF - กาํจดั transitive dependency
(กาํจดัการขึ้นต่อกนัของแอตทริบิวทท์ี่ไม่ใช่คียห์ลกั)
นอร์มลัไลซ์เซชั่น (Normalization)
50
51
First Normal Form (1NF)
ทุก Attribute ในแต่ละ record จะเป็น single value ไม่ม ีค่าของกลุ่ม ข้อมูลทีซ่ํ้า
กนั (Repeating Group)
ข้อมูลทุกแถว (Tuple) ต้องมคี่าไม่ซํ้ากนั
รหัสนักศึกษา ชื่อ นามสกลุ รหัสวชิาทีล่งทะเบียน
001 สมชาย สมใจนึก 204-101
204-204
204-205
002 ธีรชาย บุญมาศ 204-102
204-204
ตารางทีม่ลีกัษณะข้อมูลเป็น Repeating group
Repeating Group
52
Second Normal Form (2NF)
1. ต้องเป็น First Normal Form (1NF) มาก่อน
2. ต้องไม่ม ีPartial Dependency (การขึน้ต่อกนับางส่วน)
สรุปกค็อื นอร์มลัไลเซชันระดบัที ่ 2 (Second normal form : 2NF) เป็น
การขจัดแอตตริบวิที่ ไม่ขึน้กบัทั้งส่วนของคยี์หลกั ออกไป เพือ่ให้แอตต
ริบิวอืน่ทั้งหมดขึน้ตรงกบัส่วนทีเ่ป็นคยี์หลกัทั้งหมดเท่านั้น
54
55
ตวัอย่างตารางที่ Partial Dependency (การขึน้ต่อกันบางส่วน)รหัสนักศึกษา รหัสวชิา เกรด ชื่อวชิา
534267001 F01 A การเขยีนโปรแกรม
534267001 F02 B การออกแบบฐานข้อมูล
534267002 F01 D การเขยีนโปรแกรม
534267002 F02 A การออกแบบฐานข้อมูล
534267003 F01 A การเขยีนโปรแกรม
534267003 F02 C การออกแบบฐานข้อมูล
รหสันกัศึกษา รหสัวิชา เกรด ชื่อวิชาPartial Dependency
รหสันักศกึษา, รหสัวชิา เกรด ,ชื่อวชิา
รหสัวชิา ชื่อวชิา
Second Normal Form (2NF)
วธิีขจดัปัญหา
1) ต้องสร้างตารางเพิม่
2) นําคอลมัย์ทีม่ปีัญหาไปใส่ในตารางทีส่ร้างเพิม่
3) กาํหนดคยี์หลกัให้กบัตารางทีส่ร้างใหม่
4) แอททริบิวต์ใดในตารางเดมิ เมือ่นําไปใส่ในตารางใหม่ ให้ตดัออกจาก
ตารางเดมิ ยกเว้น ส่วนของคยี์หลกั คงไว้ในตารางเดมิ
56
57
ตารางนีเ้มื่อทาํให้อยู่ใน
รูป 2 NF จะได้ 2
ตารางดงันี ้
รหัสนักศึกษา รหัสวชิา เกรด ชื่อวชิา
534267001 F01 A การเขยีนโปรแกรม
534267001 F02 B การออกแบบฐานข้อมูล
534267002 F01 D การเขยีนโปรแกรม
534267002 F02 A การออกแบบฐานข้อมูล
534267003 F01 A การเขยีนโปรแกรม
534267003 F02 C การออกแบบฐานข้อมูล
รหัสนักศึกษา รหัสวชิา เกรด
534267001 F01 A
534267001 F02 B
534267002 F01 D
534267002 F02 A
534267003 F01 A
534267003 F02 C
รหัสวชิา ชื่อวชิา
F01 การเขยีนโปรแกรม
F02 การออกแบบฐานข้อมูล
ตารางผลการเรียน
ตารางผลการเรียน ตารางวิชา
58
รหัสผู้เข้า
อบรม
รหัสครอส
อบรม
ชื่อผู้เข้าอบรม ชื่อครอสอบรม ผลการทดสอบ
0001 TR01 นายเอ ใจดี การซ่อมไฟฟ้า ผา่น
0001 TR05 นายเอ ใจดี การซ่อมตูเ้ยน็ ผา่น
0002 TR03 นางบี ใจกลา้ การทาํอาหาร ไม่ผา่น
0002 TR09 นางบี ใจกลา้ การเลี้ยงเดก็ ผา่น
0003 TR01 นายรวย มีเงิน การซ่อมไฟฟ้า ผา่น
0003 TR05 นายรวย มีเงิน การซ่อมตูเ้ยน็ ไม่ผา่น
ตารางผลการอบรม
ให้นักศกึษานอมัลไลซ์ตารางนีใ้ห้อยู่ในรูปแบบ 2NF
Third Normal Form (3NF)
1.Relation นั้นจะตอ้งมีคุณสมบตัิ 2NF
2.ตอ้งไม่มีความสมัพนัธ์ระหวา่ง Non-key Attribute หรือ
ไม่มี Transitive Dependency
สรุป : แอททริบิวตท์ี่ไม่ใช่คียห์ลกั ตอ้งไม่ขึ้นต่อกนัเอง
59
Third Normal Form (3NF)
วธิขีจดัปญัหา
1. สรา้งตารางเพิม่
2. นาํแอททรบิวิตท์ีม่ปีญัหามาใส่ในตารางใหม่
3. กาํหนดคยีห์ลกั
4. แอททรบิวิตท์ีย่า้ยจากตารางเดมิไปใส่ในตารางใหมใ่หต้ดัออก
จากตารางเดมิ
5. นาํคยีห์ลกัในขอ้ 3 ไปใส่ในตารางเดมิ
60
61
คียห์ลกัของตารางนี้คือ รหสัพนกังาน
จากตารางยงัมีฟังกช์ัน่การขึ้นต่อกนัแบบ Transitive Dependency อยู ่คือ
รหสัแผนก ซึ่งไม่ใช่คียห์ลกัของตาราง แต่สามารถระบุค่า ชื่อแผนก ได ้คือ ถา้รู้
รหสัแผนก กจ็ะรู้ชื่อแผนก
จากตารางข้างบน ทาํให้อยู่ในรูป 3 NF จะได้ 2 ตารางข้างล่างนี้
รหัสพนักงาน ชื่อสกลุ รหัสแผนก ชื่อแผนก เงนิเดอืน
P001 นพเกศ แกว้ใส A001 บญัชี 25000
P002 วารุณี รวดเร็ว F001 การเงิน 30000
รหสัแผนก ชื่อแผนก
A001 บญัชี
F001 การเงิน
รหสัพนักงาน ชื่อสกุล เงนิเดอืน
P001 นพเกศ แก้วใส 25000
P002 วารุณี รวดเร็ว 30000
รหสัแผนก
A001
F001
สรุป Normalization
1NF ทุกแอททริบิวตใ์นแต่ละแถวมีค่าของขอ้มูลเพียงค่าเดียว
2NF รีเลชนันั้นตอ้งไม่มีความสมัพนัธ์ระหวา่งแอททริบิวตแ์บบบางส่วน
(แอททริบิวตท์ุกตวัตอ้งขึ้นกบัคียห์ลกัทุกตวั ไม่ขึ้นอยูก่บัตวัใดตวัหนึ่ง)
3NF ทุกแอททริบิวตท์ี่ไม่ใช่คียห์ลกัไม่มีคุณสมบตัิในการกาํหนดค่าของ
แอททริบิวตอ์ื่น
62
63
แบบฝึกหัด
เลขที่ใบส ัง่
ซื้ อ
วนัที่ซื้อ รหสัลูกคา้ ชื่อผูส้ ัง่ รหสัสนิคา้ ชื่อสนิคา้ จาํนวนที่ซื้อ ราคาต่อ
หน่วย
OR001 02/09/2552 C001 เดวดิ AB12 ตูเ้ยน็ 4 4000
CD01 พดัลม 3 2000
PC09 แอร ์ 4 6000
OR002 02/09/2552 C005 ไมเคลิ TP01 เตาอบ 3 3000
CD01 พดัลม 2 2000
ให้นักศึกษาแปลงตารางต่อไปนีใ้ห้อยู่ในรูป NF1-NF3 โดยละเอยีด
การสั่งสินค้า