ความแตกต่างระหว่าง 3NF และ BCNF ในแง่ง่าย (ต้องสามารถอธิบายได้ถึง 8 ปี)


157

ฉันได้อ่านคำพูด: ข้อมูลขึ้นอยู่กับกุญแจ [1NF] คีย์ทั้งหมด [2NF] และไม่มีอะไร แต่ที่สำคัญ [3NF]

อย่างไรก็ตามฉันมีปัญหาในการทำความเข้าใจ 3.5NF หรือ BCNF ตามที่เรียกว่า นี่คือสิ่งที่ฉันเข้าใจ:

  • BCNF เข้มงวดกว่า 3NF
  • ด้านซ้ายของ FD ใด ๆ ในตารางจะต้องเป็นปุ่ม Superkey (หรืออย่างน้อยหนึ่งปุ่มตัวเลือก)

แล้วเหตุใดตาราง 3NF บางตัวจึงไม่อยู่ใน BCNF ฉันหมายถึงคำพูด 3NF พูดอย่างชัดเจนว่า "ไม่มีอะไรนอกจากกุญแจ" หมายความว่าแอตทริบิวต์ทั้งหมดขึ้นอยู่กับคีย์หลักเท่านั้น คีย์หลักคือคีย์ตัวเลือกจนกว่าจะได้รับเลือกให้เป็นคีย์หลักของเรา

หากมีอะไรผิดปกติเกี่ยวกับความเข้าใจของฉันโปรดแก้ไขฉันและขอบคุณสำหรับความช่วยเหลือที่คุณสามารถให้ได้


นั่นเป็นความรู้สึกแปลก ๆ ที่ตำราเรียนที่ตีพิมพ์เท่านั้นอาจให้คำอธิบายที่กระชับและแม่นยำเกี่ยวกับแนวคิด หากคุณดูคำตอบสำหรับคำถามนี้ (เก่าจริงๆ) คุณจะเห็นว่าไม่มีรายการใดที่มีคะแนนสูงหรือคลุมเครือ การมีคำนิยามเกี่ยวกับพีชคณิตไม่ใช่ปัญหา แต่การเข้าใจแนวคิดผ่านตัวอย่างในโลกแห่งความเป็นจริงคือ สำหรับคำพูดในคำถามเดิมของฉัน google "ดังนั้นช่วยฉัน Codd" เพื่อค้นหาที่มาของคำพูด ไม่มีอะไรคลุมเครือเกี่ยวกับมัน
Arnab Datta

1
คุณคิดว่าแหล่งที่มาที่ไม่ใช่ตำราได้รับข้อมูลจากที่ใด มีหนังสือเรียนที่น่าสงสารมากมายเช่นกัน แต่หนังสือเล่มนี้ถูกตรวจสอบโดยคนหลายคนที่มีการศึกษาเชิงวิชาการและมีแนวโน้มที่จะไม่ไร้สาระมากกว่าการตีความตำราอื่น ๆ เรตติ้งสูงโดยคนที่ไม่รู้ & คนที่เข้าใจผิดไม่ได้ทำให้อะไรถูกต้อง ฉันใส่ความคิดเห็นนั้นสำหรับผู้ที่มาถึงคำถามของคุณ วลี "ไม่มีอะไรนอกจากคีย์" นั้นน้อยกว่าไร้ประโยชน์ การมีคำจำกัดความที่ถูกต้องเป็นปัญหาอย่างแน่นอนเพราะ "การทำความเข้าใจแนวคิด" นั้นเป็นไปไม่ได้หากไม่มีอย่างใดอย่างหนึ่ง
philipxy

คำตอบ:


162

พิซซ่าของคุณมีประเภทท็อปปิ้งสามประเภท:

  • ชีสชนิดหนึ่ง
  • เนื้อสัตว์ชนิดหนึ่ง
  • ผักประเภทหนึ่ง

ดังนั้นเราจึงสั่งพิซซ่าสองอันและเลือกรสชาติต่อไปนี้:

Pizza    Topping     Topping Type
-------- ----------  -------------
1        mozzarella  cheese
1        pepperoni   meat
1        olives      vegetable
2        mozzarella  meat
2        sausage     cheese
2        peppers     vegetable

