3NF A relation R is in third normal form (3NF) if and only if it is in 2NF and every non-key attribute is non-transitively dependent on the primary key. An attribute C is transitively dependent on attribute A if there exists an attribute B such that: A B and B C. Note that 3NF is concerned with transitive dependencies which do not involve candidate keys. A 3NF relation with more than one candidate key will clearly have transitive dependencies of the form: primary_key other_candidate_key any_non-key_column
An alternative (and equivalent) definition for relations with just one candidate key is:
A relation R having just one candidate key is in third normal form (3NF) if and only if the non-key attributes of R (if any) are: 1) mutually independent, and 2) fully dependent on the primary key of R. A non-key attribute is any column which is not part of the primary key. Two or more attributes are mutually independent if none of the attributes is functionally dependent on any of the others. Attribute Y is fully functionally dependent on attribute X if X Y, but Y is not functionally dependent on any proper subset of the (possibly composite) attribute X
For relations with just one candidate key, this is equivalent to the simpler:
A relation R having just one candidate key is in third normal form (3NF) if and only if no non-key column (or group of columns) determines another non-key column (or group of columns)
Example (3NF but not BCNF):
SUPPLIER_PART (supplier_no, supplier_name, part_no, quantity)
Functional Dependencies:
We assume that supplier_name's are always unique to each supplier. Thus we have two candidate keys:
(supplier_no, part_no) and (supplier_name, part_no)
Thus we have the following dependencies:
(supplier_no, part_no) quantity
(supplier_no, part_no) supplier_name
(supplier_name, part_no) quantity
(supplier_name, part_no) supplier_no
supplier_name supplier_no
supplier_no supplier_name
Comments:
Although supplier_name supplier_no (and vice versa), supplier_no is not a non-key column — it is part of the primary key! Hence this relation technically satisfies the definition(s) of 3NF (and likewise 2NF, again because supplier_no is not a non-key column).
Anomalies:
INSERT: We cannot record the name of a supplier until that supplier supplies at least one part.
DELETE: If a supplier temporarily stops supplying and we delete the last row for that supplier, we lose the supplier's name.
UPDATE: If a supplier changes name, that change will have to be made to multiple rows (wasting resources and risking loss of consistency).
Decomposition (into BCNF):
SUPPLIER_ID (supplier_no, supplier_name)
SUPPLIER_PARTS (supplier_no, part_no, quantity)
3NF A ความสัมพันธ์ R อยู่ในรูปแบบปกติ 3 (3NF) ถ้าและเดียวถ้าอยู่ใน 2NF และทุกแอททริบิวต์คีย์ไม่ใช่ไม่ใช่-transitively ขึ้นอยู่กับคีย์หลัก แอตทริบิวต์ C transitively ขึ้นอยู่กับแอตทริบิวต์ A ถ้ามีแอตทริบิวต์ B ที่: B และ B C. หมายเหตุ 3NF ที่เป็นกังวลกับอ้างอิงสกรรมกริยาซึ่งไม่เกี่ยวข้องกับผู้สมัครคีย์ ความสัมพันธ์ของ 3NF มีผู้สมัครมากกว่าหนึ่งชัดเจนจะอ้างอิงสกรรมของแบบฟอร์ม: primary_key other_candidate_key any_non-key_columnข้อกำหนดอื่น (และเทียบเท่า) สำหรับความสัมพันธ์กับผู้สมัครเพียงหนึ่งคีย์คือ:ความสัมพันธ์ R ที่มีเพียงหนึ่งผู้สมัครคีย์เป็นแบบฟอร์มปกติที่ 3 (3NF) ถ้าและเดียวถ้าไม่คีย์แอตทริบิวต์ของ R (ถ้ามี): อิสระ 1) ร่วมกัน และ 2) ทั้งหมดขึ้นอยู่กับคีย์หลักของอาร์ แอตทริบิวต์ไม่ใช่คีย์คอลัมน์ใด ๆ ที่ไม่ใช่ส่วนหนึ่งของคีย์หลักได้ แอตทริบิวต์อย่าง น้อยสองเป็นอิสระแก่กันและกันถ้าแอตทริบิวต์ไม่มีฟังก์ชันที่ขึ้นอยู่กับของผู้อื่น แอตทริบิวต์ Y เป็นฟังก์ชันทั้งหมดขึ้นอยู่กับแอททริบิวต์ X ถ้า X Y แต่ Y ไม่ขึ้นอยู่กับฟังก์ชันย่อยใดเหมาะสมของแอตทริบิวต์ (อาจจะผสม) Xความสัมพันธ์กับคีย์ผู้เดียว นี้จะเหมือนกับการเรียบง่าย:ความสัมพันธ์ R ที่มีเพียงหนึ่งผู้สมัครคีย์เป็นแบบฟอร์มปกติที่ 3 (3NF) ถ้าและเดียวถ้าไม่มีคีย์คอลัมน์ (หรือกลุ่มของคอลัมน์) กำหนดอีกไม่ใช่คีย์คอลัมน์ (หรือกลุ่มของคอลัมน์)ตัวอย่าง (3NF แต่ไม่ BCNF):SUPPLIER_PART (supplier_no, supplier_name, part_no ปริมาณ)อ้างอิงที่ทำงาน:เราคิดว่า ของ supplier_name ที่มักเฉพาะผู้จัดจำหน่าย ดังนั้น เรามีสองตัวเลือกคีย์:(supplier_no, part_no) และ (supplier_name, part_no)ดังนั้น เรามีความสัมพันธ์ต่อไปนี้:(supplier_no, part_no) ปริมาณ(supplier_no, part_no) supplier_name(supplier_name, part_no) ปริมาณ(supplier_name, part_no) supplier_nosupplier_name supplier_nosupplier_no supplier_nameความคิดเห็น:แม้ว่า supplier_name supplier_no (และในทางกลับกัน), supplier_no ไม่ใช่คอลัมน์คีย์ไม่ — เป็นส่วนหนึ่งของคีย์หลัก ดังนั้น ความสัมพันธ์นี้เทคนิคตรงตามนิยามของ 3NF (และในทำนองเดียวกัน 2NF อีกครั้งเนื่องจาก supplier_no ไม่ใช่คอลัมน์คีย์ไม่ใช่)ความผิด:แทรก: เราไม่สามารถบันทึกชื่อของผู้จัดจำหน่ายจนกระทั่งผู้ที่จัดจำหน่ายส่วนน้อยลบ: ถ้าผู้จัดจำหน่ายได้หยุดขายชั่วคราว และเราลบแถวสุดท้ายสำหรับผู้จำหน่าย เราเสียชื่อผู้ผลิตที่ปรับปรุง: ถ้าผู้จัดจำหน่ายเปลี่ยนชื่อ เปลี่ยนได้กับหลายแถว (สูญเสียทรัพยากร และซึ่งสูญเสียความสอดคล้อง)แยกส่วนประกอบ (เป็น BCNF):SUPPLIER_ID (supplier_no, supplier_name)SUPPLIER_PARTS (supplier_no, part_no ปริมาณ)
การแปล กรุณารอสักครู่..

