Тусламж үзүүлэх шилжилт хөдөлгөөнөөс зайлсхийх хэрэгтэй
Өгөгдлийн санд байгаа хамаарлаас хамаарах хамаарал нь нэг хүснэгтэд байгаа хамаарлын хоорондох шууд хамаарал юм. Гурав дахь жирийн маягт (3NF) -ийн хэвийн стандартыг хангахын тулд та ямар нэгэн хөндлөнгийн хамаарлыг арилгах ёстой.
Түүний шинж чанараар дамжин өнгөрөх хамаарал нь тэдгээрийн хоорондох хамаарал бүхий гурван буюу түүнээс дээш шинж чанар (эсвэл мэдээллийн баазын багана) шаарддаг бөгөөд энэ нь А баганан дахь А баганан нь В баганын дундын баганатайгаар хамааралтай гэсэн үг юм.
Энэ нь хэрхэн ажилладгийг харцгаая.
Transitive Dependency Жишээ
AUTHORS
Author_id | Зохиогч | Ном | Зохиогч_Nationality |
---|---|---|---|
Auth_001 | Orson Scott Card | Ender-ийн тоглоом | Нэгдсэн Улс |
Auth_001 | Orson Scott Card | Ender-ийн тоглоом | Нэгдсэн Улс |
Auth_002 | Маргарет Атвум | The Handmaid's Tale | Канад |
Дээрх AUTHORS жишээнд:
- ОУХДНС → Зохиогч : Энд Номын шинж чанар нь Зохиогчийн атрибутыг тодорхойлдог. Хэрэв та номны нэрийг мэддэг бол зохиогчийн нэрийг мэдэж болно. Гэсэн хэдий ч зохиогч номыг тодорхойлоогүй тул зохиогч олон ном бичиж чаддаг. Жишээлбэл зохиолчийн нэрийг Orson Scott Card мэддэг учраас бид номны нэрийг мэдэхгүй хэвээр байна.
- Зохиогч → Зохиогч_Nationality : Зохиогчийн эрхийн шинж чанар нь Author_Nationality-ийг тодорхойлдог боловч өөрөөр биш; Үндэс угсаа гэдэг нь бид зохиогчийг тодорхойлж чадна гэсэн үг биш юм.
Гэхдээ энэ хүснэгт нь трансцендент хамааралтай байдлыг харуулж байна:
- ОУХДНС → Зохиогч_Nationality: Хэрэв бид номны нэрийг мэдэх юм бол бид үндэслэгчийн нэрийг Зохиогч баганаар дамжуулан тодорхойлж болно.
Гүйлгээ хийхээс зайлсхийх
Гурав дахь хэвийн маягтыг баталгаажуулахын тулд, трансцендент хамаарлыг арилгах хэрэгтэй.
Номын багийг зохиогчийн хүснэгтээс хасаж, тусдаа номны хүснэгтийг үүсгэх замаар эхлүүлж болно:
Номууд
Book_ID | Ном | Author_id |
---|---|---|
Ном_001 | Ender-ийн тоглоом | Auth_001 |
Ном_001 | Оюун санааны хүүхдүүд | Auth_001 |
Ном_002 | The Handmaid's Tale | Auth_002 |
AUTHORS
Author_id | Зохиогч | Зохиогч_Nationality |
---|---|---|
Auth_001 | Orson Scott Card | Нэгдсэн Улс |
Auth_002 | Маргарет Атвум | Канад |
Үүнийг засаж байсан уу? Одоо бид хамааралтай байгаа эсэхийг шалгая:
Номын хүснэгт :
- Book_ID → Ном: Энэ ном нь Book_ID-аас хамаарна.
- Энэ хүснэгтийн бусад хамаарал байхгүй тул бид зүгээр юм. Гадны түлхүүр Зохиогч_ID энэ хүснэгтэд AUTHORS хүснэгтэд үндсэн түлхүүрийн Author_ID-аар холбодог болохыг анхаарна уу. Бид харилцан хамаарлын өгөгдлийн сангийн гол загвар болох трансцендент хамааралгүй байдлаас зайлсхийх харилцааг бий болгосон.
AUTHORS хүснэгт :
- Зохиогч_ID → Зохиогч: Зохиогч нь Author_ID-ээс хамаарна.
- Зохиогч → Зохиогчийн эрх: Иргэний харьяаллыг зохиогч тодорхойлж болно.
- Author_ID → Зохиогч_Nationality: Үндэс угсаа нь Author_ID- ээс Зохиогчын шинж чанараар тодорхойлж болно. Трансцендент хараат байдалтай байдаг.
Энэ өгөгдлийг хэвийн болгохын тулд бид гуравдахь хүснэгтийг нэмэх хэрэгтэй болно:
Улсууд
Country_ID | Улс |
---|---|
Coun_001 | Нэгдсэн Улс |
Coun_002 | Канад |
AUTHORS
Author_id | Зохиогч | Country_ID |
---|---|---|
Auth_001 | Orson Scott Card | Coun_001 |
Auth_002 | Маргарет Атвум | Coun_002 |
Хүснэгтүүдийн хооронд холбох гадаад түлхүүрүүдийг ашиглахын тулд бид гурван хүснэгттэй байна:
- BOOK хүснэгтийн гадаад түлхүүр Author_ID нь AUTHORS хүснэгтэд зохиогчийн номыг холбодог.
- AUTHORS хүснэгтийн гадаад түлхүүр Country_ID нь COUNTRIES хүснэгтэд тухайн улс руу хандана .
- COUNTRIES хүснэгтэд гадны түлхүүр байхгүй тул энэхүү загварт өөр хүснэгтэд холбох шаардлагагүй юм.
Яагаад Transitive Dependencies гэдэг нь мэдээллийн баазын дизайн гэж юу вэ
3NF-ийг хангахад туслах транс хараат бус байдлаас зайлсхийхийн ач холбогдол юу вэ? Эхний хүснэгтээ дахин харцгаая.
AUTHORS
Author_id | Зохиогч | Ном | Зохиогч_Nationality |
---|---|---|---|
Auth_001 | Orson Scott Card | Ender-ийн тоглоом | Нэгдсэн Улс |
Auth_001 | Orson Scott Card | Оюун санааны хүүхдүүд | Нэгдсэн Улс |
Auth_002 | Маргарет Атвум | The Handmaid's Tale | Канад |
Энэ төрлийн загвар нь өгөгдлийн гажуудал ба үл нийцэлт хувь нэмрээ оруулж болно, жишээ нь:
- Хэрэв та "Оюун Ухааны хүүхдүүд" болон "Энергийн тоглоом" гэсэн хоёр номыг устгасан бол та "Orson Scott Card" болон түүний үндэс угсааны мэдээллийн санг бүрэн устгах болно.
- Хэрэв та номоо нэмэхгүй бол мэдээллийн баазад шинэ зохиогч нэмэх боломжгүй; Хэрэв зохиогч хэвлэгдээгуй бол зохиогчийн нэрийг мэдэхгуй бол яах вэ?
- Хэрэв "Орсон Скотт Карт" нь түүний иргэншлийг өөрчилсөн бол түүний гарч ирсэн бүх бүртгэлд үүнийг өөрчлөх шаардлагатай болно. Ижил зохиогчтой олон бүртгэлтэй байх нь алдаатай өгөгдөл үүсгэх боломжтой. Мэдээлэл оруулах хүн өөрт нь олон тооны бичлэг байгааг мэдэхгүй бөгөөд зөвхөн нэг бичлэгт өөрчлөлт оруулах уу?
- Та зохиогчийн эрхийг бүрэн устгахгүйгээр "The Handmaid's Tale" гэх мэт номыг устгах боломжгүй.
Эдгээр нь ердийн байдал, транскрипцийн хамаарлаас зайлсхийх, өгөгдлийг хамгаалах, тогтвортой байдлыг хангахад оршино.