เดี๋ยวก่อนมอสซาเรลล่าไม่สามารถเป็นทั้งชีสและเนื้อสัตว์ได้! และไส้กรอกไม่ใช่ชีส!

เราจำเป็นต้องป้องกันไม่ให้แปลก ๆ เหล่านี้ของความผิดพลาดที่จะทำให้ mozzarella เสมอเป็นชีส เราควรใช้ตารางแยกต่างหากสำหรับเรื่องนี้ดังนั้นเราจึงเขียนความจริงนั้นไว้ในที่เดียว

Pizza    Topping
-------- ----------
1        mozzarella
1        pepperoni
1        olives
2        mozzarella 
2        sausage
2        peppers

Topping     Topping Type
----------  -------------
mozzarella  cheese
pepperoni   meat
olives      vegetable
sausage     meat
peppers     vegetable

นั่นคือคำอธิบายที่ว่า 8 ปีอาจเข้าใจ นี่คือรุ่นทางเทคนิคเพิ่มเติม

BCNF ทำหน้าที่แตกต่างจาก 3NF เฉพาะเมื่อมีคีย์ผู้สมัครหลายคนที่ทับซ้อนกัน

เหตุผลก็คือว่าพึ่งพาการทำงานX -> Yเป็นหลักสูตรที่จริงถ้าเป็นส่วนหนึ่งของY Xดังนั้นในตารางใด ๆ ที่มีคีย์ตัวเลือกเดียวและอยู่ใน 3NF มันมีอยู่แล้วใน BCNF เพราะไม่มีคอลัมน์ (ทั้งคีย์หรือไม่ใช่คีย์) ซึ่งขึ้นอยู่กับหน้าที่ใด ๆ นอกเหนือจากคีย์นั้น

เนื่องจากพิซซ่าแต่ละตัวจะต้องมีประเภทของการเติมหน้าหนึ่งชนิดเท่านั้นเราจึงรู้ว่า (Pizza, Topping Type) เป็นรหัสผู้สมัคร เรารู้ด้วยสัญชาตญาณว่าเครื่องประดับที่กำหนดไม่สามารถอยู่ในประเภทที่แตกต่างกันพร้อมกัน ดังนั้น (Pizza, Topping) จะต้องไม่ซ้ำกันดังนั้นจึงเป็นรหัสผู้สมัคร ดังนั้นเราจึงมีปุ่มผู้สมัครสองคนที่ทับซ้อนกัน

ฉันพบความผิดปกติที่เราระบุว่าโมซาเรลล่าเป็นประเภทเครื่องประดับที่ผิด เรารู้ว่าสิ่งนี้ผิด แต่กฎที่ทำให้มันผิดคือการพึ่งพาTopping -> Topping Typeซึ่งไม่ใช่การอ้างอิงที่ถูกต้องสำหรับ BCNF สำหรับตารางนี้ มันเป็นการพึ่งพาสิ่งอื่นนอกเหนือจากคีย์ตัวเลือกทั้งหมด

ดังนั้นเพื่อแก้ปัญหานี้เรานำ Topping Type ออกจากตาราง Pizzas และทำให้เป็นคุณลักษณะที่ไม่สำคัญในตาราง Toppings


3
"มันขึ้นอยู่กับสิ่งอื่นนอกเหนือจากคีย์ตัวเลือกทั้งหมด" - ขอบคุณ
gnsb

12
"ดังนั้นในตารางใด ๆ ที่มีคีย์ตัวเลือกเดียวและอยู่ใน 3NF" - ไม่มาก ตัวอย่างที่คุณให้นั้นตรงตามเงื่อนไขนี้ อย่างไรก็ตามมันไม่ใช่ตัวอย่าง 3NF เนื่องจากไม่ใช่ 2NF คีย์ (1NF), คีย์ทั้งหมด (2NF) และไม่มีอะไรนอกจากคีย์ (3NF) คีย์คือ (Pizza, Topping) และคอลัมน์ ToppingType ขึ้นอยู่กับคีย์และไม่มีอะไรเลยนอกจากคีย์ แต่มันไม่ได้ขึ้นอยู่กับคีย์ทั้งหมด ดังนั้นมันจึงไม่ใช่ 2NF และไม่ใช่ 3NF หรือ BCNF มันคือ 1NF การทำให้เป็น 2NF จะข้ามปัญหาที่คุณพยายามอธิบาย
Daniel Barbalace