3NF R คือความสัมพันธ์ในรูปแบบปกติที่สาม (3NF) และถ้าหากมันอยู่ใน 2NF และทุกแอตทริบิวต์ที่ไม่สำคัญไม่เป็นสกรรมกริยาขึ้นอยู่กับคีย์หลัก แอตทริบิวต์ซีเป็นสกรรมกริยาขึ้นอยู่กับแอตทริบิวต์ถ้ามีแอตทริบิวต์ B ดังกล่าวว่า: B และ B C. ทราบว่า 3NF ที่เกี่ยวข้องกับการอ้างอิงสกรรมกริยาซึ่งไม่เกี่ยวข้องกับผู้สมัครที่ปุ่ม ความสัมพันธ์ 3NF มีมากกว่าหนึ่งที่สำคัญผู้สมัครที่ชัดเจนจะมีการอ้างอิงสกรรมกริยาของรูปแบบ: primary_key other_candidate_key any_non-key_column
ทางเลือก (และเทียบเท่า) คำนิยามสำหรับความสัมพันธ์กับผู้สมัครที่สำคัญเพียงหนึ่งคือ
ความสัมพันธ์ R มีเพียงหนึ่งที่สำคัญของผู้สมัครคือ ในรูปแบบปกติที่สาม (3NF) และถ้าหากคุณลักษณะที่ไม่สำคัญการวิจัย (ถ้ามี): 1) ที่เป็นอิสระร่วมกันและ 2) ได้อย่างเต็มที่ขึ้นอยู่กับคีย์หลักของอาร์แอตทริบิวต์ที่ไม่สำคัญเป็นคอลัมน์ใด ๆ ที่ ไม่เป็นส่วนหนึ่งของคีย์หลัก คุณลักษณะที่สองหรือมากกว่ามีความเป็นอิสระร่วมกันถ้าไม่มีแอตทริบิวต์เป็นหน้าที่ขึ้นอยู่กับคนอื่น ๆ Attribute Y เป็นอย่างขึ้นอยู่กับหน้าที่แอตทริบิวต์ X ถ้า X Y, Y แต่ไม่ได้ขึ้นอยู่กับหน้าที่เซตย่อยที่เหมาะสมใด ๆ (อาจจะประกอบ) แอตทริบิวต์ X
สำหรับความสัมพันธ์ที่มีเพียงหนึ่งที่สำคัญผู้สมัครนี้จะเทียบเท่ากับที่เรียบง่าย:
ความสัมพันธ์ R มีเพียงหนึ่งที่สำคัญผู้สมัครที่อยู่ในรูปแบบปกติที่สาม (3NF) และถ้าหากไม่มีคอลัมน์ที่ไม่สำคัญ (หรือกลุ่มของคอลัมน์) กำหนดคอลัมน์อื่นที่ไม่สำคัญ (หรือกลุ่มของคอลัมน์)
ตัวอย่าง (3NF แต่ไม่ BCNF):
SUPPLIER_PART ( supplier_no, supplier_name, part_no ปริมาณ)
การพึ่งพาการทำงาน:
เราคิดว่าของ supplier_name มักจะไม่ซ้ำกันในแต่ละผู้จัดจำหน่าย ดังนั้นเราจึงมีสองปุ่มผู้สมัคร:
(supplier_no, part_no) และ (supplier_name, part_no)
ดังนั้นเราจึงมีการอ้างอิงต่อไปนี้:
(supplier_no, part_no) ปริมาณ
(supplier_no, part_no) supplier_name
(supplier_name, part_no) ปริมาณ
(supplier_name, part_no ) supplier_no
supplier_name supplier_no
supplier_no supplier_name
ความคิดเห็น:
แม้ว่า supplier_name supplier_no (และในทางกลับกัน) supplier_no ไม่ได้เป็นคอลัมน์ที่ไม่สำคัญ - มันเป็นส่วนหนึ่งของคีย์หลัก! ดังนั้นความสัมพันธ์นี้ในทางเทคนิคตรงตามความหมาย (s) ของ 3NF (และเช่นเดียวกัน 2NF อีกครั้งเพราะ supplier_no ไม่ได้เป็นคอลัมน์ที่ไม่สำคัญ).
ผิดปกติ:
INSERT: เราไม่สามารถบันทึกชื่อของผู้ผลิตจนถึงผู้จัดจำหน่ายอุปกรณ์ว่าอย่างน้อยส่วนหนึ่ง
ลบ: ถ้าผู้จัดจำหน่ายชั่วคราวหยุดการจัดหาและการที่เราลบแถวสุดท้ายหาผู้จัดจำหน่ายที่เราสูญเสียชื่อของซัพพลายเออร์.
UPDATE: หากมีการเปลี่ยนแปลงผู้จัดจำหน่ายชื่อการเปลี่ยนแปลงที่จะต้องมีการทำกับหลายแถว (การสูญเสียทรัพยากรและเสี่ยงต่อการสูญเสียของความมั่นคง ).
การสลายตัว (เป็น BCNF):
supplier_id (supplier_no, supplier_name)
SUPPLIER_PARTS (supplier_no, part_no ปริมาณ)
การแปล กรุณารอสักครู่..

