მონაცემები ჩვეულებრივ ასოცირდება პროგრამირებასთან და თანამედროვე საინფორმაციო სამყაროში წარმოდგენილია სამი ლოგიკურად ექვივალენტური ვერსიით: მონაცემები აღწერილი და გამოყენებული პროგრამაში პროგრამირების ენაზე; მონაცემები მონაცემთა ბაზის სისტემებში; მონაცემები განაწილებულ საინფორმაციო სისტემებში. თანამედროვე პროგრამირებამ შედარებით თავისუფლება მისცა ინფორმაციის ფორმალიზაციის მხოლოდ პირველ ვარიანტს. მეორე ორი ვარიანტი ინფორმაციის მიწოდებისა და მის კომპონენტებს შორის ურთიერთობის მეტ-ნაკლებად საიმედო ფორმებია.
მონაცემები წარსული და აწმყო
პროგრამირების ენების ფუნდამენტური პოზიცია მონაცემთა და ალგორითმების ზუსტი აღწერაა. კომპიუტერები არ "წარმოადგენენ" გაურკვევლობის რაიმე შანსს: არის რაღაც, რაზეც უნდა იმოქმედოთ და არის ბრძანება, რომელიც ასრულებს ამ მოქმედებას.
თანამედროვე კონცეფცია ეფუძნება ბევრად უფრო მაღალ საფუძველს: არსებობს მოცემულობა და ზუსტად რა იქნება, განისაზღვრება მისი გამოყენების ადგილზე. ნებისმიერ შემთხვევაში, გამოყენების დროს მონაცემები ავტომატურად შემოწმდება და სწორ ტიპად გარდაიქმნება.თანამედროვე პროგრამისტი არ არის ვალდებული იზრუნოს მათ წინასწარ აღწერასა და ალგორითმში ტიპის თავსებადობის დაცვაზე.
გადასვლის პროცესი:
- აკრეფილი მონაცემებიდან და მისი სავალდებულო აღწერილობიდან გამოყენებამდე;
- დაუბეჭდავი მონაცემებისა და მათი აღწერისა და გამოყენების ყოველგვარი ვალდებულებისგან თავისუფლება.
ფაქტობრივად, ჩვენ შეგვიძლია ვაღიაროთ ფორმალიზაციის მოთხოვნების შედარებითი რელაქსაცია - ის ხელმისაწვდომია მხოლოდ თანამედროვე პროგრამირების ხელსაწყოების გარემოში. გაშვების დროს, თითოეული მონაცემის ტიპი ფიქსირდება და ბრძანებების თანმიმდევრობა კარგად არის განსაზღვრული.
ტიპები და მოდელირება
მათემატიკა და ფიზიკა, ვაჭრობა და წარმოება, ეკონომიკა და სხვა სფეროები, სადაც რიცხვები გამოიყენება, ყოველთვის მუშაობდნენ მონაცემებით და არ ანიჭებდნენ მნიშვნელობას ტიპის ცნებას. ფაქტი, რომ რიცხვები შეიძლება იყოს მთლიანი ან წილადი, ნამდვილად არ ჰქონდა მნიშვნელობა.
თითოეული კონკრეტული ფორმულა ან კონკრეტული მოქმედება შეიძლება მისცეს მთელი რიცხვი, უსასრულო წილადი, რეალური ან რთული რიცხვი. აქამდე არსებობს გონების ისეთი საოცრება, როგორიცაა უსასრულოდ მცირე და უსასრულოდ დიდი. უფრო მეტიც, ამ სასწაულებს თვისებებიც კი აქვთ.
ჯერ კიდევ არ არის თავისუფლება პროგრამირებაში. ყველაფერი მკაცრად უნდა იყოს გაფორმებული. მონაცემთა კონცეფცია, პირველ რიგში, არის ტიპი:
- მთელი რიცხვი;
- ლოგიკური;
- char;
- სტრიქონი და ასე შემდეგ.
ტიპების სახელები შეიძლება განსხვავდებოდეს პროგრამირების სხვადასხვა ენაში, მაგრამ ყოველთვის არის მთელი ან რეალური რიცხვი, ლოგიკური მნიშვნელობა, სიმბოლო,ხაზი. ჯერ კიდევ დარჩა რელიკვიები და კონკრეტული იდეები: ხელმოუწერელი მთელი რიცხვი, კოდი, ბაიტი, სიტყვა, ორმაგი სიტყვა, ფიქსირებული სიგრძის სტრიქონი.
მონაცემთა კონცეფციას მონაცემთა სისტემაში არ აქვს თავისუფლება. SQL ენა - "საერთაშორისო" (არსებობს დიალექტი ყველა თანამედროვე მონაცემთა ბაზისთვის) - არ მოითმენს უზუსტობებს არა მხოლოდ მონაცემებში, არამედ sql შეკითხვებშიც. მოთხოვნაში შეცდომა არის შედეგის არარსებობის გარანტია. აღწერილობის დარღვევაზე საუბარი საერთოდ არ არის საჭირო.
ინფორმაციული პროცესებისა და მონაცემთა წარმოდგენის მოდელირება ერთადერთი საიმედო გზაა სტრუქტურის შესაქმნელად, რომელიც შეიძლება განვითარდეს და მოერგოს ცვალებად პირობებს.
ორიგინალის დინამიკა
ბუნებრივი ინფორმაცია უწყვეტი ცვლილებაა. მონაცემთა მოდელის ფორმალური აღწერისა და კონცეფციის მიცემა კონკრეტულ საგანში ნიშნავს სამი პრობლემის გადაჭრას:
- განსაზღვრე რა მონაცემებია აქ;
- ფორმალიზება მათ შორის ურთიერთობა;
- აღწერს პროცესებს მონაცემთა და ურთიერთობების შეცვლისთვის.
მარტივი ალგორითმის მონაცემთა ნაკრების მაგალითი JavaScript-ში - მონაცემთა ბაზის მართვის ყველაზე მყარი სისტემის მოდელის შემცირებული ასლიც კი.
უბრალოდ, მეორე შემთხვევაში, ექსპერტები და სპეციალისტები, მონაცემთა სტრუქტურების, ცხრილებისა და ურთიერთობების შემუშავებისას, ჩვეულებრივ, ვერ ხედავენ (ნამდვილად რთულია დიდი რაოდენობით ბუნებრივი ინფორმაციის დაფარვა) საგნების არსს და მიიღება უხერხული, განუვითარებელი მონაცემთა გროვა, ხოლო საგნის ზონაში წყაროს ინფორმაცია თავისუფლად და მარტივად ვრცელდება.
სტატიკურიშესაძლებელია
ჩვეულებრივია JavaScript-ის პრაქტიკა გვერდზე მიმაგრებული კოდის და გვერდის თეგებზე მოვლენებზე მინიჭებული ფუნქციების შეტანა. ნებისმიერ შემთხვევაში, გვერდის ტეგები განსაზღვრავს მონაცემებს, რომლებსაც მოცემული ვებ რესურსი იღებს, ცვლის ან ქმნის.
თუ თქვენი დამმუშავებლის კოდს ძალიან ფრთხილად აქცევთ ელემენტის მოვლენებზე და არა მთლიანად გვერდის კოდზე, ეს საუკეთესო გამოსავალია. იდეალურ შემთხვევაში, როდესაც კოდი არ შემოაქვს ახალ მონაცემებს ან არ აფიქსირებს ხელმისაწვდომ მონაცემებს, მაგრამ ყურადღებას ამახვილებს იმაზე, თუ რა აქვს მას დროის კონკრეტულ მომენტში.
სინამდვილეში, თუ თქვენ განსაზღვრავთ "მონაცემების" კონცეფციას, როგორც წყაროს ინფორმაციის მინიმალურად სტატიკური აღწერას და მიჰყვებით მას, მაშინ ეს ნიშნავს, რომ თქვენ გაქვთ წარმატების შანსი.
რაც შეეხება მონაცემთა ბაზებს, ყველაფერი ბევრად უფრო რთულია. ნებისმიერი JavaScript კოდი "უზრუნველყოფს" გვერდს ფუნქციონალურობით. ნებისმიერი მონაცემთა ბაზა არის ცხრილების კრებული, მათ შორის ურთიერთობები, შენახული პროცედურები, მოთხოვნები და ფუნქციები, რომლებიც ხელმისაწვდომია გარედან.
სტატიკური ნებისმიერი ალგორითმის პრობლემაა. მონაცემთა თანამედროვე კონცეფცია სტატიკურია: რიცხვი, სტრიქონი, სიმბოლო და ა.შ. დამუშავებისას ან მონაცემთა ბაზის ცხრილში ჩაწერისას, ყველაფერი შეუფერხებლად გამოდის. მაგრამ როდის იძენს ორიგინალი სხვა განზომილებას ან მნიშვნელობას? ვარიანტი პირველი: შეცვალეთ ნიშანი, მაგრამ კავშირები და მოთხოვნები შეიძლება მყისიერად მოხვდეს.
სტატიკა და ობიექტები
„მონაცემების“ცნების, როგორც ობიექტის განსაზღვრა სიტუაციას მკვეთრად ცვლის. ობიექტს აქვს საკუთარი სტრუქტურა. აქ შეგიძლიათ გამოიყენოთ ნებისმიერი ცვლადის ნებისმიერი აღწერა. როლი არ ითამაშებს. ობიექტს აქვს მეთოდები, რომლითაც ხელმისაწვდომია მონაცემები. მას შემდეგ რაც ყველაფერიგამოიყენება პროგრამირების სფეროში, ანუ სამი ძირითადი მეთოდი: წაკითხვა, ჩაწერა, შეცვლა. შეგიძლიათ დაამატოთ მეტი შედარებისთვის, ძებნისთვის, კლონირებისთვის და ა.შ.
სათაურის არე აწესებს თვისებებს თითოეულ მონაცემზე. ამრიგად, გამოდის, რომ მონაცემთა კონცეფცია გარდაიქმნება ერთგვარ აღწერაში, რომელიც შეიძლება შეიცვალოს დინამიურად. სტატიკური ობიექტის შიგნით იძლევა დინამიკას მის გარეთ.
ობიექტის შიგნით სტატიკური აღმწერების კომბინაციის შეცვლით, თქვენ არ უნდა ინერვიულოთ მისი ურთიერთობის დინამიკაზე სხვა ობიექტებთან.
დაპროგრამება და მონაცემთა პრეზენტაცია
რა არის მონაცემები? საზოგადოებრივი ცნობიერება უკვე მიჩვეულია საინფორმაციო ტექნოლოგიებს, მუშაობს ღრუბლებში და აქვს კონტეინერები ვირტუალურ სივრცეებში. ახლა არა მხოლოდ პროფესიონალი პროგრამისტები და მომხმარებლები, არამედ ჩვეულებრივი ადამიანებიც არიან კომპეტენტური ინფორმაციის და მისი გამოყენების საკითხებში.
მაგრამ რა არის პროგრამირება? დღემდე საზოგადოებრივი აზრი ამ ცნებისა და მისი ცნებების შემდეგ განმარტებას აძლევს:
- ინფორმაცია და მონაცემები არის ძირითადი ცნებები, რომლებიც გამოიყენება კომპიუტერულ მეცნიერებაში.
- მონაცემები არის გარკვეული გზით მიღებული და ჩაწერილი დაკვირვებები გარემომცველ რეალობასთან მიმართებაში.
- ისინი არის მარტივი და რთული (სტრუქტურები), პირველადი და მეორადი.
- მონაცემთა ბაზა არის დამოუკიდებელი მასალების კოლექცია, რომელიც წარმოდგენილია სისტემატიურად, რათა მათი პოვნა, შეცვლა და გამოყენება შესაძლებელი იყოს.
რამდენად ობიექტურია ეს? ავტორიტეტული ავტორებიასე ვფიქრობ. რეალური პრაქტიკა მიდრეკილია იმის უზრუნველსაყოფად, რომ თითოეული საგნობრივი სფერო განსაზღვრავს მის სწორ მონაცემთა სისტემას და აძლევს ყველა შესაძლებლობას კარგი დინამიური მოდელის შესაქმნელად.
არ არის იშვიათი შემთხვევა, როდესაც მომხმარებელი (მომხმარებელი) პროგრამისტს (მონაცემთა ბაზის დიზაინერს) აკისრებს საკუთარ აზრს, თუ როგორ და რა უნდა გააკეთოს. პროგრამირების თვალსაზრისით, მომხმარებლის ნებისმიერი სურვილი შეიძლება შესრულდეს მაქსიმალური სიზუსტით.
საჭიროა Oracle სოფლის წყალმომარაგების (სოფლის 21 კორპუსი) შენარჩუნების ბიუჯეტის პრობლემის გადასაჭრელად - კარგი. MySQL საჭიროა რუსეთის ყველა საფოსტო ოფისისთვის საფოსტო გზავნილების თვალთვალის სისტემის ორგანიზებისთვის - ყველაფერი ასევე იმუშავებს.
თქვენ ყოველთვის შეგიძლიათ შეადგინოთ ნებისმიერი ალგორითმი და უზრუნველყოთ წვდომა ინფორმაციის ნებისმიერ წარმოდგენაზე მონაცემთა კონცეფციის განსაზღვრის ფარგლებში, რომელიც დადგენილია მონაცემთა ბაზის მართვის სისტემის ან პროგრამირების ენის შემქმნელის მიერ. კითხვა განსხვავებულია: როგორ გავაკეთოთ ეს მინიმალური ხარჯებით მაქსიმალურ დინამიკაში?
მონაცემთა ბაზები, მაგალითები
უბრალო ბაზა იქმნება მოდელის გარეშე. მონაცემთა და კომუნიკაციის ძირითადი ცნებები მცირეა, ფუნქციონირება ძალიან მარტივი. მაგალითად, უმაღლესი სასწავლებლისთვის გჭირდებათ:
- მასწავლებელთა მაგიდა;
- ჯგუფის ცხრილი (გასაღები და ჯგუფის ნომერი);
- სტუდენტების საერთო ცხრილი (გამოყენებულია ჯგუფის გასაღებები).
დეკანს სურს იცოდეს მასწავლებლების პროგრესი. მასწავლებლების ცხრილს აქვს ველები:
- გვარი;
- სახელი;
- პატრონიმი;
- ზედამხედველობის ქვეშ მყოფი ჯგუფის ნომერი.
მოსწავლის ცხრილს აქვს ველები:
- გვარი;
- სახელი;
- პატრონიმი;
- დაბადების თარიღი;
- GPA (ყველა საგნისთვის);
- ჯგუფის ნომერი.
შეიძლება იყოს მინიმუმ ორი ვარიანტი შერჩევისთვის: მასწავლებლის სახელის გამოყენებით შეგიძლიათ ჯგუფის ნომერზე გადასვლა და ნახოთ ყველა მოსწავლე და მათი საშუალო ქულები, ან მასწავლებლის გვარისა და გვარის მიხედვით. მოსწავლის სახელი, შეგიძლიათ იხილოთ ბოლოს საშუალო ქულა.
ასეთ მარტივ ვერსიაშიც კი პრობლემები გარანტირებულია და რაღაც უნდა შეიცვალოს. სიტუაცია: მასწავლებელი ავად გახდა, მას კიდევ ერთი თვე ცვლის, რაც ნიშნავს, რომ ზედამხედველობს ორ ჯგუფს. მასწავლებლის ცხრილში ერთი ჯგუფის ნომრის ქვეშ არის მხოლოდ ერთი ველი.
პრობლემის გადასაჭრელად, თქვენ უნდა დაამატოთ დუბლიკატი ველი. და თუ ორი ავადდება, მაშინ დაამატეთ სამი ველი. ასე რომ, მასწავლებელთა ცხრილი ნულიდან იწყებს ზრდას.
არის კიდევ ერთი ვარიანტი: შეცვალეთ ჯგუფის გასაღების რიცხვითი ველი სიმბოლურით. შემდეგ, ყოველ ჯერზე, როცა აირჩევთ, მოგიწევთ სტრიქონის გადაქცევა გასაღებების თანმიმდევრობად და ერთი sql მოთხოვნა გადაიქცევა რამდენიმედ.
უფრო პერსპექტიული მაგალითია არა ცხრილების, არამედ ობიექტების გაკეთება. მაშინ მასწავლებელი არის ობიექტი და მას შეუძლია რამდენიმე ზედამხედველობის ჯგუფი. მაგრამ ის ყოველთვის ერთი ობიექტია. მასწავლებლის ობიექტს აქვს უნიკალური გასაღები, მაგრამ შეიძლება ჰქონდეს რამდენიმე ზედამხედველობის ჯგუფი. ჯგუფს ასევე აქვს უნიკალური გასაღები. სტუდენტიც.
სამივე პოზიცია არა მხოლოდ ხელმისაწვდომია ამოცანის ფარგლებში, არამედ შეიძლება შემდგომ განვითარდეს.
ობიექტზე ორიენტირებული საფუძვლები
ინფორმაციული ინდუსტრიის ლიდერებიგთავაზობთ კლასიკურ რელაციურ მონაცემთა ბაზებს. ისინი გამოცდილია ცხოვრებით, მუშაობენ, არიან უსაფრთხო, სანდო და პრობლემების შემთხვევაში ინფორმაციის აღდგენის საშუალებას გაძლევენ.
ობიექტზე ორიენტირებული მონაცემთა ბაზები (OODB) შემუშავება დაიწყო 1980-იანი წლების შუა ხანებში და, ავტორიტეტული ავტორების აზრით, პერსპექტიულია დღემდე. მაგრამ ჯერჯერობით, გარდა ფუნდამენტური თეორიებისა და კონცეპტუალური დებულებებისა, არ არსებობს OODB, რომელმაც მიაღწია იმავე რეიტინგს და განაწილებას, როგორც MySQL, MS SQL Server ან Oracle მის ყველა მრავალფეროვან ინკარნაციებში.
მაგრამ რა მოხდება, თუ მონაცემების, ტიპების, ატრიბუტების, კლასების, იერარქიების განმარტება, კონცეფცია შემოთავაზებულია დეველოპერის მიერ, რომლის რეიტინგი არასაკმარისია პროგრამისტების საზოგადოების შესაქმნელად, რომლებიც ასწავლიან ამ OODB-ის მენტალიტეტს? ჩვენ უნდა დავეყრდნოთ საკუთარ ძალებს.
OODB-ის ოცდაათზე მეტი ვარიანტი შეიქმნა Linux-ის გარემოში. მაგრამ სად არის გარანტია, რომ შექმნილი მონაცემთა ბაზა არ საჭიროებს მეტ ფუნქციონირებას? Windows-ის გარემო არ იძლევა დიდ გარანტიებს ამ სფეროში.
ობიექტზე ორიენტირებული გადაწყვეტა
თუმცა, გამოსავალი არსებობს. მაგალითად, MySQL-ის გამოყენებით, შეგიძლიათ აჩვენოთ, თუ როგორ გადაიქცევა სტანდარტული ურთიერთობითი ცხრილები მოგვარებული პრობლემის ობიექტზე ორიენტირებულ მოდელად.
აქ არ არის მონაცემთა ბაზა, მაგრამ არის გარემო ობიექტების საკუთარი სისტემის ფორმირებისთვის. MySQL-ის სიმძლავრე გამოიყენება მხოლოდ როგორც რელაციური მეხსიერება ცხრილებისთვის ინფორმაციის რიგებიდან. გამოყენების ლოგიკას თავად დეველოპერი განსაზღვრავს. კერძოდ, არის is_cache ცხრილი. ყველაფერი აქვსრამდენიმე ძირითადი ველი:
- მფლობელის_კოდი;
- სესიის_კოდი;
- h_code;
- ა_სიურპრიზი;
- a_contents.
დანარჩენი ველები ატარებენ სერვისის ფუნქციებს. ეს ცხრილი დგას ნებისმიერი მოთხოვნის შეყვანისას და აღრიცხავს მის ჩამოსვლას. თუ რას შეიმუშავებს მონაცემთა ბაზის მოდელი, განსაზღვრავს მისი დეველოპერი. რა მოერგება შინაარსის ველს (a_contents) განისაზღვრება დეველოპერის მიერ შექმნილი მოდელის ობიექტებით.
ამ იდეაში ოთხი რამ არის: დარტყმა, დარტყმის სესია, დარტყმის ისტორიის კოდი და კონკრეტული შინაარსი. რა არის ზარი, რა ობიექტების სისტემა უნდა აშენდეს - განსაზღვრავს დეველოპერი. რას ნიშნავს სესია (სამუშაო პროცესი) განსაზღვრავს დეველოპერი. ისტორიის კოდი არის მოთხოვნის უკან დაბრუნების შესაძლებლობა.
აქ ცხრილებს არაფერი აქვს საერთო სათაურთან. არის ზარის კონტროლერი (is_cache), არის ჟურნალი (is_customs), არის ზარის ისტორია (is_histories). დარჩენილი ცხრილები განისაზღვრება ამოხსნილი ამოცანის მიხედვით.
ფაქტობრივად, ეს გამოსავალი გვთავაზობს შექმნას თქვენი საკუთარი OODB, რომელიც ეფუძნება ჩაშენებული დომენის მონაცემთა ბაზის მოდელს და პრობლემის გადაჭრას. აქ არის უზარმაზარი პლიუსი - ეს არის მონაცემების თქვენი საკუთარი კონცეფცია, მათი პრეზენტაციის საკუთარი მოდელი და მათ შორის ურთიერთობა. აქ არის საფუძველი - დიდი ურთიერთობითი მონაცემთა ბაზა. არ იქნება პრობლემა რაღაცის ძიებაში და რაღაცის გაუგებრობაში.
მოდელი: ობიექტის სისტემა + DBMS
ინფორმაციულ ტექნოლოგიებში რაიმეს შეცვლა თითქმის შეუძლებელია. რეალური საინფორმაციო რევოლუცია ჯერ კიდევ შორსაა. პროფესიული ცნობიერებაპროგრამული უზრუნველყოფის შემქმნელები არ აპირებენ კლასიკური ტრადიციების შეცვლას. მაგრამ სიტუაციიდან გამოსავალი მაინც არსებობს.
მონაცემთა ბაზის მართვის სანდო თანამედროვე სისტემების გამოყენებით, როგორც საფუძველი საკუთარი მოდელის არსებობისთვის გარემოს შესაქმნელად, შეგიძლიათ მიაღწიოთ შესამჩნევ წარმატებას.
ნებისმიერ შემთხვევაში, ამოცანის გადასაჭრელად მოგიწევთ ხედის ან მონაცემთა მოდელის შექმნა, მაგრამ ეს სწორად უნდა შეასრულოთ: დაე ეს იყოს ობიექტების სისტემა და კარგი DBMS იყოს მისი გარემო.