4
@DanielBarbalace จุดของตารางนี้คือมันมีคีย์ตัวเลือกอื่นสำหรับตารางนี้: (Pizza, ToppingType) เนื่องจาก ToppingType เป็นเซ็ตย่อยของคีย์ตัวเลือกนั้นจึงเป็นไปตาม 2NF
Bill Karwin

6
ขอโทษฉันต้องลงคะแนนมัน ตัวอย่างที่คุณแสดงไม่อยู่ใน 3NF เพื่อให้เข้าใจถึงวัตถุประสงค์ของ BCNF ฉันต้องดูตัวอย่างว่ามันอยู่ใน 3NF แต่ไม่ใช่ BCNF ฉัน ตอนนี้ฉันไม่เห็นวัตถุประสงค์ของ BCNF
Spero

5
ทำไมสิ่งนี้ถึงไม่ได้รับการจัดการใน 2NF แล้ว? จากมุมมองของฉันคีย์หลักของตารางดั้งเดิมคือ Pizza + Topping และ Topping Type ขึ้นอยู่กับ Topping ดังนั้นการพึ่งพาบางส่วนที่ควรได้รับการดูแลในระยะ 2NF คืออะไร
GreenPenguin

91

ความแตกต่างที่ลึกซึ้งคือ 3NF สร้างความแตกต่างระหว่างแอตทริบิวต์ที่สำคัญและไม่ใช่กุญแจ (เรียกอีกอย่างว่าคุณลักษณะที่ไม่สำคัญ ) ในขณะที่ BCNF ไม่ได้

นี่คือคำอธิบายที่ดีที่สุดโดยใช้คำจำกัดความของ Zanioloของ 3NF ซึ่งเทียบเท่ากับ Codd's:

ความสัมพันธ์, R, อยู่ใน 3NF iff สำหรับทุก ๆ FD ที่ไม่พึงประสงค์ (X-> A) ที่พึงพอใจโดย R อย่างน้อยหนึ่งในเงื่อนไขต่อไปนี้เป็นจริง:

(a) X คือ superkey สำหรับ R หรือ

(b) A เป็นคุณสมบัติที่สำคัญสำหรับ R

BCNF ต้องการ (ก) แต่ไม่ถือว่า (ข) เป็นกรณีพิเศษของตนเอง กล่าวอีกนัยหนึ่ง BCNF ต้องการให้ทุกปัจจัยที่ไม่สำคัญเป็น superkey แม้คุณสมบัติที่ขึ้นอยู่กับมันจะเกิดขึ้นเป็นส่วนหนึ่งของคีย์

ความสัมพันธ์, R, อยู่ใน BCNF iff สำหรับทุก ๆ FD ที่ไม่พึงประสงค์ (X-> A) ที่พอใจโดย R เงื่อนไขต่อไปนี้เป็นจริง:

(a) X เป็นซุปเปอร์คีย์สำหรับ R

BCNF จึงเข้มงวดมากขึ้น

ความแตกต่างนั้นลึกซึ้งมากจนหลายคนอธิบายอย่างไม่เป็นทางการว่า 3NF จริงๆแล้วเป็น BCNF ตัวอย่างเช่นคุณระบุที่นี่ว่า 3NF หมายถึง "ข้อมูลขึ้นอยู่กับคีย์ [s] ... และไม่มีอะไรนอกจากคีย์ [s]" แต่นั่นเป็นคำอธิบายที่ไม่เป็นทางการของ BCNF และไม่ใช่ 3NF 3NF สามารถอธิบายได้อย่างแม่นยำมากขึ้นว่า "ข้อมูลที่ไม่ใช่กุญแจขึ้นอยู่กับปุ่ม ... และไม่มีอะไรนอกจากกุญแจ"

คุณระบุด้วย:

เครื่องหมายคำพูด 3NF ระบุอย่างชัดเจนว่า "ไม่มีอะไรนอกจากคีย์" หมายความว่าแอตทริบิวต์ทั้งหมดขึ้นอยู่กับคีย์หลักเท่านั้น

