ការដាក់ទិន្នន័យក្នុងសំណុំបែបបទធម្មតាទីបី (3NF)

សំណុំបែបបទទីបី (3NF) គឺជាគោលការណ៍មូលដ្ឋានគ្រឹះមួយដែលគាំទ្រភាពសុចរិតនៃទិន្នន័យដោយស្ថាបនាតាម គោលការណ៍ធម្មតា នៃ មូលដ្ឋានទិន្នន័យដែល បានផ្តល់ដោយទម្រង់ធម្មតាទីមួយ (1NF) និងទម្រង់ធម្មតាទី 2 (2NF) ។

តម្រូវការទម្រង់ទីបីធម្មតា

មានតម្រូវការមូលដ្ឋានចំនួនពីរសម្រាប់មូលដ្ឋានទិន្នន័យមួយដែលស្ថិតនៅក្នុងសំណុំបែបបទធម្មតាទីបីគឺ:

អំពីភាពអាស្រ័យលើកូនសោសំខាន់

ចូរស្វែងយល់បន្ថែមទៀតនូវអ្វីដែលយើងចង់និយាយដោយការពិតដែលថាជួរឈរទាំងអស់ត្រូវតែអាស្រ័យលើកូនសោសំខាន់។

ប្រសិនបើតម្លៃរបស់ជួរឈរអាចត្រូវបានយកមកពីកូនសោបឋមនិងជួរឈរមួយផ្សេងទៀតនៅក្នុងតារាងវារំលោភលើ 3NF ។ ពិចារណាតារាងនិយោជិកដែលមានជួរឈរទាំងនេះ:

តើទាំង LastName និង FirstName ពឹងផ្អែកតែលើតម្លៃរបស់ EmployeeID ទេ? ល្អតើ LastName អាចពឹងពាក់លើ FirstName បានទេ? ទេពីព្រោះគ្មានអ្វីដែលជាប់ទាក់ទងនឹង LastName នឹងស្នើតម្លៃនៃ FirstName ។ តើ FirstName ពឹងផ្អែកលើ LastName ឬទេ? មិនមានម្តងទៀតទេព្រោះដូចគ្នានេះគឺជាការពិត: ទោះជាមាន LastName ណាមួយក៏ដោយក៏វាមិនអាចផ្តល់ព័ត៌មានជំនួយអំពីតម្លៃនៃ FirstName ។ ដូច្នេះតារាងនេះគឺ 3NF ត្រាប់តាម។

ប៉ុន្តែសូមពិចារណាតារាងរថយន្តនេះ:

ក្រុមហ៊ុនផលិតនិងម៉ូដែលអាចទាញយកបានពីយានយន្ត - ប៉ុន្តែម៉ូដែលនេះក៏អាចទាញយកពីក្រុមហ៊ុនផលិតផងដែរព្រោះម៉ូដែលរថយន្តមួយត្រូវបានផលិតដោយក្រុមហ៊ុនផលិតតែប៉ុណ្ណោះ។ ការរៀបចំតារាងនេះគឺមិនអនុលោមតាម 3NF ហើយអាចបណ្តាលឱ្យមានភាពមិនប្រក្រតីនៃទិន្នន័យ។ ឧទាហរណ៍អ្នកអាចធ្វើបច្ចុប្បន្នភាពក្រុមហ៊ុនផលិតដោយមិនចាំបាច់ធ្វើបច្ចុប្បន្នភាពម៉ូដែលដោយណែនាំភាពមិនត្រឹមត្រូវ។

ដើម្បីធ្វើឱ្យវាអនុលោមយើងនឹងត្រូវការផ្លាស់ទីជួរឈរដែលអាស្រ័យបន្ថែមទៅតារាងផ្សេងទៀតហើយយោងវាដោយប្រើគ្រាប់ចុចបរទេស។ នេះនឹងមានលទ្ធផលនៅក្នុងតារាងពីរ:

តារាងរថយន្ត

នៅក្នុងតារាងខាងក្រោម ModelID គឺជាកូនសោបរទេសចំពោះតារាង គំរូ :

តារាងគំរូ

គំរូផែនទីថ្មីនេះនឹងបង្ហាញដល់អ្នកផលិត។ ប្រសិនបើអ្នកចង់ធ្វើបច្ចុប្បន្នភាពព័ត៌មានរថយន្តណាដែលជាក់លាក់ចំពោះម៉ូដែលមួយអ្នកនឹងធ្វើវានៅក្នុងតារាងនេះជាជាងនៅក្នុងតារាងរថយន្ត។

វាលដែលទទួលបានក្នុងគំរូ 3NF

តារាងមួយអាចមានវាលដែលចេញមក - មួយដែលត្រូវបានគណនាដោយផ្អែកលើជួរឈរផ្សេងៗនៅក្នុងតារាង។ ឧទាហរណ៍ពិចារណាតារាងនៃការបញ្ជាទិញធាតុក្រាហ្វិក:

ការបំបែកចំនួនសរុបនៃអនុលោមភាព 3NF ពីព្រោះវាអាចត្រូវបានទាញយកដោយគុណតម្លៃឯកតាតាមបរិមាណជាជាងការពឹងផ្អែកទាំងស្រុងទៅលើគន្លឹះសំខាន់។ យើងត្រូវលុបវាចេញពីតុដើម្បីបំពេញតាមទម្រង់ធម្មតាទី 3 ។

តាមការពិតចាប់តាំងពីវាត្រូវបានចេញមកវាល្អប្រសើរមិនត្រូវរក្សាទុកវានៅក្នុងមូលដ្ឋានទិន្នន័យទេ។

យើងអាចគណនាវាបានយ៉ាងរហ័សនៅពេលដំណើរការសំនួរមូលដ្ឋានទិន្នន័យ។ ឧទាហរណ៍យើងប្រហែលជាធ្លាប់បានប្រើសំណួរនេះពីមុនដើម្បីទាញយកលេខនិងចំនួនលំដាប់។

SELECT OrderNumber, Total FROM WidgetOrders

ឥឡូវនេះយើងអាចប្រើសំណួរដូចខាងក្រោម:

លេខរៀងលំដាប់លេខរៀងលេខគ្រឿង * បរិមាណ AS សរុបពី WidgetOrders

ដើម្បីសម្រេចបានលទ្ធផលដូចគ្នាដោយមិនបំពានលើច្បាប់ធម្មតា។