ความแตกต่างระหว่าง BCNF และ 3NF
การใช้นิยาม BCNF
ถ้าหากว่าสำหรับการขึ้นต่อกันทุกครั้งของ X → Y จะต้องมีเงื่อนไขอย่างน้อยหนึ่งข้อต่อไปนี้ :
- X → Y คือการพึ่งพาการทำงานเล็กน้อย (Y ⊆ X) หรือ
- X คือกุญแจสำคัญสำหรับ schema R
และคำจำกัดความ 3NF
ถ้าหากว่าสำหรับการขึ้นต่อกันของฟังก์ชั่น X และ A นั้นมีเงื่อนไขอย่างน้อยหนึ่งข้อต่อไปนี้:
- X มี A (นั่นคือ X → A เป็นการพึ่งพาการทำงานเล็กน้อย) หรือ
- X คือซุปเปอร์คีย์หรือ
- องค์ประกอบของ AX ทุกชุดความแตกต่างระหว่าง A และ X เป็นคุณลักษณะเฉพาะ (เช่นแต่ละแอตทริบิวต์ใน AX มีอยู่ในคีย์ตัวเลือกบางตัว)
เราเห็นความแตกต่างดังต่อไปนี้ในแง่ง่าย ๆ :
- ใน BCNF : ทุกที่สำคัญบางส่วน (แอตทริบิวต์ที่สำคัญ) สามารถเท่านั้นขึ้นอยู่กับ superkey ที่
แต่ทว่า
- ใน 3NF : คีย์บางส่วน (คุณสมบัติหลัก) ยังสามารถขึ้นอยู่กับแอตทริบิวต์ที่ไม่ใช่ superkey (เช่นคีย์ / ไพรม์คีย์บางส่วนหรือแอตทริบิวต์ที่ไม่ใช่ไพรม์)
ที่ไหน
- แอตทริบิวต์ที่สำคัญเป็นคุณลักษณะที่สำคัญที่พบในผู้สมัครและ
- ที่สำคัญผู้สมัครเป็น superkey น้อยที่สุดสำหรับความสัมพันธ์นั้นและ
- superkeyคือชุดของคุณลักษณะของตัวแปรความสัมพันธ์สำหรับการที่จะถือได้ว่าในความสัมพันธ์ทั้งหมดที่กำหนดให้ตัวแปรที่ไม่มีสองสิ่งอันดับที่แตกต่างกัน (แถว) ที่มีค่าเหมือนกันสำหรับแอตทริบิวต์ที่อยู่ในนี้ set.Equivalently superkey ยังสามารถ ถูกกำหนดให้เป็นชุดของคุณลักษณะของสคีมาความสัมพันธ์ซึ่งคุณลักษณะทั้งหมดของสคีมานั้นขึ้นอยู่กับการใช้งาน (Superkey มีคีย์ผู้สมัคร / คีย์ผู้สมัครอยู่เสมอเป็นชุดย่อยของ superkey คุณสามารถเพิ่มคุณลักษณะใด ๆ ในความสัมพันธ์เพื่อให้ได้หนึ่งในคีย์ซุปเปอร์)
นั่นคือไม่มีส่วนย่อยบางส่วน (ส่วนย่อยที่ไม่สำคัญยกเว้นชุดเต็ม) ของคีย์ตัวเลือกสามารถขึ้นอยู่กับหน้าที่อื่นใดนอกจาก superkey
ตาราง / ความสัมพันธ์ที่ไม่ได้อยู่ใน BCNF ขึ้นอยู่กับความผิดปกติเช่นความผิดปกติในการอัพเดทที่กล่าวถึงในตัวอย่างพิซซ่าโดยผู้ใช้รายอื่น น่าเสียดาย,
- ไม่สามารถรับ BNCF ได้ในขณะที่
- 3NF สามารถรับได้เสมอ
3NF กับ BCNF ตัวอย่าง
ตัวอย่างของความแตกต่างสามารถพบได้ที่ " 3NF ตารางไม่พบ BCNF (รูปแบบปกติ Boyce – Codd) " บน Wikipedia ซึ่งตารางต่อไปนี้ตรงกับ 3NF แต่ไม่ใช่ BCNF เพราะ "สนามเทนนิส" (แอตทริบิวต์บางส่วนของคีย์ / นายกรัฐมนตรี) บน "ประเภทอัตรา" (แอตทริบิวต์คีย์ / ไพรม์บางส่วนที่ไม่ใช่ซุปเปอร์คีย์) ซึ่งเป็นการอ้างอิงที่เราสามารถตรวจสอบได้โดยถามลูกค้าของฐานข้อมูลสโมสรเทนนิส:
การจองสนามเทนนิสในวันนี้ ( 3NF ไม่ใช่ BCNF )
Court Start Time End Time Rate Type
------- ---------- -------- ---------
1 09:30 10:30 SAVER
1 11:00 12:00 SAVER
1 14:00 15:30 STANDARD
2 10:00 11:30 PREMIUM-B
2 11:30 13:30 PREMIUM-B
2 15:00 16:30 PREMIUM-A
Superkeys ของตารางคือ:
S1 = {Court, Start Time}
S2 = {Court, End Time}
S3 = {Rate Type, Start Time}
S4 = {Rate Type, End Time}
S5 = {Court, Start Time, End Time}
S6 = {Rate Type, Start Time, End Time}
S7 = {Court, Rate Type, Start Time}
S8 = {Court, Rate Type, End Time}
ST = {Court, Rate Type, Start Time, End Time}, the trivial superkey
ปัญหา 3NF : แอตทริบิวต์คีย์ / นายกรัฐมนตรีบางส่วน "Court" ขึ้นอยู่กับสิ่งอื่นที่ไม่ใช่ superkey แต่ขึ้นอยู่กับแอตทริบิวต์คีย์ / นายกบางส่วน "ประเภทอัตรา" แทน ซึ่งหมายความว่าผู้ใช้จะต้องเปลี่ยนประเภทอัตราด้วยตนเองหากเราอัพเกรดศาลหรือเปลี่ยนศาลด้วยตนเองหากต้องการใช้การเปลี่ยนแปลงอัตรา
- แต่ถ้าผู้ใช้อัปเกรดศาล แต่จำไม่ได้ว่าต้องเพิ่มอัตรา หรือถ้าประเภทอัตราที่ผิดถูกนำไปใช้กับศาล
(ในด้านเทคนิคเราไม่สามารถรับประกันได้ว่า "ประเภทอัตรา" -> "ศาล" ขึ้นอยู่กับการใช้งานจะไม่ถูกละเมิด)
วิธีการแก้ปัญหา BCNF : ถ้าเราต้องการวางตารางด้านบนใน BCNF เราสามารถแยกความสัมพันธ์ที่กำหนด / ตารางออกเป็นสองความสัมพันธ์ / ตารางต่อไปนี้ (สมมติว่าเรารู้ว่าประเภทอัตราขึ้นอยู่กับศาลและสถานะสมาชิกเท่านั้นซึ่งเราสามารถ ค้นพบโดยถามลูกค้าของฐานข้อมูลของเราเจ้าของสโมสรเทนนิส):
ประเภทอัตรา ( BCNFและ 3NF ที่อ่อนกว่าซึ่งแสดงนัยโดย BCNF)
Rate Type Court Member Flag
--------- ----- -----------
SAVER 1 Yes
STANDARD 1 No
PREMIUM-A 2 Yes
PREMIUM-B 2 No
การจองสนามเทนนิสในวันนี้ ( BCNFและ 3NF ที่อ่อนกว่าซึ่งบ่งบอกโดย BCNF)
Member Flag Court Start Time End Time
----------- ----- ---------- --------
Yes 1 09:30 10:30
Yes 1 11:00 12:00
No 1 14:00 15:30
No 2 10:00 11:30
No 2 11:30 13:30
Yes 2 15:00 16:30
แก้ไขปัญหา : ตอนนี้ถ้าเราอัปเกรดศาลเราสามารถรับประกันประเภทอัตราจะสะท้อนถึงการเปลี่ยนแปลงนี้และเราไม่สามารถเรียกเก็บราคาผิดสำหรับศาล
(ในข้อตกลงทางเทคนิคเราสามารถรับประกันได้ว่าการทำงานของ "ประเภทอัตรา" -> "ศาล" จะไม่ถูกละเมิด)