นั่นเป็นเรื่องธรรมดามาก 3NF และ BCNF และฟอร์มปกติทั้งหมดเกี่ยวข้องกับคีย์ผู้สมัครทั้งหมดและ / หรือซุปเปอร์คีย์ไม่ใช่คีย์ "หลัก" เพียงปุ่มเดียว


7
ว้าว. ศ. Zaniolo สอนในชั้นเรียนของฉัน (CS 143, UCLA) และฉันก็พบคำตอบนี้ในขณะที่เตรียมการสอบปลายภาค ดีใจที่ได้เห็นชื่อของฉันและขอบคุณสำหรับคำตอบอย่างละเอียด!
DV

คุณสามารถยกตัวอย่างของความสัมพันธ์ที่อยู่ใน 3NF แต่ไม่ใช่ใน BCNF ได้ไหม? มันยากสำหรับฉันที่จะจินตนาการ ...
Leo

10
R {A, B, C} โดยที่ {A, B} เป็นกุญแจ เมื่อพิจารณาถึงการพึ่งพา C-> B R จะเป็นไปตามข้อกำหนดของ 3NF แต่ไม่ใช่ BCNF
nvogel

2
คีย์หมายถึงคีย์ตัวเลือก แอตทริบิวต์หลักหมายถึงแอตทริบิวต์ที่เป็นส่วนหนึ่งของคีย์ตัวเลือก AKA เป็นคุณลักษณะเฉพาะ
nvogel

3
แอตทริบิวต์นั้นสำคัญถ้าเป็นส่วนหนึ่งของคีย์ตัวเลือกใด ๆ ไม่สำคัญถ้ามันไม่ได้เป็นส่วนหนึ่งของคีย์ตัวเลือกใด ๆ
nvogel

26

ความแตกต่างระหว่าง 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 (เช่นคีย์ / ไพรม์คีย์บางส่วนหรือแอตทริบิวต์ที่ไม่ใช่ไพรม์)

ที่ไหน

  1. แอตทริบิวต์ที่สำคัญเป็นคุณลักษณะที่สำคัญที่พบในผู้สมัครและ
  2. ที่สำคัญผู้สมัครเป็น superkey น้อยที่สุดสำหรับความสัมพันธ์นั้นและ
  3. 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

แก้ไขปัญหา : ตอนนี้ถ้าเราอัปเกรดศาลเราสามารถรับประกันประเภทอัตราจะสะท้อนถึงการเปลี่ยนแปลงนี้และเราไม่สามารถเรียกเก็บราคาผิดสำหรับศาล

(ในข้อตกลงทางเทคนิคเราสามารถรับประกันได้ว่าการทำงานของ "ประเภทอัตรา" -> "ศาล" จะไม่ถูกละเมิด)


6

คำตอบที่ดีทั้งหมด เพื่อวางไว้ในภาษาที่ง่าย [BCNF] ไม่มีคีย์บางส่วนสามารถขึ้นอยู่กับคีย์

เช่นไม่มีบางส่วนย่อย (เช่นส่วนย่อยที่ไม่สำคัญยกเว้นชุดเต็ม) ของคีย์ตัวเลือกสามารถใช้งานได้ขึ้นอยู่กับคีย์ตัวเลือกบางตัว


2
ทำไมจะไม่ล่ะ? สมมติว่ามีความสัมพันธ์ R (A, B, C, D, E) และ (A, B) และ (C, D) เป็นกุญแจตัวเลือก จากนั้น AB-> D เนื่องจาก AB เป็นซุปเปอร์คีย์ของ R ดังนั้น R ควรอยู่ใน BCNF ใช่ไหม (เพียงคำถามที่พยายามที่จะเข้าใจนี้.)
peteykun

3

คำตอบโดย ' smartnut007 ', ' Bill Karwin ' และ ' sqlvogel ' นั้นยอดเยี่ยม แต่ให้ฉันใส่มุมมองที่น่าสนใจกับมัน

เรามีกุญแจที่ดีและไม่สำคัญ

เมื่อเรามุ่งเน้นวิธีการที่ไม่ใช่เฉพาะช่วงเวลาขึ้นอยู่กับช่วงเวลาเราจะเห็นสองกรณี:

