Өгөгдлийн сан дахь нэгээс олон харилцаа

Агуулгын хүснэгт:

Өгөгдлийн сан дахь нэгээс олон харилцаа
Өгөгдлийн сан дахь нэгээс олон харилцаа
Anonim

Өгөгдлийн сангийн нэгээс олон хамаарал нь хүснэгт А-д байгаа бичлэг бүр B хүснэгтэд холбогдсон олон бичлэгтэй байж болох ч B хүснэгтэд байгаа бичлэг бүр А хүснэгтэд зөвхөн нэг харгалзах бичлэгтэй байх үед үүсдэг.

Өгөгдлийн сан дахь нэгээс олон харьцаа нь хамгийн түгээмэл харилцааны өгөгдлийн сангийн загвар бөгөөд сайн дизайны гол цөм юм.

Мөн мэдээллийн сан нь нэгийг харьцах, олон-олон харилцааг хэрэгжүүлэх боломжтой.

Image
Image

Нэгээс олон харилцааны жишээ

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

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

Нэг хүнтэй олон харилцаа тогтоох нь яагаад чухал вэ

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

Анхны ердийн маягтын загварыг дагаж мөрдөх

Магадгүй бид нэр болон заасан хичээлээ бичихийг хүссэн хүснэгт үүсгэсэн байх. Бид Багш болон Курсын хүснэгтийг дараах байдлаар боловсруулж болно:

Багшийн_ID Багшийн_Нэр Хичээл
Багш_001 Кармен Биологи
Багш_002 Вероника Математик
Багш_003 Жорге Англи

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

Багшийн_ID Багш_Нэр Хичээл
Багш_001 Кармен Биологи, Математик
Багш_002 Вероника Математик
Багш_003 Жорге Англи

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

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

Хоёр дахь ердийн маягтын дүрэм

Загварын өөр нэг хувилбар бол Карменд зориулж хоёр дахь бичлэг нэмэх явдал байж магадгүй:

Багш_ID Багш_Нэр Хичээл
Багш_001 Кармен Биологи
Багш_001 Кармен Математик
Багш_002 Вероника Математик
Багш_003 Жорге Англи

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

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

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

Нэгээс олон харилцаатай мэдээллийн санг хэрхэн зохиох вэ

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

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

Багш_ID Багш_Нэр
Багш_001 Кармен
Багш_002 Вероника
Багш_003 Жорге

Мөн энд Хичээлийн хүснэгт байна. Түүний гадаад түлхүүр болох Teacher_ID нь Багш нарын хүснэгтэд байгаа хичээлийг багштай холбодог болохыг анхаарна уу:

Хичээлийн_ID Хичээлийн_нэр Багшийн_ID
Хичээл_001 Биологи Багш_001
Хичээл_002 Математик Багш_001
Хичээл_003 Англи Багш_003

Бид гадаад түлхүүр ашиглан Багш нар болон Курсын хүснэгтийн хоорондын харилцааг бий болгосон. Энэ зохицуулалт нь Кармен Биологи, Математикийн аль алиныг нь заадаг бөгөөд Хорхе англи хэл заадаг гэдгийг хэлж байна.

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

Зөвлөмж болгож буй: