ຮູບແບບປົກກະຕິທີສາມ (3NF) ແມ່ນຫຼັກຖານຖານຂໍ້ມູນທີ່ສະຫນັບສະຫນູນຄວາມສົມບູນຂອງຂໍ້ມູນໂດຍການສ້າງ ຖານຂໍ້ມູນປົກກະຕິຂອງຖານຂໍ້ມູນທີ່ ສະຫນອງໂດຍແບບຟອມທໍາອິດທໍາອິດ (1NF) ແລະແບບຟອມປົກກະຕິທີ 2 (2NF).
ຂໍ້ກໍານົດແບບຟອມມາດຕະຖານທີ່ສາມແບບປົກກະຕິ
ມີສອງຄວາມຕ້ອງການພື້ນຖານສໍາລັບຖານຂໍ້ມູນຈະຢູ່ໃນຮູບແບບປົກກະຕິທີສາມ:
- ຖານຂໍ້ມູນຕ້ອງໄດ້ປະຕິບັດຕາມຄວາມຕ້ອງການຂອງ 1NF ແລະ 2NF .
- ຄໍລໍາຖານຂໍ້ມູນທັງຫມົດຕ້ອງຂຶ້ນຢູ່ກັບ ຫຼັກຫຼັກ , ຊຶ່ງຫມາຍຄວາມວ່າຄ່າຂອງຄໍລໍາໃດກໍ່ຕາມສາມາດມາຈາກຄີຫຼັກເທົ່ານັ້ນ.
ກ່ຽວກັບຄວາມສໍາຄັນທີ່ສໍາຄັນ
ໃຫ້ຄົ້ນຫາຕື່ມອີກວ່າພວກເຮົາຫມາຍຄວາມວ່າແນວໃດວ່າຄໍລໍາທັງຫມົດຕ້ອງຂຶ້ນຢູ່ກັບຫຼັກຫຼັກ.
ຖ້າຄ່າຂອງຄໍລໍາສາມາດມາຈາກທັງຄີຫລັກແລະຄໍລໍາອື່ນໃນຕາຕະລາງ, ມັນຈະລະເມີດ 3NF. ພິຈາລະນາຕາຕະລາງພະນັກງານທີ່ມີຄໍລໍາເຫຼົ່ານີ້:
- EmployeeID
- ຊື່ແທ້
- ນາມສະກຸນ
ເຮັດທັງຊື່ LastName ແລະ FirstName ແມ່ນບໍ່ເທົ່າກັບຄ່າຂອງ EmployeeID? ດີ, LastName ສາມາດຂຶ້ນຢູ່ກັບ FirstName? ບໍ່, ເພາະວ່າບໍ່ມີຫຍັງເກີດຂຶ້ນໃນ LastName ຈະແນະນໍາໃຫ້ມູນຄ່າຂອງ FirstName. FirstName ສາມາດຂຶ້ນຢູ່ກັບ LastName? ບໍ່ມີອີກເທື່ອຫນຶ່ງ, ເນື່ອງຈາກວ່າດຽວກັນນີ້ແມ່ນຄວາມຈິງ: ໃດກໍ່ຕາມ LastName ອາດຈະ, ມັນບໍ່ສາມາດສະຫນອງຂໍ້ hint ເປັນມູນຄ່າຂອງ FirstName. ດັ່ງນັ້ນ, ຕາຕະລາງນີ້ແມ່ນ 3NF ສອດຄ່ອງ.
ແຕ່ພິຈາລະນາຕາຕະລາງຍານພາຫະນະນີ້:
- VehicleID
- ຜູ້ຜະລິດ
- ຕົວແບບ
ຜູ້ຜະລິດແລະຕົວແບບສາມາດມາຈາກ VehicleID - ແຕ່ຕົວແບບນີ້ຍັງສາມາດມາຈາກຜູ້ຜະລິດເພາະວ່າຮູບແບບຍານພາຫະນະແມ່ນເຮັດໄດ້ໂດຍຜູ້ຜະລິດໂດຍສະເພາະເທົ່ານັ້ນ. ການອອກແບບຕາຕະລາງນີ້ແມ່ນບໍ່ສອດຄ່ອງກັບ 3NF, ແລະດັ່ງນັ້ນຈຶ່ງສາມາດເຮັດໃຫ້ຂໍ້ຜິດພະລາດຂໍ້ມູນ. ຕົວຢ່າງ, ທ່ານອາດຈະປັບປຸງຜູ້ຜະລິດໂດຍບໍ່ມີການປັບປຸງຮູບແບບ, ການນໍາຂໍ້ມູນທີ່ບໍ່ຖືກຕ້ອງ.
ເພື່ອເຮັດໃຫ້ມັນສອດຄ່ອງ, ພວກເຮົາຈະຕ້ອງຍ້າຍຄໍລໍາຂຶ້ນກັບຕາຕະລາງອື່ນແລະອ້າງອີງໃສ່ມັນໂດຍໃຊ້ແປ້ນຕ່າງປະເທດ. ນີ້ຈະເປັນຜົນມາຈາກສອງຕາຕະລາງ:
ຕາຕະລາງຍານພາຫະນະ
ໃນຕາຕະລາງຂ້າງລຸ່ມ, ModelID ເປັນແປ້ນຕ່າງປະເທດໃນຕາຕະລາງ Models :
- VehicleID
- ຜູ້ຜະລິດ
- ModelID
ຕາຕະລາງແບບ
ຕາຕະລາງໃຫມ່ນີ້ແມ່ນຮູບແບບສໍາລັບຜູ້ຜະລິດ. ຖ້າທ່ານຕ້ອງການປັບປຸງຂໍ້ມູນຂ່າວສານຍານພາຫະນະໃດໆໃຫ້ແກ່ເຄື່ອງຈັກ, ທ່ານຈະເຮັດໃນຕາຕະລາງນີ້ແທນທີ່ຈະຢູ່ໃນຕາຕະລາງຍານພາຫະນະ.
- ModelID
- ຜູ້ຜະລິດ
- ຕົວແບບ
ຕົວເດັ່ນໃນຮູບ 3NF
ຕາຕະລາງອາດຈະມີພາກສະຫນາມມາ - ຫນຶ່ງທີ່ຖືກຄິດໄລ່ອີງໃສ່ຄໍລໍາອື່ນໆໃນຕາຕະລາງ. ຕົວຢ່າງ, ພິຈາລະນາຕາຕະລາງຂອງຄໍາສັ່ງຂອງ widget ນີ້:
- Order Number
- ຈໍານວນລູກຄ້າ
- ລາຄາຕໍ່ຫນ່ວຍ
- Quantity
- ລວມ
ຈໍານວນທັງຫມົດເຮັດໃຫ້ການປະຕິບັດຕາມ 3NF ເພາະວ່າມັນສາມາດນໍາມາຜະລິດໂດຍການເພີ່ມລາຄາຂອງຫນ່ວຍໂດຍປະລິມານ, ແທນທີ່ຈະແມ່ນຂຶ້ນຢູ່ກັບຫຼັກຫຼັກ. ພວກເຮົາຕ້ອງເອົາມັນອອກຈາກຕາຕະລາງເພື່ອປະຕິບັດຕາມແບບຟອມປົກກະຕິທີສາມ.
ໃນຄວາມເປັນຈິງ, ເນື່ອງຈາກວ່າມັນໄດ້ມາ, ມັນດີກວ່າທີ່ຈະບໍ່ເກັບມັນຢູ່ໃນຖານຂໍ້ມູນຢູ່ທັງຫມົດ.
ພວກເຮົາພຽງແຕ່ສາມາດຄິດໄລ່ມັນໄດ້ "ໃນການບິນ" ເມື່ອປະຕິບັດການສອບຖາມຖານຂໍ້ມູນ. ສໍາລັບຕົວຢ່າງ, ພວກເຮົາອາດຈະນໍາໃຊ້ຂໍ້ມູນການຄົ້ນຫານີ້ມາກ່ອນເພື່ອຊອກຫາເລກລໍາດັບແລະຈໍານວນຄໍາສັ່ງ:
SELECT OrderNumber, Total FROM WidgetOrdersພວກເຮົາຕອນນີ້ສາມາດນໍາໃຊ້ຄໍາຖາມຕໍ່ໄປນີ້:
SELECT OrderNumber, UnitPrice * Quantity AS Total FROM WidgetOrdersເພື່ອບັນລຸຜົນດຽວກັນໂດຍບໍ່ມີການລະເມີດກົດລະບຽບປົກກະຕິ.