ไม่ใช่ช่วงเวลาที่สามารถจะขึ้นหรือไม่

  • เมื่อต้องพึ่งพา:เราเห็นว่าพวกเขาต้องขึ้นอยู่กับคีย์ตัวเลือกแบบเต็ม นี่คือ2NF
  • เมื่อไม่ได้ขึ้นอยู่กับ:สามารถมีการพึ่งพาไม่ได้หรือการพึ่งพาสกรรมกริยา

    • ไม่ได้พึ่งพาสกรรมกริยา:ไม่แน่ใจว่าทฤษฎีการทำให้เป็นมาตรฐานที่อยู่นี้
    • เมื่อขึ้นอยู่กับการขนส่ง:ถือว่าไม่พึงประสงค์ นี้เป็น3NF

สิ่งที่เกี่ยวกับการพึ่งพาในหมู่เฉพาะช่วงเวลา?

ตอนนี้คุณเห็นแล้วว่าเราไม่ได้พูดถึงความสัมพันธ์ในการพึ่งพากันระหว่างช่วงเวลาโดย NF ที่ 2 หรือ 3 นอกจากนี้การพึ่งพาดังกล่าวหากมีก็ไม่เป็นที่ต้องการดังนั้นเราจึงมีกฎข้อเดียวในการแก้ไขปัญหานั้น นี่คือBCNF

อ้างถึงตัวอย่างจากโพสต์ของBill Karwinที่นี่คุณจะสังเกตเห็นว่าทั้ง ' Topping ' และ ' Topping Type ' เป็นกุญแจสำคัญและมีการพึ่งพา หากพวกเขาไม่ใช่คนพาลที่พึ่งพาแล้ว 3NF จะเตะเข้า

บันทึก:

คำจำกัดความของ BCNF นั้นกว้างมากและไม่มีแอตทริบิวต์ที่แตกต่างกันระหว่างไพรม์และไพรม์ แต่วิธีคิดข้างต้นช่วยให้เข้าใจว่าความผิดปกติบางอย่างเกิดขึ้นได้แม้หลังจาก NF ที่ 2 และ 3

หัวข้อขั้นสูง: การจับคู่ BCNF ทั่วไปกับ 2NF & 3NF

ตอนนี้เราทราบแล้วว่า BCNF ให้คำจำกัดความทั่วไปโดยไม่มีการอ้างอิงถึงสิ่งที่สำคัญที่สุด / ไม่ใช่นายกลองมาดูกันว่า BCNF และ 2/3 NF เกี่ยวข้องกันอย่างไร

ก่อนอื่น BCNF ต้องการ (นอกเหนือจากกรณีเล็กน้อย) ที่สำหรับการพึ่งพาการทำงานX -> Y(FD) แต่ละครั้งX ควรเป็นซุปเปอร์คีย์ หากคุณพิจารณา FD ใด ๆ เรามีสามกรณี - (1) ทั้ง X และ Y ที่ไม่ใช่แบบไพรม์, (2) Prime และ (3) X prime และ Y non-prime, การละทิ้งกรณี (ไร้สาระ) X ไม่ใช่ - ไพรม์และ Y ไพรม์

สำหรับกรณี (1) 3NF ดูแล

สำหรับกรณี (3) 2NF ดูแล

สำหรับกรณี (2) เราพบการใช้ BCNF


3

นี่เป็นคำถามเก่าที่มีคำตอบที่มีค่า แต่ฉันก็ยังสับสนเล็กน้อยจนกระทั่งฉันพบตัวอย่างชีวิตจริงที่แสดงปัญหาของ 3NF อาจไม่เหมาะสำหรับเด็กอายุ 8 ปี แต่หวังว่าจะช่วยได้

พรุ่งนี้ฉันจะพบกับครูของลูกสาวคนโตของฉันในการประชุมผู้ปกครอง / ครูประจำไตรมาส นี่คือสิ่งที่ไดอารี่ของฉันดูเหมือน (เปลี่ยนชื่อและห้อง):

Teacher   | Date             | Room
----------|------------------|-----
Mr Smith  | 2018-12-18 18:15 | A12 
Mr Jones  | 2018-12-18 18:30 | B10 
Ms Doe    | 2018-12-18 18:45 | C21 
Ms Rogers | 2018-12-18 19:00 | A08 

