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

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

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

მონაცემთა ბაზა შეცდომა # 1: განმეორებითი ველები მაგიდაზე

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

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

შეკვეთის ნომერი პროდუქტი 1 Product2 Product3
1 ტედი დათუნიები ჟელე ლობიო
2 ჟელე ლობიო

რა მოხდება, როდესაც ბრძანება შეიცავს ოთხ პროდუქტს? ჩვენ უნდა დავამატოთ კიდევ ერთი ველი მაგიდაზე, რომ ხელი შევუწყოთ სამ პროდუქტს. და თუ ჩვენ შევქმენით კლიენტის აპლიკაცია მაგიდის ირგვლივ, რათა დაგვეხმაროს შეყვანის მონაცემები, ჩვენ შეგვიძლია შეცვალოთ ის ახალი პროდუქტის ველით. და როგორ ვნახავთ ყველა ბრძანებას ჯულიბეანსთან ერთად? ჩვენ იძულებულნი ვიქნებით დავსვათ ყველა პროდუქტის ველი მაგიდაზე SQL- ის განცხადებით, რომელიც შესაძლოა გამოიყურებოდეს: SELECT * FROM PRODUCTS WHERE Product1 = 'ჟელე ლობიო' OR Product2 = 'ჟელე ლობიო' OR პროდუქტი 3 = 'ჟელე ლობიო'.

იმის მაგივრად, რომ ერთ მაგიდასთან ერთად, ყველა ინფორმაცია ერთად ივსება, ჩვენ უნდა გვქონდეს სამი მაგიდა, რომ თითოეული მათგანი მკაფიოდ გამოხატავს ინფორმაციას. ამ მაგალითში ჩვენ გვინდა ვიყიდოთ ბრძანებების შესახებ ინფორმაცია იმისათვის, რომ თავად შევიტანოთ ინფორმაცია, პროდუქციის მაგიდა ყველა ჩვენს პროდუქტთან და ProductOrders ტაბლეტთან, რომელიც უკავშირდება პროდუქტებს.

შეკვეთის ნომერი დამკვეთი შეკვეთის თარიღი სულ
1 7 1/24/17 19.99
2 9 1/25/17 24.99
ProductID პროდუქტი გრაფი
1 ტედი დათუნიები 1
2 ჟელე ლობიო 100
ProductOrderID ProductID შეკვეთის ნომერი
101 1 1
102 2 1

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

მონაცემთა ბაზის შეცდომა # 2: მაგიდის ჩანართზე ჩასმა

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

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

გაყიდვების ID პირველი ბოლო მისამართი ტელეფონის ნომერი ოფისი OfficeNumber
1 სემ ელიოტი 118 Main St, Austin, TX (215) 555-5858 Austin Downtown (212) 421-2412
2 ალისა სმიტი 504 მე -2 ქუჩა, ნიუ-იორკი, ნიუ-იორკი (211) 122-1821 ნიუ-იორკი (აღმოსავლეთი) (211) 855-4541
3 ჯო მრევლი 428 Aker St, Austin, TX (215) 545-5545 Austin Downtown (212) 421-2412

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

გაყიდვების ID პირველი ბოლო მისამართი ტელეფონის ნომერი OfficeID
1 სემ ელიოტი 118 Main St, Austin, TX (215) 555-5858 1
2 ალისა სმიტი 504 მე -2 ქუჩა, ნიუ-იორკი, ნიუ-იორკი (211) 122-1821 2
3 ჯო მრევლი 428 Aker St, Austin, TX (215) 545-5545 1
OfficeID ოფისი OfficeNumber
1 Austin Downtown (212) 421-2412
2 ნიუ-იორკი (აღმოსავლეთი) (211) 855-4541

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

მონაცემთა ბაზა შეცდომა # 3: ერთ ან რამდენიმე სფეროში ინფორმაციის ორი ან მეტი ცალი აყენებს

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

მაგალითად, რა მოხდება, თუ უნდოდა, რომ ვინმემ ოსტინის გაყიდვების ყველა შეკითხვას აწარმოო? ჩვენ უნდა მოძებნოთ მისამართი სფეროში, რომელიც არა მხოლოდ არაეფექტურია, არამედ შეიძლება ცუდი ინფორმაციის დაბრუნება. ყოველივე ამის შემდეგ, რა მოხდება, თუ ვინ ცხოვრობდა Austin ქუჩაზე Portland, Oregon?

აი რა მაგიდა უნდა გამოიყურებოდეს:

გაყიდვების ID პირველი ბოლო მისამართი 1 მისამართი 2 ქალაქი სახელმწიფო Zip ტელეფონი
1 სემ ელიოტი 118 ძირითადი ქ ოსტინი TX 78720 2155555858
2 ალისა სმიტი 504 მე -2 ქ ნიუ იორკი NY 10022 2111221821
3 ჯო მრევლი 428 აკერი ქ აპლიკაცია 304 ოსტინი TX 78716 2155455545

აქ არის რამოდენიმე რამ აღნიშვნა. პირველ რიგში, "მისამართი 1" და "მისამართი 2", როგორც ჩანს, განმეორებადი სფეროების შეცვლით მოდის.

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

ასევე, როგორც ბონუს შეცდომის თავიდან ასაცილებლად, შეამჩნევთ, თუ როგორ ჩამოყალიბდა ტელეფონის ნომრის ფორმატირება მაგიდაზე. თქვენ უნდა თავიდან იქნას აცილებული ველი, თუ გსურთ ყველაფრის ფორმატის შენახვა. ტელეფონის ნომრების შემთხვევაში, არსებობს მრავალი გზა, ვინც წერენ ტელეფონის ნომერს: 215-555-5858 ან (215) 555-5858. ეს ხელს შეუწყობს გაყიდვების პიროვნებას მათი ტელეფონის ნომრით, ან გაყიდვის ადამიანების ძებნა იმავე რეგიონის კოდით უფრო რთულდება.

მონაცემთა ბაზის შეცდომა # 4: არ არის სწორი ძირითადი გასაღები

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

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

და ეს პრობლემაა ფაქტობრივი ინფორმაციის გამოყენებით, როგორც ძირითადი მნიშვნელობა. მას შეუძლია შეცვალოს.

მონაცემთა ბაზა შეცდომა # 5: არ გამოიყენება დასახელებისგან კონვენცია

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

წარმოიდგინეთ, რამდენად უფრო რთული იქნება ეს პროცესი, თუ სახელები ინახება პირველი სახელით, LastName ერთ მაგიდაზე და first_name, last_name სხვა მაგიდაზე.

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

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

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

მონაცემთა ბაზა შეცდომა # 6: არასწორი ინდექსირება

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

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

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