ຫຼີກເວັ້ນຄວາມຂັດແຍ້ງກ່ຽວກັບການປ່ຽນແປງເພື່ອຊ່ວຍໃຫ້ປະຕິບັດຕາມປົກກະຕິ
ການຂັດແຍ້ງໃນຖານຂໍ້ມູນເປັນການພົວພັນທາງອ້ອມລະຫວ່າງຄ່າຕ່າງໆໃນຕາຕະລາງດຽວກັນທີ່ເຮັດໃຫ້ການ ຂຶ້ນກັບການເຮັດວຽກ . ເພື່ອບັນລຸມາດຕະຖານປົກກະຕິຂອງມາດຕະຖານປົກກະຕິທີສາມ (3NF), ທ່ານຕ້ອງລົບລ້າງຄວາມຂັດແຍ້ງທີ່ມີການປ່ຽນແປງ.
ໂດຍລັກສະນະຂອງມັນ, ຄວາມຂັດແຍ້ງຂ້ອນຂ້າງຮຽກຮ້ອງໃຫ້ມີຄຸນສົມບັດສາມຫຼືຫຼາຍກວ່າ (ຫຼືຄໍລໍາຖານຂໍ້ມູນ) ທີ່ມີການຂຶ້ນກັບການເຮັດວຽກລະຫວ່າງພວກມັນ, ເຊິ່ງຫມາຍຄວາມວ່າຄໍລໍາ A ໃນຕາຕະລາງອີງໃສ່ Column B ຜ່ານຄໍລໍາ C ກາງ.
ໃຫ້ເບິ່ງວິທີການນີ້ສາມາດເຮັດວຽກໄດ້.
Example Dependency Transitive
AUTHORS
Author_ID | ຜູ້ຂຽນ | Book | Author_Nationality |
---|---|---|---|
Auth_001 | Orson Scott Card | ເກມ Ender ຂອງ | ສະຫະລັດ |
Auth_001 | Orson Scott Card | ເກມ Ender ຂອງ | ສະຫະລັດ |
Auth_002 | Margaret Atwood | ບົດຂຽນຂອງແມ່ຍິງ | ແຄນາດາ |
ໃນຕົວຢ່າງ AUTHORS ຂ້າງເທິງ:
- Book → Author : ທີ່ນີ້, ຄຸນລັກສະນະ ປຶ້ມ ກໍານົດຄຸນສົມບັດ ຜູ້ຂຽນ . ຖ້າທ່ານຮູ້ຊື່ປຶ້ມ, ທ່ານສາມາດຮຽນຮູ້ຊື່ຂອງຜູ້ຂຽນໄດ້. ຢ່າງໃດກໍຕາມ, ຜູ້ຂຽນ ບໍ່ໄດ້ກໍານົດ ປື້ມ , ເນື່ອງຈາກວ່າຜູ້ຂຽນສາມາດຂຽນປື້ມຫຼາຍ. ຕົວຢ່າງ, ພຽງແຕ່ຍ້ອນວ່າພວກເຮົາຮູ້ຊື່ຂອງຜູ້ຂຽນ Orson Scott Card, ພວກເຮົາຍັງບໍ່ຮູ້ຊື່ປື້ມ.
- ຜູ້ຂຽນ Author_Nationality : ເຊັ່ນດຽວກັນ, ຄຸນລັກສະນະຂອງ ຜູ້ຂຽນ ກໍານົດ Author_Nationality , ແຕ່ບໍ່ແມ່ນວິທີອື່ນປະມານ; ພຽງແຕ່ຍ້ອນວ່າພວກເຮົາຮູ້ວ່າປະເທດຊາດບໍ່ໄດ້ຫມາຍຄວາມວ່າພວກເຮົາສາມາດກໍານົດຜູ້ຂຽນໄດ້.
ແຕ່ຕາຕະລາງນີ້ໄດ້ແນະນໍາໃຫ້ມີການຂັດແຍ້ງຂ້ອນຂ້າງ:
- Book → Author_Nationality: ຖ້າພວກເຮົາຮູ້ຊື່ປື້ມ, ພວກເຮົາສາມາດກໍານົດປະເທດຊາດໄດ້ໂດຍຜ່ານຖັນຜູ້ຂຽນ.
ຫຼີກເວັ້ນຄວາມຂັດແຍ່ງກັນ
ເພື່ອຮັບປະກັນຮູບແບບປົກກະຕິທີສາມ, ໃຫ້ເອົາຄວາມຂັດແຍ້ງທີ່ລ້າສະໄຫມ.
ພວກເຮົາສາມາດເລີ່ມຕົ້ນໂດຍຖອນປື້ມປື້ມປື້ມຈາກຕາລາງຜູ້ຂຽນແລະສ້າງຕາຕະລາງປຶ້ມແຍກຕ່າງຫາກ:
BOOKS
Book_ID | Book | Author_ID |
---|---|---|
Book_001 | ເກມ Ender ຂອງ | Auth_001 |
Book_001 | ເດັກນ້ອຍຂອງຈິດໃຈ | Auth_001 |
Book_002 | ບົດຂຽນຂອງແມ່ຍິງ | Auth_002 |
AUTHORS
Author_ID | ຜູ້ຂຽນ | Author_Nationality |
---|---|---|
Auth_001 | Orson Scott Card | ສະຫະລັດ |
Auth_002 | Margaret Atwood | ແຄນາດາ |
ນີ້ໄດ້ແກ້ໄຂມັນບໍ? ໃຫ້ກວດເບິ່ງຄວາມຂັດແຍ່ງຂອງພວກເຮົາໃນປັດຈຸບັນ:
ຕາຕະລາງຫນັງສື :
- Book_ID Book: ຫນັງສື ແມ່ນຂຶ້ນກັບ Book_ID .
- ບໍ່ມີຄວາມຂັດແຍ້ງອື່ນໆຢູ່ໃນຕາຕະລາງນີ້, ດັ່ງນັ້ນພວກເຮົາແມ່ນດີ. ໃຫ້ສັງເກດວ່າ Key ຕ່າງປະເທດ Author_ID ເຊື່ອມຕໍ່ຕາຕະລາງນີ້ກັບຕາຕະລາງ AUTHORS ໂດຍຜ່ານ Key_ID ຂອງຕົນຕົ້ນຕໍ. ພວກເຮົາໄດ້ສ້າງຄວາມສໍາພັນເພື່ອຫຼີກເວັ້ນການອາໄສຄວາມຂັດແຍ້ງ, ການອອກແບບທີ່ສໍາຄັນຂອງຖານຂໍ້ມູນກ່ຽວກັບການພົວພັນ.
AUTHORS table :
- Author_ID Author: Author depends on Author_ID .
- ຜູ້ຂຽນ Author_Nationality: ສາມາດຖືກກໍານົດໂດຍຜູ້ຂຽນ.
- Author_ID → Author_Nationality: ສັນຊາດສາມາດຖືກກໍານົດຈາກ Author_ID ຜ່ານ author attribute. ພວກເຮົາຍັງມີຄວາມຂັດແຍ່ງກັນ.
ພວກເຮົາຕ້ອງເພີ່ມຕາຕະລາງທີສາມເພື່ອປົກກະຕິຂໍ້ມູນນີ້:
ບັນດາປະເທດ
Country_ID | ປະເທດ |
---|---|
Coun_001 | ສະຫະລັດ |
Coun_002 | ແຄນາດາ |
AUTHORS
Author_ID | ຜູ້ຂຽນ | Country_ID |
---|---|---|
Auth_001 | Orson Scott Card | Coun_001 |
Auth_002 | Margaret Atwood | Coun_002 |
ໃນປັດຈຸບັນພວກເຮົາມີສາມຕາຕະລາງ, ການນໍາໃຊ້ທີ່ໃຊ້ຕ່າງປະເທດເພື່ອເຊື່ອມຕໍ່ລະຫວ່າງຕາຕະລາງ:
- ຫນັງສືຕ່າງປະເທດ Author_ID ຂອງຕາຕະລາງ BOOK ເຊື່ອມຕໍ່ປື້ມກັບຜູ້ຂຽນໃນຕາຕະລາງ AUTHORS.
- Key_ID ຕ່າງປະເທດຂອງຕາຕະລາງ AUTHORS ເຊື່ອມຕໍ່ຜູ້ຂຽນກັບປະເທດໃນຕາຕະລາງ COUNTRIES.
- ຕາລາງ COUNTRIES ບໍ່ມີຄີຕ່າງປະເທດຍ້ອນວ່າມັນບໍ່ຈໍາເປັນຕ້ອງເຊື່ອມໂຍງກັບຕາຕະລາງອື່ນໃນການອອກແບບນີ້.
ເປັນຫຍັງຄວາມຂັດແຍ້ງກ່ຽວກັບການປ່ຽນແປງແມ່ນການອອກແບບຖານຂໍ້ມູນທີ່ບໍ່ດີ
ສິ່ງທີ່ເປັນມູນຄ່າຂອງການຫຼີກເວັ້ນການຂັດແຍ້ງທີ່ມີການປ່ຽນແປງເພື່ອຊ່ວຍຮັບປະກັນ 3NF? ໃຫ້ພິຈາລະນາຕາຕະລາງທໍາອິດຂອງພວກເຮົາອີກເທື່ອຫນຶ່ງແລະເບິ່ງບັນຫາທີ່ມັນສ້າງ:
AUTHORS
Author_ID | ຜູ້ຂຽນ | Book | Author_Nationality |
---|---|---|---|
Auth_001 | Orson Scott Card | ເກມ Ender ຂອງ | ສະຫະລັດ |
Auth_001 | Orson Scott Card | ເດັກນ້ອຍຂອງຈິດໃຈ | ສະຫະລັດ |
Auth_002 | Margaret Atwood | ບົດຂຽນຂອງແມ່ຍິງ | ແຄນາດາ |
ແບບການອອກແບບນີ້ສາມາດປະກອບສ່ວນເຂົ້າຫາຂໍ້ມູນຜິດປົກກະຕິແລະຄວາມບໍ່ສອດຄ່ອງເຊັ່ນ:
- ຖ້າທ່ານລຶບສອງປື້ມ "Children of Mind" ແລະ "Ender's Game", ທ່ານຈະລຶບຜູ້ຂຽນ "Orson Scott Card" ແລະປະເທດລາວຫມົດຈາກຖານຂໍ້ມູນ.
- ທ່ານບໍ່ສາມາດເພີ່ມຜູ້ຂຽນໃຫມ່ໃຫ້ກັບຖານຂໍ້ມູນໄດ້ເວັ້ນເສຍແຕ່ວ່າທ່ານຍັງເພີ່ມປື້ມ; ສິ່ງທີ່ຖ້າຜູ້ຂຽນຍັງບໍ່ໄດ້ເຜີຍແຜ່ເທື່ອຫຼືທ່ານບໍ່ຮູ້ຊື່ຂອງປື້ມທີ່ນາງໄດ້ຂຽນໄວ້ບໍ?
- ຖ້າ "Orson Scott Card" ປ່ຽນແປງພົນລະເມືອງຂອງທ່ານ, ທ່ານຈະຕ້ອງປ່ຽນແປງມັນໃນທຸກບັນທຶກທີ່ລາວປາກົດ. ມີບັນທຶກຫຼາຍຄົນທີ່ມີຜູ້ຂຽນດຽວກັນສາມາດເຮັດໃຫ້ຂໍ້ມູນທີ່ບໍ່ຖືກຕ້ອງ: ຖ້າວ່າຜູ້ເຂົ້າຂໍ້ມູນບໍ່ໄດ້ຮັບຮູ້ວ່າມີບັນທຶກຫຼາຍຢ່າງສໍາລັບລາວແລະປ່ຽນແປງຂໍ້ມູນໃນບັນທຶກດຽວເທົ່າໃດ?
- ທ່ານບໍ່ສາມາດລຶບປື້ມປຶ້ມເຊັ່ນ "The Handmaid's Tale" ໂດຍບໍ່ມີການລົບຜູ້ຂຽນຢ່າງສົມບູນ.
ເຫຼົ່ານີ້ແມ່ນພຽງແຕ່ບາງເຫດຜົນວ່າເປັນຫຍັງ ປົກກະຕິ ແລ້ວ, ແລະຫຼີກເວັ້ນຄວາມຂັດແຍ່ງກັນ, ການປົກປ້ອງຂໍ້ມູນແລະຮັບປະກັນຄວາມສອດຄ່ອງ.