3nf R สัมพันธ์อยู่ในฟอร์มปกติที่สาม ( 3nf ) ถ้าและเพียงถ้ามันอยู่ในประเทศ : และทุกแอตทริบิวต์ที่ไม่ใช่คีย์ไม่เกี่ยวกับการเปลี่ยนแปลงขึ้นอยู่กับคีย์หลัก แอตทริบิวต์ C เป็นสกรรมกริยาขึ้นอยู่กับคุณลักษณะ หากไม่มีแอตทริบิวต์ B เช่นที่ : B และ B ซีทราบว่า 3nf เกี่ยวข้องกับการพึ่งพาซึ่งไม่เกี่ยวข้องกับกุญแจครับความสัมพันธ์ 3nf ที่มีมากกว่าหนึ่งคีย์ผู้สมัครจะชัดเจนมีการพึ่งพาของรูปแบบ : primary_key other_candidate_key any_non-key_column
ทางเลือก ( เทียบเท่า ) กุญแจเพียงหนึ่งผู้สมัครคำนิยามของความสัมพันธ์กับ :
R สัมพันธ์จะมีกุญแจเพียงหนึ่งในผู้สมัครเป็น 3 รูปแบบปกติ ( 3nf ) ถ้าและเพียงถ้าไม่ใช่คีย์ คุณลักษณะของ R ( ถ้ามี ) :1 ) เป็นอิสระแก่กันและกัน และ 2 ) อย่างเต็มที่ขึ้นอยู่กับคีย์หลักของ แอตทริบิวต์ที่ไม่ใช่คีย์ คอลัมน์ใด ๆที่ไม่ได้เป็นส่วนหนึ่งของคีย์หลัก สองคนหรือมากกว่าคุณสมบัติเป็นอิสระแก่กันและกัน ถ้าไม่มีคุณสมบัติจะขึ้นอยู่กับหน้าที่ใด ๆของผู้อื่น แอตทริบิวต์ Y เป็นอย่างขึ้นอยู่กับหน้าที่แอตทริบิวต์ x ถ้า x Y ,แต่ Y ไม่ได้ขึ้นอยู่กับหน้าที่ใด ๆของชุดย่อยที่เหมาะสม ( อาจจะประกอบ ) แอตทริบิวต์ x
สำหรับความสัมพันธ์กับกุญแจเพียงหนึ่งตัวเลือกนี้จะเทียบเท่ากับที่เรียบง่าย :
R สัมพันธ์จะมีกุญแจเพียงหนึ่งในผู้สมัครเป็น 3 รูปแบบปกติ ( 3nf ) ถ้าและเพียงถ้าไม่มีคอลัมน์คีย์ ( หรือกลุ่มของคอลัมน์ ) เป็นตัวอื่นไม่ใช่คอลัมน์คีย์ ( หรือกลุ่มของคอลัมน์ )
ตัวอย่าง ( 3nf แต่ไม่ bcnf ) :
supplier_part ( supplier_no supplier_name part_no , ปริมาณ , การพึ่งพาการทำงาน : )
เราคิดว่า supplier_name ก็มักจะไม่ซ้ำกับผู้ผลิตแต่ละ ดังนั้นเราจึงมีคีย์ผู้สมัครสอง :
( supplier_no part_no ( supplier_name , และ , ดังนั้นเรา part_no )
( supplier_no การอ้างอิงต่อไปนี้ : , part_no ) ปริมาณ ( supplier_no
,
( supplier_name part_no ) supplier_name ,
part_no ) ปริมาณ( supplier_name part_no , ) supplier_no
supplier_name supplier_no
supplier_no supplier_name
แม้ว่าความคิดเห็น : supplier_name supplier_no ( และในทางกลับกัน ) supplier_no ไม่ใช่ไม่ใช่คอลัมน์คีย์ - มันเป็นส่วนหนึ่งของคีย์หลัก ! ดังนั้นความสัมพันธ์นี้ในทางเทคนิคใดตรงกับคำนิยาม ( s ) ของ 3nf ( และประเทศ : เช่นเดียวกันอีกครั้ง เพราะ supplier_no ไม่ใช่ไม่ใช่คอลัมน์คีย์ )
ปกติ : แทรก :เราไม่สามารถบันทึกชื่อของซัพพลายเออร์ จนผู้ผลิตอุปกรณ์อย่างน้อยหนึ่งส่วน
ลบ : ถ้าซัพพลายเออร์ชั่วคราวหยุดขายและเราลบแถวสุดท้ายที่ซัพพลายเออร์ เราสูญเสียชื่อของซัพพลายเออร์
ปรับปรุง : ถ้าซัพพลายเออร์เปลี่ยนชื่อที่เปลี่ยนจะต้องเป็นหลายแถว ( เปลือง ทรัพยากรและเสี่ยงสูญเสียความสอดคล้อง )
(
bcnf ) : การย่อยสลายsupplier_id ( supplier_no supplier_name , supplier_parts ( supplier_no )
,
part_no ปริมาณ )
การแปล กรุณารอสักครู่..
