ជៀសវាងភាពប្រែប្រួលអាដាប់ធ័រដើម្បីជួយធានាឱ្យមានភាពធម្មតា
ការពឹងផ្អែកផ្លាស់ប្តូរនៅក្នុងមូលដ្ឋានទិន្នន័យគឺជាទំនាក់ទំនងប្រយោលរវាងតម្លៃនៅក្នុងតារាងតែមួយដែលបង្កឱ្យមាន ភាពអាស្រ័យមុខងារ ។ ដើម្បីសម្រេចបាននូវស្តង់ដារធម្មតានៃទម្រង់សាមញ្ញទីបី (3NF) អ្នកត្រូវតែលុបបំបាត់ភាពអាស្រ័យឆ្លងកាត់ណាមួយ។
តាមធម្មជាតិរបស់វាភាពអាស្រ័យឆ្លងកាត់តម្រូវឱ្យមានគុណលក្ខណៈបីឬច្រើន (ឬជួរដេកមូលដ្ឋានទិន្នន័យ) ដែលមានភាពពឹងផ្អែកមុខងាររវាងពួកគេមានន័យថាជួរឈរ A នៅក្នុងតារាងផ្អែកលើជួរឈរ B តាមរយៈជួរឈរកម្រិតមធ្យម C ។
តោះមើលរបៀបដែលវាអាចដំណើរការ។
ឧទាហរណ៍ភាពអាស្រ័យឆ្លងកាត់
អ្នកនិពន្ធ
អ្នកនិពន្ធ _ID | អ្នកនិពន្ធ | សៀវភៅ | អ្នកនិពន្ធ _ ជាតិ |
---|---|---|---|
Auth_001 | Orson Scott Card | ហ្គេមរបស់ Ender | សហរដ្ឋអាមេរិក |
Auth_001 | Orson Scott Card | ហ្គេមរបស់ Ender | សហរដ្ឋអាមេរិក |
Auth_002 | Margaret Atwood | រឿងនិទានរបស់ក្មួយស្រី | ប្រទេសកាណាដា |
នៅក្នុងឧទាហរណ៍ AUTHORS ខាងលើ:
- សៀវភៅ → អ្នកនិពន្ធ : នៅទីនេះគុណលក្ខណៈ សៀវភៅ កំណត់គុណលក្ខណៈ អ្នកនិពន្ធ ។ ប្រសិនបើអ្នកស្គាល់ឈ្មោះសៀវភៅអ្នកអាចរៀនឈ្មោះអ្នកនិពន្ធ។ ទោះជាយ៉ាងណាក៏ដោយ អ្នកនិពន្ធ មិនកំណត់ សៀវភៅ ទេពីព្រោះអ្នកនិពន្ធអាចសរសេរសៀវភៅច្រើន។ ឧទាហរណ៍ដោយគ្រាន់តែដឹងថាឈ្មោះអ្នកនិពន្ធឈ្មោះអាន់សុនស្កតកាតយើងនៅតែមិនស្គាល់ឈ្មោះសៀវភៅ។
- អ្នកនិពន្ធ → អ្នកនិពន្ធ @Nationality : ដូចគ្នានេះដែរគុណលក្ខណៈ អ្នកនិពន្ធ កំណត់ អ្នកនិពន្ធ _Nationality ប៉ុន្តែមិនមែនវិធីផ្សេងទៀតទេ។ គ្រាន់តែដោយសារតែយើងដឹងថាសញ្ជាតិមិនមានន័យថាយើងអាចកំណត់អ្នកនិពន្ធ។
ប៉ុន្តែតារាងនេះណែនាំភាពអាស្រ័យឆ្លងកាត់:
- សៀវភៅ → អ្នកនិពន្ធជាតិ: ប្រសិនបើយើងស្គាល់ឈ្មោះសៀវភៅយើងអាចកំណត់សញ្ជាតិតាមរយៈជួរឈរអ្នកនិពន្ធ។
ជៀសវាងភាពអាស្រ័យឆ្លងកាត់
ដើម្បីធានាបាននូវទម្រង់សាមញ្ញទីបីសូមយកចេញភាពអាស្រ័យឆ្លងកាត់។
យើងអាចចាប់ផ្ដើមដោយដកចេញនូវជួរឈរសៀវភៅពីតារាងអ្នកនិពន្ធនិងបង្កើតតារាងសៀវភៅដាច់ដោយឡែកមួយ:
សៀវភៅ
Book_ID | សៀវភៅ | អ្នកនិពន្ធ _ID |
---|---|---|
Book_001 | ហ្គេមរបស់ Ender | Auth_001 |
Book_001 | កុមារនៃគំនិត | Auth_001 |
Book_002 | រឿងនិទានរបស់ក្មួយស្រី | Auth_002 |
អ្នកនិពន្ធ
អ្នកនិពន្ធ _ID | អ្នកនិពន្ធ | អ្នកនិពន្ធ _ ជាតិ |
---|---|---|
Auth_001 | Orson Scott Card | សហរដ្ឋអាមេរិក |
Auth_002 | Margaret Atwood | ប្រទេសកាណាដា |
តើវាជួសជុលវាទេ? សូមពិនិត្យមើលភាពអាស្រ័យរបស់យើងឥឡូវនេះ:
តារាងសៀវភៅ :
- Book_ID → សៀវភៅ: សៀវភៅនេះ ពឹងផ្អែកលើសៀវភៅ - អាយឌី ។
- គ្មានភាពអាស្រ័យផ្សេងទៀតនៅក្នុងតារាងនេះទេដូច្នេះយើងមិនអីទេ។ ចំណាំថាកូនសោ អាលុយមីញ៉ូមអ្នក ភ្ជាប់ភ្ជាប់តារាងនេះទៅតារាង AUTHORS តាមរយៈកូនសោរបស់វា លេខសម្គាល់អ្នកប្រើ ។ យើងបានបង្កើតទំនាក់ទំនងដើម្បីជៀសវាងភាពអាស្រ័យឆ្លងកាត់ដែលជាការរៀបចំគន្លឹះនៃមូលដ្ឋានទិន្នន័យទំនាក់ទំនង។
តារាង AUTHORS :
- អ្នកនិពន្ធ _ID → អ្នកនិពន្ធ: អ្នកនិពន្ធ អាស្រ័យទៅលើ Author_ID ។
- អ្នកនិពន្ធ → អ្នកនិពន្ធ សញ្ជាតិ: សញ្ជាតិអាចត្រូវបានកំណត់ដោយអ្នកនិពន្ធ។
- អ្នកនិពន្ធ _ID → អ្នកនិពន្ធ _ សញ្ជាតិ: សញ្ជាតិអាចត្រូវបានកំណត់ពីលេខ សម្គាល់ អ្នកនិពន្ធ តាមរយៈគុណលក្ខណៈ អ្នកនិពន្ធ ។ យើងនៅមានភាពអាស្រ័យឆ្លងកាត់។
យើងត្រូវការបន្ថែមតារាងទីបីដើម្បីធ្វើឱ្យទិន្នន័យនេះមានលក្ខណៈធម្មតា:
ប្រទេស
Country_ID | ប្រទេស |
---|---|
Coun_001 | សហរដ្ឋអាមេរិក |
Coun_002 | ប្រទេសកាណាដា |
អ្នកនិពន្ធ
អ្នកនិពន្ធ _ID | អ្នកនិពន្ធ | Country_ID |
---|---|---|
Auth_001 | Orson Scott Card | Coun_001 |
Auth_002 | Margaret Atwood | Coun_002 |
ឥឡូវនេះយើងមានបីតុដោយប្រើកូនសោបរទេសដើម្បីភ្ជាប់រវាងតារាង:
- កូនសោបរទេសរបស់ Author_ID បាន ភ្ជាប់សៀវភៅទៅអ្នកនិពន្ធនៅក្នុងតារាង AUTHORS ។
- កូនសោបរទេស Country_ID របស់ AUTHORS ភ្ជាប់អ្នកនិពន្ធទៅប្រទេសនៅក្នុងតារាង COUNTRIES ។
- តារាង COUNTRIES មិនមានកូនសោបរទេសទេពីព្រោះវាមិនចាំបាច់ភ្ជាប់ទៅតារាងផ្សេងទៀតនៅក្នុងការរចនានេះទេ។
ហេតុអ្វីបានជាអាណាព្យាបាលដែលពឹងផ្អែកលើការផ្លាស់ប្តូរគឺមិនត្រឹមត្រូវ
តើអ្វីទៅជាតំលៃនៃការជៀសវាងភាពអាស្រ័យឆ្លងកាត់ដើម្បីជួយធានាបាននូវ 3NF? តោះពិចារណាតារាងទី 1 របស់យើងម្តងទៀតនិងមើលបញ្ហាដែលវាបង្កើត:
អ្នកនិពន្ធ
អ្នកនិពន្ធ _ID | អ្នកនិពន្ធ | សៀវភៅ | អ្នកនិពន្ធ _ ជាតិ |
---|---|---|---|
Auth_001 | Orson Scott Card | ហ្គេមរបស់ Ender | សហរដ្ឋអាមេរិក |
Auth_001 | Orson Scott Card | កុមារនៃគំនិត | សហរដ្ឋអាមេរិក |
Auth_002 | Margaret Atwood | រឿងនិទានរបស់ក្មួយស្រី | ប្រទេសកាណាដា |
ប្រភេទនៃការរចនានេះអាចរួមចំណែកដល់ភាពមិនប្រក្រតីនៃទិន្នន័យនិងភាពមិនស៊ីគ្នាឧទាហរណ៍:
- ប្រសិនបើអ្នកបានលុបសៀវភៅពីរ "កុមារនៃគំនិត" និង "ល្បែងល្បែង" អ្នកនឹងលុបអ្នកនិពន្ធ "Orson Scott Card" និងសញ្ជាតិរបស់គាត់ទាំងស្រុងពីមូលដ្ឋានទិន្នន័យ។
- អ្នកមិនអាចបន្ថែមអ្នកនិពន្ធថ្មីទៅមូលដ្ឋានទិន្នន័យទេលុះត្រាតែអ្នកបន្ថែមសៀវភៅ។ ចុះបើអ្នកនិពន្ធមិនទាន់បានបោះពុម្ពផ្សាយឬអ្នកមិនដឹងឈ្មោះសៀវភៅដែលគាត់បាននិពន្ធ?
- ប្រសិនបើ "Orson Scott Card" បានផ្លាស់ប្តូរសញ្ជាតិរបស់អ្នកអ្នកនឹងត្រូវផ្លាស់ប្តូរវានៅក្នុងកំណត់ត្រាទាំងអស់ដែលគាត់បង្ហាញ។ ការមានកំណត់ត្រាច្រើនជាមួយអ្នកនិពន្ធដូចគ្នាអាចនាំឱ្យមានទិន្នន័យមិនត្រឹមត្រូវ: ចុះបើអ្នកចូលទិន្នន័យមិនដឹងថាមានកំណត់ត្រាច្រើនសម្រាប់គាត់ហើយផ្លាស់ប្តូរទិន្នន័យតែក្នុងមួយកំណត់ទេ?
- អ្នកមិនអាចលុបសៀវភៅដូចជា "រឿងនិទានរបស់អ្នកបម្រើស្រីៗ" ដោយមិនចាំបាច់លុបចោលអ្នកនិពន្ធទាំងស្រុង។
ទាំងនេះគ្រាន់តែជាហេតុផលមួយចំនួនដែល ធ្វើឱ្យមានភាពធម្មតា និងជៀសវាងភាពអាស្រ័យឆ្លងកាត់ការពារទិន្នន័យនិងធានាបាននូវភាពស្ថិតស្ថេរ។