Აყენებს მონაცემთა ბაზის მესამე ჩვეულებრივი ფორმა (3NF)

მესამე ნორმალური ფორმა (3NF) არის მონაცემთა ბაზის პრინციპი, რომელიც მხარს უჭერს მონაცემთა მთლიანობას პირველი ნორმალური ფორმა (1NF) და მეორე ნორმალური ფორმა (2NF) მიერ მოწოდებული მონაცემთა ბაზის ნორმალიზაციის პრინციპებზე .

მესამე ჩვეულებრივი ფორმა მოთხოვნები

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

ძირითადი ძირითადი დამოკიდებულების შესახებ

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

თუ სვეტის მნიშვნელობა შეიძლება იყოს როგორც ძირითადი, ასევე მეორე სვეტის მაგიდა, ის არღვევს 3NF. განვიხილოთ თანამშრომლების მაგიდა ამ სვეტით:

გააკეთეთ როგორც LastName და FirstName დამოკიდებული მხოლოდ EmployeeID- ის ღირებულებაზე? შეიძლება, შეეძლო LastName დამოკიდებულია FirstName- ზე? არა, რადგან LastName- ში არაფერია ნახსენები პირველი სახელით. შეიძლება პირველი სახელი დაიცვას LastName- ზე? არა ერთხელ, იმიტომ, რომ იგივე შეიძლება ითქვას: რაც არ უნდა იყოს LastName, ის ვერ უზრუნველყოფს მინიშნებას პირველი სახელით. აქედან გამომდინარე, ეს ცხრილი არის 3NF შესაბამისი.

მაგრამ გაითვალისწინეთ ეს მანქანები მაგიდა:

მწარმოებელმა და მოდელმა შეიძლება წარმოადგინოს VehicleID- ისგან, მაგრამ მოდელი შეიძლება გამოიმუშავოს მწარმოებელიდან, რადგან ავტომობილის მოდელი მხოლოდ კონკრეტული მწარმოებლის მიერ ხდება. ამ ცხრილის დიზაინი არ არის 3NF- ის შესაბამისი, და, შესაბამისად, შეიძლება გამოიწვიოს მონაცემთა ანომალიები. მაგალითად, თქვენ შეგიძლიათ განაახლოთ მწარმოებელს მოდელების განახლების გარეშე, შემოიღონ უზუსტობები.

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

მანქანები მაგიდა

ქვემოთ მოყვანილ ცხრილში, ModelID არის უცხოური გასაღები მოდელების მაგიდაზე:

მოდელები მაგიდა

ეს ახალი მაგიდის რუკები მოდელები მწარმოებლები. თუ გსურთ განაახლოთ ნებისმიერი ავტომობილის ინფორმაცია მოდელისთვის, ამის გაკეთება გსურთ მაგიდასთან, ვიდრე სატრანსპორტო მაგიდაზე.

მოპოვებული საველეები 3NF მოდელის მიხედვით

მაგიდა შეიძლება შეიცავდეს გამომუშავებულ ველს - ერთი, რომელიც გამოითვლება მაგიდის სხვა სვეტების მიხედვით. მაგალითად, ვიჯეტის ბრძანებების ამ ცხრილის გათვალისწინებით:

სულ შესვენება 3NF შესაბამისობა, რადგან ის შეიძლება გამომდინარე იქნეს ერთეულის ფასის გამრავლებით რაოდენობით, ვიდრე მთლიანად დამოკიდებული პირველადი გასაღები. ჩვენ უნდა ამოიღონ ის მაგიდა, რომ შეასრულოს მესამე ნორმალური ფორმა.

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

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

SELECT OrderNumber, ტოტალიზატორი WidgetOrders

ახლა ჩვენ შეგვიძლია გამოვიყენოთ შემდეგი შეკითხვა:

SELECT დაალაგე ნომერი, UnitPrice * რაოდენობა როგორც ტოტალიზატორისთვის WidgetOrders

იგივე შედეგის მისაღწევად ნორმალიზაციის წესების დარღვევის გარეშე.