Мэдээллийн сан дахь нэгээс олон харилцаа холбоо

Өгөгдлийн санд нэгээс олон харилцааг бий болгоно . Хүснэгт А дэх бичлэг бүр B хүснэгтэнд олон холбоостой байж болох боловч Хүснэгт Б дэх тэмдэглэл бүр нь зөвхөн Хүснэгт А-д харгалзах ганц бичлэгтэй байж болно. Мэдээллийн сан нь харилцан уялдаатай өгөгдлийн сангийн загвар бөгөөд сайн дизайнын зүрх сэтгэлд байдаг.

Багш болон тэдний заадаг хичээлүүдийн хоорондын харилцааг авч үзье. Багш олон хичээлийг зааж болох боловч хичээл нь багштайгаа ижил харилцаатай байх ёсгүй.

Тиймээс Багшийн хүснэгтэнд тэмдэглэл тус бүрийн хувьд Курсын хүснэгтэнд олон бичлэг байж болно. Энэ бол нэгээс олон харилцааг хэлдэг.

Яагаад ганц биетэйгээ харьцах нь чухал вэ?

Нэгээс олон харилцааг төлөөлөхийн тулд дор хаяж хоёр хүснэгт хэрэгтэй. Яагаад гэдгийг харъя.

Магадгүй бид багшийн нэрийг зааж өгөхийг хүссэн Багшийн хүснэгтийг бүтээсэн байж магадгүй юм. Бид иймэрхүү дизайнтай болно:

Багш, сургалт
Багш нар Багшийн нэр Курс
Багш_001 Кармен Биологи
Багш_002 Вероника Математик
Багш_003 Жорж Англи хэл

Хэрэв Кармен хоёр буюу түүнээс дээш курс заадаг бол яах вэ? Энэ дизайнтай хоёр сонголт бидэнд байна. Бид үүнийг Карменийн одоогийн бичлэгт нэмж бичиж болно:

Багш, сургалт
Багш нар Багш _Name Курс
Багш_001 Кармен Биологи, Математик
Багш_002 Вероника Математик
Багш_003 Жорж Англи хэл

Дээрх загвар нь уян хатан бус бөгөөд өгөгдлийг оруулах, засах эсвэл устгах үед асуудалтай тулгардаг.

Энэ нь өгөгдлийг хайхад хэцүү болгодог. Энэ загвар нь өгөгдлийн сангийн хэвийн, эхний хэвийн хэлбэр (1NF) -ын анхны зарчмыг зөрчдөг бөгөөд энэ нь хүснэгтийн нүд бүрт нэг, салангид өгөгдлийг агуулсан байх ёстой гэж заасан байдаг.

Карменийн хувьд хоёрдахь рекордыг нэмэхийн тулд өөр нэг загварыг ашиглаж болно:

Багш, сургалт
Багш нар Багш _Name Курс
Багш_001 Кармен Биологи
Багш_001 Кармен Математик
Багш_002 Вероника Математик
Багш_003 Жорж Англи хэл

Энэ нь 1NF-тэй нийцэж байгаа боловч мэдээллийн сан дутагдалтай хэвээр байгаа бөгөөд энэ нь ихээхэн хэмжээний мэдээллийн санг үүсгэхээс гадна маш их хэмжээний өгөгдлийн санг шаардлагагүй болгож чаддаг. Хамгийн чухал нь, өгөгдөл нь харилцан адилгүй болно. Жишээ нь, хэрэв Кармен нэр өөрчлөгдсөн бол яах вэ? Өгөгдөлтэй хэн нэгэн нь түүний нэрийг нэг бичлэгээр шинэчилдэг бөгөөд хоёр дахь бичлэгт шинэчлэгдэхгүй байж болно. Энэ загвар нь 2NF-ийг зөрчсөн 2NF-ийг зөрчдөг бөгөөд 1NF-ийг дагаж мөрддөг ба тэдгээрийн хоорондын уялдаа холбоог үүсгэхийн тулд олон тооны хүснэгтүүдийг өгөгдлүүдийн дэд хэсгүүдийг салгах замаар олон тооны бүртгэлээс зайлсхийх ёстой.

Олон тооны харьцаатай мэдээллийн санг хэрхэн боловсруулах вэ?

Багш, хичээлийн хүснэгтэнд нэгээс олон харилцааг хэрэгжүүлэхийн тулд бид хүснэгтүүдийг хоёр хувааж тэдгээрийг гадаад түлхүүрээр холбодог.

Энд бид Багшийн хүснэгт дэх Курсын баганыг хасав:

Багш нар
Багш нар Багш _Name
Багш_001 Кармен
Багш_002 Вероника
Багш_003 Жорж

Сургуулийн ширээ энд байна. Гадаадын түлхүүр, Teacher_ID нь Багш нарын хүснэгтэд багшийн курсийг холбохыг анхаарна уу:

Курсууд
Курс_ID Course_Name Багш нар
Course_001 Биологи Багш_001
Course_002 Математик Багш_001
Course_003 Англи хэл Багш_003

Багш, Сургалтын хүснэгтүүдийн хоорондох гадаад түлхүүрийг ашиглан харилцан хамаарал бий болгосон.

Энэ нь Биологийн болон Математик хоёул Карменийн заадаг, мөн Жорж англи хэл заадаг гэдгийг хэлдэг.

Энэ загвар нь ямар нэг давтагдашгүй нөөцөөс зайлсхийж, багш нар олон хичээл заах боломжийг олгодог бөгөөд нэгээс олон харилцааг хэрэгжүүлдэг.

Өгөгдлийн сангууд нь нэгээс нөгөөтэйгээ харилцах, олон тооны харилцааг хэрэгжүүлж чадна.