მესამე ნორმალური ფორმა (3NF) არის მონაცემთა ბაზის პრინციპი, რომელიც მხარს უჭერს მონაცემთა მთლიანობას პირველი ნორმალური ფორმა (1NF) და მეორე ნორმალური ფორმა (2NF) მიერ მოწოდებული მონაცემთა ბაზის ნორმალიზაციის პრინციპებზე .
მესამე ჩვეულებრივი ფორმა მოთხოვნები
მონაცემთა ბაზისთვის ორი ძირითადი მოთხოვნაა მესამე ნორმალურ ფორმაში:
- მონაცემთა ბაზა უკვე უნდა აკმაყოფილებდეს 1NF და 2NF მოთხოვნებს .
- ყველა მონაცემთა ბაზის სვეტები უნდა იყოს დამოკიდებული პირველადი გასაღები , რაც იმას ნიშნავს, რომ ნებისმიერი სვეტის მნიშვნელობა შეიძლება იყოს მხოლოდ ძირითადი გასაღები.
ძირითადი ძირითადი დამოკიდებულების შესახებ
მოდით შეისწავლონ შემდგომი რას ვგულისხმობთ იმით, რომ ყველა სვეტი უნდა იყოს დამოკიდებული პირველადი გასაღები.
თუ სვეტის მნიშვნელობა შეიძლება იყოს როგორც ძირითადი, ასევე მეორე სვეტის მაგიდა, ის არღვევს 3NF. განვიხილოთ თანამშრომლების მაგიდა ამ სვეტით:
- თანამშრომელი
- სახელი
- გვარი
გააკეთეთ როგორც LastName და FirstName დამოკიდებული მხოლოდ EmployeeID- ის ღირებულებაზე? შეიძლება, შეეძლო LastName დამოკიდებულია FirstName- ზე? არა, რადგან LastName- ში არაფერია ნახსენები პირველი სახელით. შეიძლება პირველი სახელი დაიცვას LastName- ზე? არა ერთხელ, იმიტომ, რომ იგივე შეიძლება ითქვას: რაც არ უნდა იყოს LastName, ის ვერ უზრუნველყოფს მინიშნებას პირველი სახელით. აქედან გამომდინარე, ეს ცხრილი არის 3NF შესაბამისი.
მაგრამ გაითვალისწინეთ ეს მანქანები მაგიდა:
- ავტომობილი
- მწარმოებელი
- მოდელი
მწარმოებელმა და მოდელმა შეიძლება წარმოადგინოს VehicleID- ისგან, მაგრამ მოდელი შეიძლება გამოიმუშავოს მწარმოებელიდან, რადგან ავტომობილის მოდელი მხოლოდ კონკრეტული მწარმოებლის მიერ ხდება. ამ ცხრილის დიზაინი არ არის 3NF- ის შესაბამისი, და, შესაბამისად, შეიძლება გამოიწვიოს მონაცემთა ანომალიები. მაგალითად, თქვენ შეგიძლიათ განაახლოთ მწარმოებელს მოდელების განახლების გარეშე, შემოიღონ უზუსტობები.
იმისათვის, რომ ის შეესაბამებოდეს, ჩვენ უნდა გადავიდეს დამატებითი დამოკიდებული სვეტი სხვა მაგიდაზე და მიუთითეთ იგი უცხოური გასაღებით. ეს გამოიწვევს ორ მაგიდას:
მანქანები მაგიდა
ქვემოთ მოყვანილ ცხრილში, ModelID არის უცხოური გასაღები მოდელების მაგიდაზე:
- ავტომობილი
- მწარმოებელი
- ModelID
მოდელები მაგიდა
ეს ახალი მაგიდის რუკები მოდელები მწარმოებლები. თუ გსურთ განაახლოთ ნებისმიერი ავტომობილის ინფორმაცია მოდელისთვის, ამის გაკეთება გსურთ მაგიდასთან, ვიდრე სატრანსპორტო მაგიდაზე.
- ModelID
- მწარმოებელი
- მოდელი
მოპოვებული საველეები 3NF მოდელის მიხედვით
მაგიდა შეიძლება შეიცავდეს გამომუშავებულ ველს - ერთი, რომელიც გამოითვლება მაგიდის სხვა სვეტების მიხედვით. მაგალითად, ვიჯეტის ბრძანებების ამ ცხრილის გათვალისწინებით:
- შეკვეთის ნომერი
- დამკვეთი ნომერი
- ერთეულის ფასი
- რაოდენობა
- სულ
სულ შესვენება 3NF შესაბამისობა, რადგან ის შეიძლება გამომდინარე იქნეს ერთეულის ფასის გამრავლებით რაოდენობით, ვიდრე მთლიანად დამოკიდებული პირველადი გასაღები. ჩვენ უნდა ამოიღონ ის მაგიდა, რომ შეასრულოს მესამე ნორმალური ფორმა.
სინამდვილეში, რადგან იგი გამომდინარეობს, უმჯობესია მონაცემთა ბაზაში შენახვა არ არის.
ჩვენ შეგვიძლია უბრალოდ გამოთვალოთ იგი "ფრენაზე", როდესაც მონაცემთა ბაზების შეკითხვებს ასრულებს. მაგალითად, ჩვენ შეიძლება გამოყენებულ იქნეს ეს შეკითხვა იმისათვის, რომ მივიღო შეკვეთის ნომრები და რიცხვები:
SELECT OrderNumber, ტოტალიზატორი WidgetOrdersახლა ჩვენ შეგვიძლია გამოვიყენოთ შემდეგი შეკითხვა:
SELECT დაალაგე ნომერი, UnitPrice * რაოდენობა როგორც ტოტალიზატორისთვის WidgetOrdersიგივე შედეგის მისაღწევად ნორმალიზაციის წესების დარღვევის გარეშე.