თავიდან იქნას აცილებული ტრანზიტული დამოკიდებულება ნორმალიზაციის უზრუნველსაყოფად
მონაცემთა ბაზაში დამახასიათებელი დამოკიდებულება იმავე მაგიდაზე ირიბი ურთიერთობებია, რაც იწვევს ფუნქციურ დამოკიდებულებას . მესამე ჩვეულებრივი ფორმის ნორმალიზაციის სტანდარტის მისაღწევად (3NF), თქვენ უნდა აღმოფხვრას ნებისმიერი ტრანზიტული დამოკიდებულება.
მისი ბუნებით, გარდამავალი დამოკიდებულება მოითხოვს სამ ან მეტ ატრიბუტს (ან მონაცემთა ბაზის სვეტებს), რომლებიც მათ შორის ფუნქციონალური დამოკიდებულებაა, რაც იმას ნიშნავს, რომ სვეტი A სვეტში ეყრდნობა სვეტი B- ს შუალედური სვეტის მეშვეობით.
მოდი ვნახოთ, როგორ შეიძლება ეს მუშაობა.
გარდამავალი დამოკიდებულების მაგალითი
ავტორები
ავტორი_ID | ავტორი | წიგნი | ავტორი_ეროვნულობა |
---|---|---|---|
Auth_001 | ორსონის სკოტი ბარათი | Ender- ის თამაში | შეერთებული შტატები |
Auth_001 | ორსონის სკოტი ბარათი | Ender- ის თამაში | შეერთებული შტატები |
Auth_002 | მარგარეტ ატვუდი | ჰენმადის ზღაპარი | კანადა |
ზემოთ ავტორის მაგალითში:
- წიგნი → ავტორი : აქ, წიგნი ატრიბუტი განსაზღვრავს ავტორი ატრიბუტს. თუ წიგნის სახელი იცით, შეგიძლია ისწავლოს ავტორის სახელი. თუმცა, ავტორი არ განსაზღვრავს წიგნს , რადგან ავტორს შეუძლია მრავალი წიგნის წერა. მაგალითად, მხოლოდ იმიტომ, რომ ჩვენ ვიცით ავტორის სახელი ორსონის სკოტი ბარათი, ჩვენ ჯერ კიდევ არ ვიცით წიგნის სახელი.
- ავტორი → Author_Nationality : ანალოგიურად, ავტორის ავტორი განსაზღვრავს Author_Nationality , მაგრამ არა სხვა გზა; მხოლოდ იმიტომ, რომ ჩვენ ვიცით მოქალაქეობა არ ნიშნავს იმას, რომ ჩვენ შეგვიძლია განვსაზღვროთ ავტორი.
მაგრამ ეს ცხრილი წარუდგენს გარდამავალ დამოკიდებულებას:
- წიგნი → Author_Nationality: თუ ჩვენ ვიცით წიგნის სახელი, ჩვენ შეგვიძლია განვსაზღვროთ მოქალაქეობა ავტორი სვეტის მეშვეობით.
გარდამავალი დამოკიდებულებების თავიდან აცილება
მესამე ჩვეულებრივი ფორმის უზრუნველსაყოფად, მოდი გამოვიყენოთ გარდამავალი დამოკიდებულება.
ჩვენ შეგვიძლია დავიწყოთ წიგნის სვეტის ავტორთა მაგიდადან და ცალკე წიგნების ცხრილის შექმნა:
წიგნები
Book_ID | წიგნი | ავტორი_ID |
---|---|---|
წიგნი_001 | Ender- ის თამაში | Auth_001 |
წიგნი_001 | გონების ბავშვები | Auth_001 |
წიგნი_002 | ჰენმადის ზღაპარი | Auth_002 |
ავტორები
ავტორი_ID | ავტორი | ავტორი_ეროვნულობა |
---|---|---|
Auth_001 | ორსონის სკოტი ბარათი | შეერთებული შტატები |
Auth_002 | მარგარეტ ატვუდი | კანადა |
ეს გაასწორა ეს? მოდით შეისწავლოს ჩვენი დამოკიდებულება ახლა:
BOOKS მაგიდა :
- Book_ID → წიგნი: წიგნი დამოკიდებულია Book_ID- ზე .
- ამ ცხრილში სხვა დანარჩენი დამოკიდებულება არ არსებობს, ამიტომ ჩვენ კარგად ვართ. გაითვალისწინეთ, რომ უცხოური საკვანძო ავტორი_იდი ამ ცხრილს აკავშირებს AUTHORS ცხრილის მეშვეობით მისი ძირითადი გასაღები ავტორი_ID . ჩვენ შევქმენით ურთიერთობა, რათა თავიდან იქნას აცილებული გარდამავალი დამოკიდებულება, რელატიური მონაცემთა ბაზების ძირითადი დიზაინი.
AUTHORS მაგიდა :
- Author_ID → ავტორი: ავტორი დამოკიდებულია ავტორი_ID .
- ავტორი → ავტორი_ეროვნულიობა: ეროვნება შეიძლება განისაზღვროს ავტორის მიერ.
- Author_ID → Author_Nationality: ეროვნება შეიძლება განისაზღვროს Author_ID ავტორი ავტორის მიერ. ჩვენ ჯერ კიდევ გვაქვს გარდამავალი დამოკიდებულება.
ჩვენ უნდა დავამატოთ მესამე მაგიდა ამ მონაცემების ნორმალიზებისთვის:
ქვეყნები
ქვეყანა _ID | ქვეყანა |
---|---|
Coun_001 | შეერთებული შტატები |
Coun_002 | კანადა |
ავტორები
ავტორი_ID | ავტორი | ქვეყანა _ID |
---|---|---|
Auth_001 | ორსონის სკოტი ბარათი | Coun_001 |
Auth_002 | მარგარეტ ატვუდი | Coun_002 |
ახლა გვაქვს სამი მაგიდა, რომელიც იყენებს უცხოური გასაღებების გამოყენებას ცხრილთა შორის:
- BOOK მაგიდის უცხოური გასაღები ავტორი_ID აკავშირებს წიგნს ავტორს AUTHORS- ის ცხრილში.
- AUTHORS ცხრილის უცხოური გასაღები Country_ID აკავშირებს ავტორი ქვეყნის COUNTRIES მაგიდაზე.
- COUNTRIES- ის ცხრილს უცხოური გასაღები არ გააჩნია, რადგან მას არ აქვს ამ დიზაინის სხვა მაგიდასთან დაკავშირება.
რატომ არის გადამწყვეტი დამოკიდებულება ცუდი მონაცემთა ბაზის დიზაინი?
რა არის ღირებულების თავიდან აცილების გარდამავალი დამოკიდებულებები, რათა უზრუნველყოს 3NF? მოდი განვიხილოთ ჩვენი პირველი მაგიდა და ვნახოთ ის, რაც ქმნის:
ავტორები
ავტორი_ID | ავტორი | წიგნი | ავტორი_ეროვნულობა |
---|---|---|---|
Auth_001 | ორსონის სკოტი ბარათი | Ender- ის თამაში | შეერთებული შტატები |
Auth_001 | ორსონის სკოტი ბარათი | გონების ბავშვები | შეერთებული შტატები |
Auth_002 | მარგარეტ ატვუდი | ჰენმადის ზღაპარი | კანადა |
ასეთი სახის დიზაინი ხელს შეუწყობს მონაცემების ანომალიებად და შეუსაბამობებს, მაგალითად:
- თუ წაიშალა ორი წიგნი "გონების ბავშვები" და "ეენდერის თამაში", თქვენ წაიშლება ავტორი "ორსონის სკოტი ბარათი" და მისი მოქალაქეობა მთლიანად მონაცემთა ბაზიდან.
- თქვენ ვერ დაამატებთ ახალ ავტორს მონაცემთა ბაზაში, თუ არ დაამატებთ წიგნს; რა მოხდება, თუ ავტორი ჯერჯერობით გამოუქვეყნებელია, ან არ იცნობთ წიგნის სახელს, რომლის ავტორიც არის?
- თუ "Orson Scott Card" შეიცვალა მოქალაქეობა, თქვენ უნდა შეცვალოთ იგი ყველა ჩანაწერში, რომელშიც ის გამოჩნდება. იმავე ავტორისათვის მრავალრიცხოვანი ჩანაწერი შეიძლება გამოიწვიოს არასწორი მონაცემებით: რა მოხდება, თუ მონაცემთა შეყვანის პიროვნება არ აცნობიერებს მისთვის მრავალრიცხოვან ჩანაწერებს და მონაცემებს ცვლის მხოლოდ ერთი ჩანაწერი?
- თქვენ ვერ წაიშლება წიგნი "The Handmaid's Tale", ასევე წაშალოს ავტორის მთლიანად.
ეს არის რამდენიმე მიზეზი, რის გამოც ნორმალიზაცია და გარდამავალი დამოკიდებულების თავიდან აცილება, მონაცემთა დაცვა და თანმიმდევრულობის უზრუნველყოფა.