Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> SQL

รูปแบบปกติ Boyce-Codd (BCNF)


BCNF เป็นการขยายจากรูปแบบปกติที่ 3 (3NF) และมีความเข้มงวดกว่า 3NF นิดหน่อย

ความสัมพันธ์ R จะอยู่ใน BCNF ถ้า P → Q เป็นการอ้างอิงฟังก์ชันที่ไม่ซับซ้อน (trivial functional dependency) และ P เป็นคีย์ซูเปอร์ (superkey) สำหรับ R

ถ้าความสัมพันธ์อยู่ใน BCNF หมายความว่าความซ้ำซ้อนที่อิงจากการอ้างอิงฟังก์ชันถูกลบออกแล้ว แต่ยังคงมีความซ้ำซ้อนบางส่วนอยู่

ลองดูตัวอย่างด้านล่างนี้ -

<SportsClub>

สนาม
เวลาเริ่ม
เวลาสิ้นสุด
แพ็กเกจ
G01
07:00
09:00
Gold
G01
10:00
12:00
Gold
G01
10:30
11:00
Bronze
G02
10:15
11:15
Silver
G02
08:00
09:00
Silver


ความสัมพันธ์ข้างต้นอยู่ใน 1NF, 2NF, 3NF แต่ ไม่อยู่ใน BCNF เหตุผลคือ -

การอ้างอิงฟังก์ชัน {Package → Ground}

แอตทริบิวต์ที่เป็นตัวกำหนด (determinant) คือ Package ซึ่ง Ground ขึ้นอยู่กับมัน ไม่ใช่คีย์หลัก (Candidate Key) และไม่ใช่ซูเปอร์เซตของคีย์หลัก

<Package>

แพ็กเกจ
สนาม
Gold
G01
Silver
G02
Bronze
G01


<TomorrowBookings>

สนาม
เวลาเริ่ม
เวลาสิ้นสุด
G01
07:00
09:00
G01
10:00
12:00
G01
10:30
11:00
G02
10:15
11:15
G02
08:00
09:00


ตอนนี้ตารางข้างต้นอยู่ใน BCNF แล้ว

คีย์หลักของตาราง <Package> คือ Package และ Ground

คีย์หลักของตาราง <TomorrowBookings> คือ {Ground, Begin_Time} และ {Ground, End_Time}

ความผิดปกติ (anomaly) ถูกกำจัดเพราะเราใช้ Package เป็นคีย์ในความสัมพันธ์ <Package>