BCNF A relation R is in Boyce-Codd normal form (BCNF) if and only if every determinant is a candidate key
The definition of BCNF addresses certain (rather unlikely) situations which 3NF does not handle. The characteristics of a relation which distinguish 3NF from BCNF are given below. Since it is so unlikely that a relation would have these characteristics, in practical real-life design it is usually the case that relations in 3NF are also in BCNF. Thus many authors make a "fuzzy" distinction between 3NF and BCNF when it comes to giving advice on "how far" to normalize a design. Since relations in 3NF but not in BCNF are slightly unusual, it is a bit more difficult to come up with meaningful examples. To be precise, the definition of 3NF does not deal with a relation that:
1. has multiple candidate keys, where
2. those candidate keys are composite, and
3. the candidate keys overlap (i.e., have at least one common attribute)
Example:
An example of a relation in 3NF but not in BCNF (and exhibiting the three properties listed) was given above in the discussion of 3NF. The following relation is in BCNF (and also in 3NF):
SUPPLIERS (supplier_no, supplier_name, city, zip)
We assume that each supplier has a unique supplier_name, so that supplier_no and supplier_name are both candidate keys.
Functional Dependencies:
supplier_no city
supplier_no zip
supplier_no supplier_name
supplier_name city
supplier_name zip
supplier_name supplier_no
Comments:
The relation is in BCNF since both determinants (supplier_no and supplier_name) are unique (i.e., are candidate keys).
The relation is also in 3NF since even though the non-primary-key column supplier_name determines the non-key columns city and zip, supplier_name is a candidate key. Transitive dependencies involving a second (or third, fourth, etc.) candidate key in addition to the primary key do not violate 3NF.
Note that even relations in BCNF can have anomalies.
Anomalies:
INSERT: We cannot record the city for a supplier_no without also knowing the supplier_name
DELETE: If we delete the row for a given supplier_name, we lose the information that the supplier_no is associated with a given city.
UPDATE: Since supplier_name is a candidate key (unique), there are none.
Decomposition:
SUPPLIER_INFO (supplier_no, city, zip)
SUPPLIER_NAME (supplier_no, supplier_name)
Written by Larry Newcomer (Updated January 06, 2000 )
bcnf R สัมพันธ์อยู่ใน Boyce Codd รูปแบบปกติ ( bcnf ) ถ้าและเพียงถ้าทุกปัจจัยเป็นคีย์คู่แข่ง
นิยามของ bcnf ที่อยู่แน่นอน ( ค่อนข้างยาก ) สถานการณ์ซึ่ง 3nf ไม่จัดการ ลักษณะของความสัมพันธ์ซึ่งแตกต่างจาก bcnf 3nf ได้รับด้านล่าง เนื่องจากมันเป็นดังนั้นยากที่ความสัมพันธ์จะมีลักษณะเหล่านี้ในการออกแบบจริงในทางปฏิบัติมันมักจะเป็นกรณีที่ความสัมพันธ์ใน 3nf ยังอยู่ใน bcnf . ดังนั้น ผู้เขียนหลายคนสร้าง " ความแตกต่างระหว่าง 3nf bcnf คลุมเครือ " และเมื่อมันมาเพื่อให้คำแนะนำเกี่ยวกับ " ว่า " ปกติแบบ ตั้งแต่ความสัมพันธ์ใน 3nf แต่ไม่ bcnf จะผิดปกติเพียงเล็กน้อย มันเป็นบิตยากขึ้นอย่างมีความหมาย จะแม่นยําความหมายของ 3nf ไม่ได้จัดการกับความสัมพันธ์ที่ :
1 มีแป้นผู้สมัครหลายที่
2 บรรดาผู้สมัครคีย์คอมโพสิตและ
3 ผู้สมัครคีย์ซ้อน ( เช่น มีอย่างน้อยหนึ่งที่พบแอตทริบิวต์ )
ตัวอย่าง : ตัวอย่างของความสัมพันธ์ใน 3nf แต่ไม่ bcnf ( และจัดแสดงสามคุณสมบัติที่ระบุไว้ข้างต้น ) ได้รับในการอภิปรายของ 3nf .ต่อไปนี้คือในความสัมพันธ์ bcnf ( และใน 3nf ) :
ซัพพลายเออร์ ( supplier_no supplier_name , , เมือง , รหัสไปรษณีย์ )
เราคิดว่าแต่ละซัพพลายเออร์มี supplier_name ที่เป็นเอกลักษณ์ เพื่อให้ supplier_no supplier_name ทั้งผู้สมัครและคีย์การอ้างอิงการทำงาน :
.
supplier_no เมือง
supplier_no ซิป supplier_name
supplier_no supplier_name เมือง
supplier_name ซิป supplier_name supplier_no
ความคิดเห็น :ความสัมพันธ์ใน bcnf เนื่องจากทั้งสองปัจจัย ( supplier_no และ supplier_name ) ที่เป็นเอกลักษณ์ เช่น กุญแจผู้สมัคร ) .
ความสัมพันธ์ยังอยู่ใน 3nf ตั้งแต่แม้ว่าไม่ใช่คีย์หลักจะไม่สําคัญ supplier_name คอลัมน์คอลัมน์เมืองและรหัสไปรษณีย์ supplier_name เป็นผู้สมัครหลัก ที่เกี่ยวข้องกับการพึ่งพาสอง ( หรือ สาม สี่ ฯลฯ) ผู้สมัครที่สำคัญนอกเหนือไปจากคีย์หลักที่ไม่ละเมิด 3nf .
ทราบว่าแม้ความสัมพันธ์ใน bcnf จะมีความผิดปกติ ความผิดปกติ :
ใส่ : เราไม่สามารถบันทึกเมืองสำหรับ supplier_no โดยยังไม่ทราบ supplier_name
ลบ : ถ้าเราลบแถวให้ supplier_name เราสูญเสียข้อมูลที่ supplier_no เกี่ยวข้องกับ :
ปรับปรุงให้เมืองตั้งแต่ supplier_name เป็นคีย์คู่แข่ง ( พิเศษ ) , ไม่มีการสลายตัว :
.
supplier_info ( supplier_no , เมือง , รหัสไปรษณีย์ supplier_name ( supplier_no )
,
supplier_name ) เขียนโดย ลาร์รี่ ใหม่ ( อัพเดท 06 มกราคม , 2000 )
การแปล กรุณารอสักครู่..