มีครูหนึ่งคนต่อห้องเท่านั้นและพวกเขาไม่เคยขยับเขยื้อน ถ้าคุณได้ดูคุณจะเห็นว่า (1) สำหรับทุกแอตทริบิวต์Teacher, Date, Roomเรามีเพียงหนึ่งค่าต่อแถว (2) ซุปเปอร์คีย์: (Teacher, Date, Room), (Teacher, Date)และ(Date, Room)และกุญแจผู้สมัครที่เห็นได้ชัดและ(Teacher, Date)(Date, Room)

(Teacher, Room) ไม่ใช่ซุปเปอร์คีย์เพราะฉันจะทำตารางให้เสร็จในไตรมาสถัดไปและฉันอาจมีแถวเช่นนี้ (Mr Smith ไม่ย้าย!):

Teacher  | Date             | Room
---------|------------------| ----
Mr Smith | 2019-03-19 18:15 | A12

เราสรุปอะไรได้บ้าง? (1) เป็นสูตรที่ไม่เป็นทางการ แต่ถูกต้องของ 1NF จาก (2) เราเห็นว่าไม่มี "non prime attribute": 2NF และ 3NF ให้ฟรี

ไดอารี่ของฉันคือ 3NF ดี! ไม่ไม่ได้เพราะไม่มีตัวสร้างข้อมูลที่จะยอมรับสิ่งนี้ใน DB schema Roomแอตทริบิวต์จะขึ้นอยู่กับTeacherแอตทริบิวต์ (อีกครั้งครูจะไม่ย้าย!) แต่คีมาไม่สะท้อนความเป็นจริงนี้ ตัวสร้างข้อมูลที่มีสติจะทำอะไร? แยกตารางเป็นสองส่วน:

Teacher   | Date
----------|-----------------
Mr Smith  | 2018-12-18 18:15
Mr Jones  | 2018-12-18 18:30
Ms Doe    | 2018-12-18 18:45
Ms Rogers | 2018-12-18 19:00

และ

Teacher   | Room
----------|-----
Mr Smith  | A12
Mr Jones  | B10
Ms Doe    | C21
Ms Rogers | A08

แต่ 3NF ไม่ได้จัดการกับการพึ่งพาคุณลักษณะที่สำคัญ นี่คือปัญหา: การปฏิบัติตาม 3NF ไม่เพียงพอที่จะมั่นใจได้ว่าการออกแบบสคีมาของตารางเสียงในบางสถานการณ์

ด้วย BCNF คุณไม่สนใจว่าแอตทริบิวต์นั้นเป็นคุณสมบัติเฉพาะหรือไม่อยู่ในกฎ 2NF และ 3NF สำหรับการพึ่งพาที่ไม่สำคัญทุกครั้ง (เซตย่อยจะถูกกำหนดโดย supersets ของพวกเขาอย่างชัดเจน) ดีเทอร์มิแนนต์เป็นซุปเปอร์คีย์ที่สมบูรณ์ กล่าวอีกนัยหนึ่งไม่มีอะไรถูกกำหนดโดยสิ่งอื่นใดนอกจากซุปเปอร์คีย์หลักอย่างสมบูรณ์ (ยกเว้น FD เล็กน้อย) (ดูคำตอบอื่น ๆ สำหรับคำจำกัดความที่เป็นทางการ)

ทันทีที่Roomขึ้นอยู่กับTeacher, Roomจะต้องเป็นส่วนหนึ่งของTeacher(กรณีที่ไม่) หรือTeacherต้องเป็นกุญแจสำคัญสุด (กรณีที่ไม่อยู่ในไดอารี่ของฉัน แต่ thats กรณีที่เมื่อคุณสามารถแยกตาราง)

เพื่อสรุป: BNCF เข้มงวดมากขึ้น แต่ในความคิดของฉันเข้าใจง่ายกว่า 3NF:

  • ในกรณีส่วนใหญ่ BCNF เหมือนกับ 3NF;
  • ในกรณีอื่น BCNF คือสิ่งที่คุณคิด / หวัง 3NF คือ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.