Ერთი- to-many ურთიერთობები მონაცემთა ბაზა

მონაცემთა ბაზაში ერთმანეთთან ურთიერთობები ხდება მაშინ, როდესაც ცხრილში თითოეული ჩანაწერი შეიძლება ჰქონდეს მრავალი ბმული ცხრილებში B- ს, მაგრამ თითოეული ჩანაწერი ცხრილში B შეიძლება ჰქონდეს მხოლოდ ერთი შესაბამისი ჩანაწერი ცხრილში. მონაცემთა ბაზა ყველაზე გავრცელებული მონაცემთა ბაზის დიზაინია და კარგი დიზაინის გულშია.

განვიხილოთ შორის ურთიერთობა მასწავლებლის და კურსები ისინი ასწავლიან. მასწავლებელს შეუძლია სწავლა მრავალჯერადი კურსები, მაგრამ კურსი არ ექნება იგივე ურთიერთობა პედაგოგთან.

აქედან გამომდინარე, თითოეული ჩანაწერისთვის მასწავლებელთა მაგიდაზე შეიძლება ბევრი ჩანაწერი იყოს კურსების მაგიდაზე. ეს არის ერთ-ერთი მრავალი ურთიერთობა: ერთი მასწავლებელი მრავალჯერადი კურსები.

რატომ მნიშვნელოვანია ერთმანეთთან ურთიერთობების დამყარება?

წარმოგიდგენთ ერთმანეთთან ურთიერთობას, საჭიროა მინიმუმ ორი მაგიდა. ვნახოთ, რატომ.

ალბათ შევქმენით პედაგოგთა მაგიდა, რომელშიც გვსურდა ჩაწერეთ სახელი და სასწავლო კურსი. ჩვენ შეგვიძლია დავამზადოთ ეს ასე:

მასწავლებლები და კურსები
მასწავლებელი_დ მასწავლებელი_სახელი კურსი
მასწავლებელი_001 კარმენი ბიოლოგია
მასწავლებელი_002 ვერონიკა მათემატიკა
მასწავლებელი_003 ჯორჯ ინგლისური

რა მოხდება, თუ კარმენი ასწავლის ორ ან მეტ კურსს? ჩვენ გვაქვს ორი ვარიანტი ამ დიზაინით. ჩვენ შეგვიძლია დავამატოთ კარმენის არსებული ჩანაწერი, ასე რომ:

მასწავლებლები და კურსები
მასწავლებელი_დ მასწავლებელი _ სახელი კურსი
მასწავლებელი_001 კარმენი ბიოლოგია, მათემატიკა
მასწავლებელი_002 ვერონიკა მათემატიკა
მასწავლებელი_003 ჯორჯ ინგლისური

თუმცა, ზემოთ მოყვანილი დიზაინი უხეშად არის და შეიძლება გამოიწვიოს პრობლემები მოგვიანებით, როდესაც ცდილობს ჩადეთ, შეცვალონ ან წაშალოს მონაცემები.

რაც ძნელია მონაცემების მოძიება. ეს დიზაინი არღვევს მონაცემთა ბაზის ნორმალიზაციის პირველ პრინციპს, პირველი ნორმალური ფორმა (1NF) , რომელშიც აღნიშნულია, რომ თითოეული ცხრილი უნდა შეიცავდეს მონაცემების ცალკეულ დისკრეტულ ნაწილს.

სხვა დიზაინის ალტერნატივა შეიძლება უბრალოდ დაამატოთ მეორე ჩანაწერი კარმენ:

მასწავლებლები და კურსები
მასწავლებელი _ID მასწავლებელი _ სახელი კურსი
მასწავლებელი_001 კარმენი ბიოლოგია
მასწავლებელი_001 კარმენი მათემატიკა
მასწავლებელი_002 ვერონიკა მათემატიკა
მასწავლებელი_003 ჯორჯ ინგლისური

ეს 1NF- ს უჭერს მხარს, მაგრამ ჯერ კიდევ ცუდი მონაცემთა ბაზის დიზაინია, რადგან იგი იძლევა redundancy და შეიძლება ძალიან დიდი მონაცემთა ბაზის აფეთქება. რაც უფრო მნიშვნელოვანია, მონაცემები შეიძლება შეუსაბამო გახდეს. მაგალითად, თუ კარმენის სახელი შეიცვალა? მონაცემთა ბაზასთან მუშაობის მსურველმა შეიძლება შეცვალოს მისი სახელი ერთი ჩანაწერით და ვერ შეცვალოს მეორე რეკორდი. ეს დიზაინი არღვევს მეორე ნორმალურ ფორმა (2NF), რომელიც 1NF- ს შეესაბამება და ასევე თავიდან უნდა იქნას აცილებული მრავალრიცხოვანი ჩანაწერების გადანაწილება მონაცემთა სუბიექტების განცალკევებით მრავალ მაგიდასთან და ქმნის მათ შორის ურთიერთობას.

როგორ შევქმნათ მონაცემთა ბაზა ერთი- to-many ურთიერთობები

პედაგოგებისა და კურსების ცხრილებში ერთმანეთთან ურთიერთობის განსახორციელებლად, მაგიდები დავწერეთ ორ და დაუკავშიროთ მათ უცხოური გასაღების გამოყენებით .

აქ, მასწავლებლის მაგიდაზე გავასრიეთ კურსი სვეტი:

მასწავლებლები
მასწავლებელი _ID მასწავლებელი _ სახელი
მასწავლებელი_001 კარმენი
მასწავლებელი_002 ვერონიკა
მასწავლებელი_003 ჯორჯ

აქ არის კურსების ცხრილი. გაითვალისწინეთ, რომ მისი უცხოური საკვანძო, მასწავლებელი_იდი, პედაგოგთა ცხრილის მასწავლებლის კურსს აკავშირებს:

კურსები
კურსის_იდი კურსის სახელი მასწავლებელი_დ
კურსის_001 ბიოლოგია მასწავლებელი_001
კურსები _002 მათემატიკა მასწავლებელი_001
კურსის _003 ინგლისური მასწავლებელი_003

მასწავლებლებსა და კურსების ცხრილს შორის საგარეო ურთიერთობების გამოყენებით შევქმენით ურთიერთობა.

ეს გვეუბნება, რომ ორივე ბიოლოგიასა და მათემატს კარმენი ასწავლის და ჯორჯი სწავლობს ინგლისურს.

ჩვენ ვხედავთ, როგორ ამ დიზაინის თავიდან აცილება შესაძლებელია ნებისმიერი შესაძლო გამოსწორების საშუალებას, საშუალებას აძლევს ინდივიდუალურ მასწავლებლებს ასწავლონ სხვადასხვა კურსები და ახორციელებენ ერთმანეთთან ურთიერთობას.

მონაცემთა ბაზები ასევე ახორციელებს ერთმანეთთან ურთიერთობას და ბევრს შორის ურთიერთობას.