Курсовая работа на казахском база данных мини маркета. Курсовая работа. Есеп беру
Скачать 481.91 Kb.
|
Қазақстан Республикасы білім және ғылым министрлігі «Ғұмарбек Дәукеев атындағы Алматы энергетика және байланыс университеті» коммерциялық емес АҚ Басқару жүйелері және ақпараттық технологиялар институты IT-инжиниринг кафедрасы КУРСТЫҚ ЖҰМЫС бойынша ЕСЕП БЕРУ Пәннің атауы: Серверлік деректер қоры Тақырыбы: Шағын маркет Мамандығы: 5В070400 – Есептеу техникасы және программалық жабдықтамалау Орындаған: Жалғас Д. Б. Тобы: ВТк-18-2 Қабылдаған: доц. Аманбаев А. А. Алматы 2020 Мазмұны: Кіріспе.....................................................................................................................3 Негізгі бөлім...........................................................................................................4 Орындалу барысы........................................................................................4 Дерекқорын құру..........................................................................................4 Кестелерді құру............................................................................................4 1-ші нормализация.......................................................................................5 2-ші нормализация.......................................................................................6 Кестені толтыру...........................................................................................6 Міндетті тапсырмалар.................................................................................8 7 қарапайым сұраныс........................................................................9 5 күрделі сұраныс..............................................................................10 2 функция..........................................................................................11 2 көрініс.............................................................................................12 3 процедура.......................................................................................13 1 триггер............................................................................................14 Қорытынды..........................................................................................................21 Пайдаланылған әдебиеттер...............................................................................22 Кіріспе: Құралдар: Дерекқормен жұмыс үшін SQL SERVER MANAGEMENT STUDIO. Microsoft SQL Server - бұл Microsoft корпорациясы жасаған реляциялық мәліметтер қорын басқару жүйесі (RDBMS). Негізгі сұраныс тілі - Microsoft және Sybase бірлесіп жасаған Transact-SQL. Transact-SQL - ANSI / ISO құрылымдық сұраныстар тілінің (SQL) кеңейтілімдерімен орындалуы. Дербес деректер базасынан бастап ірі корпоративті мәліметтер базасымен жұмыс істеу үшін қолданылады; осы нарық сегментінде басқа ДҚБЖ-мен бәсекелес. T-SQL (Transact-SQL) - бұл Microsoft корпорациясының SQL Server үшін меншікті процедуралық тілдік кеңейтімі. Ол SQL Server-дің арнайы параметрлерін, қауіпсіздік пен мәліметтер қорының статистикасын басқаруды қоса, деректерді манипуляциялау (DML) және деректерді анықтау (DDL) нұсқауларына арналған SQL стандартты нұсқаулар жиынтығын кеңейтетін REPL (Read-Eval-Print-Loop) нұсқауларын ұсынады. Ол SQL Server-де орындалатын операцияларға арналған кілт сөздерді, соның ішінде мәліметтер базасының схемаларын құру мен өзгертуді, мәліметтер базасына деректерді енгізу мен редакциялауды, сонымен қатар сервердің өзін бақылауды және басқаруды ұсынады. Деректерді тұтынатын немесе серверді басқаратын клиенттік қосымшалар SQL Server-дің T-SQL сұраулары мен мәлімдемелерін жіберіп, содан кейін сервер өңдейтін және клиенттің қосымшасына қайтарылған нәтижелер (немесе қателер) жіберу арқылы SQL Server функциясын қолданады. Бұл дерекқор міндетті түрде 1-ші және 2-ші нормалау ережелеріне сай келу керек. 1-ші қалыпты форма: Бұл формада кестелер мына шарттарға сәйкес келуі керек: Сызықтардың жоғарыдан төменге реттелуі жоқ (басқаша айтқанда, жолдардың реті ешқандай мән бермейді). Солдан оңға бағанға тапсырыс беру жоқ (басқаша айтқанда, бағандардың реті ешқандай мән бермейді). Қайталанатын жолдар жоқ. Әрбір жол мен баған қиылысында сәйкес доменнен бір мән бар (және басқа ештеңе жоқ). Барлық бағандар қалыпты. 2-ші қалыпты форма: Екінші қалыпты форма, анықтама бойынша, негізгі кілтіне мүлдем тәуелді емес кілттік емес атрибуттардың болуына жол бермейді. Сонымен, екінші қалыпты форма атрибуттардың байланыссыз (хаотикалық, кездейсоқ) жиынтығы ретінде қатынастар құруға да тыйым салады. Негізгі бөлім Жұмыс тапсырмасы: Функционалды және 1-ші мен 2-ші нормализация ережесіне сай келетін Шағын маркет жүйесінің деректер қорын құру. Міндетті тапсырмалар: 7 қарапайым және күрделі сұраныс, 3 көрініс, 4 функция және процедура, 2 триггер. Жұмыс мақсаты: 1-ші және 2-ші нормализациядан өтетін функционалды дерекқор құру. Орындалу барысы: Дерекқорын құру Кестелерді құру Нормализацияны тексеру Кестені толтыру Міндетті тапсырмалар Деректер қорын құру: Мини маркет 6 кесте: Товар, Менеджери_поставок, Поставка_товара, Продавцы, Продажа_товара, Поставщики 1-ші кесте: Товар: create table Товар (Код_товара int not null primary key, Экземпляр char(30) not null) 2-ші кесте: Менеджери_поставок: create table Менеджери_поставок (Код_менеджера_поставщика int not null primary key, Фамилия char(20) not null, Имя char(15) not null, Отчество char(20) not null, Телефон int not null) ); 3-ші кесте: Поставщики: create table Поставщики (Код_постовщика int not null primary key, Фирма char(20) not null) 4-ші кесте: Поставка_товара: create table Поставка_товара (Код_поставки int not null primary key, Код_товара int not null references Товар, Код_постовщика int not null references Поставщики, Количество_поставки int not null, Цена_поставки money not null, Сумма_поставки money not null, Код_менеджера_поставщика int not null references Менеджери_поставок) ); 5-ші кесте: Продавцы: create table Продавцы (Код_продавца int not null primary key, Фамилия char(20) not null, Имя char(15) not null, Отчество char(20) not null, Телефон int not null) 6-шы кесте: Продажи товара: create table Продажа_товара (Код_чека int not null primary key, Код_товара int not null references Товар, Количество_прод_товара int not null, Цена_прод_товара money not null, Доход money not null, Код_продавца int not null references Продавцы) 1-ші Нормализация: 1 кесте мен бірнеше кесте байланысы: Бұл жерде ең бірінші Товар, Продавцы, Поставщики және Менеджери_поставок кестелеріне мәлімет енгізуге болады. Содан кейін, Продажа_товара және Поставка_товара кестесіне мәлімет енгізуге рұқсат. Әйтпесе, кестеде қате шығады. Мысалы, товарды бірінші сатып, артынша товарды базаға енгізу ол қате. 2-ші нормализация: Бір кестенің ерекше бағаны екінші кестеге PRIMARY KEY сілтемесі ретінде орындалса, екінші кесте бағаны FOREIGN KEY қабылдау керек, сонымен қатар ол ерекше болмау керек және басқа кесте үшін PRIMARY KEY мәнін қабылдамау керек. Ең дұрысы, егер бір кесте екінші кестемен байланысқа түссе, ал екінші кесте үшінші кестемен байланыста болса, бірінші кесте мен үшінші кесте аралығында тікелей байланысты болдырмау керек, өйткені олар жанама байланыспен-ақ мәліметті қабылдай алады. Кестені толтыру: Товар кестесі: insert into Товар values (1, 'Сыр копченый'), (2, 'Молоко'), (3, 'Творог'), (4, 'Сметана'), (5, 'Йогурт'), (6, 'Сыр плавленый'), (7, 'Кефир'), (8, 'Ряженка'), (9, 'Сыр российский'), (10, 'Снежок'); Поставщики кестесі: insert into Поставщики values (11, 'ОАО "Молоко"'), (12, 'ОАО "МолПрод"'), (13, 'ОАО "Снежинка"'), (14, 'ОАО "Меркурий+"'), (15, 'ОАО "Молочный дом"'); Менеджери_поставок кестесі: insert into Менеджери_поставок values (21, 'Банин', 'Александр', 'Абрамович', 22431), (22, 'Сидорова', 'Раиса', 'Николаевна', 22543), (23, 'Викенов', 'Дмитрий', 'Александрович', 22564), (24, 'Воробьев', 'Николай', 'Иванович', 22468), (25, 'Николаева', 'Юлия', 'Михайловна', 22541); Поставка_товара кестесі: insert into Поставка_товара values (31, 1, 15, 210, 190, 0, 22), (32, 2, 12, 280, 25, 0, 25), (33, 3, 14, 190, 80, 0, 23), (34, 4, 13, 200, 40, 0, 21), (35, 5, 11, 270, 30, 0, 21), (36, 6, 13, 220, 15, 0, 23), (37, 7, 11, 170, 17, 0, 24), (38, 8, 14, 200, 16, 0, 25), (39, 9, 12, 160, 165, 0, 24), (40, 10, 13, 240, 20, 0, 22); Продавцы кестесі: insert into Продавцы values (41, 'Краснов', 'Алексей', 'Петрович', 22235), (42, 'Вдовин', 'Андрей', 'Константинович', 22371), (43, 'Михайлова', 'Ольга', 'Ивановна', 22364), (44, 'Демидова', 'Анна', 'Викторовна', 22216), (45, 'Семенов', 'Игорь', 'Алексеевич', 22353); Продажа_товара кестесі: insert into Продажа_товара values (51, 1, 177, 210, 0, 44), (52, 2, 265, 30, 0, 45), (53, 3, 146, 100, 0, 43), (54, 4, 180, 60, 0, 45), (55, 5, 119, 40, 0, 41), (56, 6, 110, 25, 0, 43), (57, 7, 170, 30, 0, 42), (58, 8, 190, 27, 0, 43), (59, 9, 150, 180, 0, 44), (60, 10, 120, 30, 0, 41); 1-тапсырма. 7 қарапайым сұраныстар: 1. Әліпби (алфавит) тәртібі бойынша, Товарлар тізімін құру қажет. select * from Товар order by Экземпляр ASC 2. 4 және 8 Кодтары арасындағы товарлардың аттарының тізімін құрыңыз. select * from Товар where Код_товара between 4 and 8 3. 2 кестені біріктіру. select Товар.Экземпляр, Продажа_товара.Количество_прод_товара, Продажа_товара.Цена_прод_товара, Продажа_товара.Доход from Товар, Продажа_товара where Товар.Код_товара = Продажа_товара.Код_товара 4. Қанша чек ұрылды? select count (*) as 'Количество выбитых чеков' from Продажа_товара; 5. Коды 21 мен 24 аралығындағы менеджерлерді шығару. select * from Менеджери_поставок where Код_менеджера_поставщика > 21 and Код_менеджера_поставщика < 24 6. Минимум келген товарлар саны. select min (Количество_поставки) as 'Минимальное количество поставленного товара' from Поставка_товара 7. Фамилиясы «А» әрпінен басталатын Клиенттер тізімі. select Экземпляр from Товар where Экземпляр like 'С%'; 2-тапсырма. 2 күрделі сұраныстар: 1. 3 кестені қосып нәтижесін шығару. select Продажа_товара.Код_чека, Товар.Экземпляр, Продажа_товара.Количество_прод_товара, Продавцы.Фамилия, Продавцы.Имя, Продавцы.Телефон from Продажа_товара inner join Товар on Продажа_товара.Код_товара = Товар.Код_товара inner join Продавцы on Продажа_товара.Код_продавца = Продавцы.Код_продавца 2. select Поставка_товара.Код_поставки, Товар.Экземпляр, Поставщики.Фирма, Поставка_товара.Количество_поставки, Поставка_товара.Цена_поставки, Поставка_товара.Сумма_поставки, Менеджери_поставок.Фамилия, Менеджери_поставок.Имя from Поставка_товара inner join Поставщики on Поставка_товара.Код_постовщика = Поставщики.Код_постовщика inner join Товар on Поставка_товара.Код_товара = Товар.Код_товара inner join Менеджери_поставок on Менеджери_поставок.Код_менеджера_поставщика = Поставка_товара.Код_менеджера_поставщика 3-тапсырма. 2 функция: 1) Тауар коды бойынша тауардың бағасын табу. create function Cena(@Код_товара as int) returns float as begin RETURN (SELECT Цена_прод_товара from Продажа_товара where Код_товара=@Код_товара); End Іске асырылуы select dbo.cena (10) арқылы көрсетіледі. 2) Тауарды белгілі бір суммаға сатып алғанда барлық сумма қаншаға өсетінін көрсетеді. create function сумма(@сумма_поставки int, @amount int) RETURNS int as BEGIN SELECT @сумма_поставки = @сумма_поставки + @amount RETURN @сумма_поставки; END Іске асырылуы select dbo.сумма (1000, 1000) арқылы көрсетіледі. 4-тапсырма. 2 көрініс: 1) Сатылған товардың чек кодын, атауын, санын және сол товарды сатқан сатушының аты-жөні мен номерін шығару. select Продажа_товара.Код_чека, Товар.Экземпляр, Продажа_товара.Количество_прод_товара, Продавцы.Фамилия, Продавцы.Имя, Продавцы.Телефон from Продажа_товара inner join Товар on Продажа_товара.Код_товара = Товар.Код_товара inner join Продавцы on Продажа_товара.Код_продавца = Продавцы.Код_продавца 2) Шағын маркетке келген товар жайлы ақпарат, яғни товар аты, қай фирмадан, қанша дана, қанша суммаға және товарды әкелген менеджерлер. create view Поставка as select Поставка_товара.Код_поставки, Товар.Экземпляр, Поставщики.Фирма, Поставка_товара.Количество_поставки, Поставка_товара.Цена_поставки, Поставка_товара.Сумма_поставки, Менеджери_поставок.Фамилия, Менеджери_поставок.Имя from Поставка_товара inner join Поставщики on Поставка_товара.Код_постовщика = Поставщики.Код_постовщика inner join Товар on Поставка_товара.Код_товара = Товар.Код_товара inner join Менеджери_поставок on Менеджери_поставок.Код_менеджера_поставщика = Поставка_товара.Код_менеджера_поставщика 5-тапсырма. 4 процедура: 1) Түскен пайда жайлы ақпаратты енгізбей, процедура арқылы сатылған тауралардан түскен пайданы есептеу. create proc Доход1 as update Продажа_товара set Доход = Количество_прод_товара * Цена_прод_товара 2) Бұл процедура шағын маркетке әкелінген тауарлардың санын көбейтеді create proc Изменение1 (@kod int) as update Поставка_товара set Сумма_поставки = Сумма_поставки * 10, Количество_поставки = Количество_поставки * 10 where Код_поставки = @kod 3) Бұл процедура белгілі бір тауардың саны мен бағасын көбейту арқылы суммасын шығарады create proc Сумма as update Поставка set Сумма_поставки = Количество_поставки * Цена_поставки 4) Жұмысшылардың аты-жөні бойынша базада бар ма тексеру GO CREATE PROCEDURE FIO @first_name varchar(50), @last_name varchar(50) as begin select имя, Фамилия from Продавцы where Фамилия = @first_name and Имя = @last_name end; 6-тапсырма. 1 триггер: 1) Өрістің он бірінші кодына сәйкес келетін "Поставка_товара" кестесіндегі жазбаны жоятын триггер жасаңыз. create trigger Удаление on Товар for delete as if @@rowcount = 1 begin declare @x int select @x = Товар.код_товара from Товар delete Поставка_товара.Код_товара where Товар.Код_товара = Поставка_товара.Код_товара if exists (select * from Поставка_товара where Код_товара = @x) delete from Поставка_товара where Код_товара = 11 end end 2) Тауар бағасын өзгерткенде алдынғы және жаңа бағасын салыстырып, баға өсті немесе азайғаны жайлы ақпарат шығарып береді create trigger Цена on Продажа_товара for UPDATE as BEGIN CASE WHEN :NEW.Цена_прод_товара > :OLD.Цена_прод_товара THEN DBMS_OUTPUT.PUT_LINE('Цена проданного товара выросла'); WHEN :NEW.Цена_прод_товара < :OLD.Цена_прод_товара THEN DBMS_OUTPUT.PUT_LINE('Цена проданного товара снижена'); WHEN :NEW.Цена_прод_товара = :OLD.Цена_прод_товара THEN DBMS_OUTPUT.PUT_LINE('Цена проданного товара не изменилась'); END CASE; END; Қорытынды Мен бұл курстық жұмыста функционалды дерекқор жасадым. Дерекқорда 5 кесте жасап, бір-бірімен негізге санауыш – id арқылы, Primary – Foreign key қатынастары арқылы байланыстырдым. Соның салдарынан, бірінші ең негізгі кестеге мәлімет енгізуге рұқсат болады. Сондай тәртіппен 2 нормализация ережесін қадағалап, диаграммаға шығардым. Содан соң, клиенттің құпиясөзін хэштеуді орындап, оған ақпарат енгізген кезде сол хэштеу орындалуын, сонымен бірге триггердің орындалуын қадағаладым. Орташа бағалауды тексеретін триггер кітаптың орташа бағалауының тікелей өзгертілуін болдырмайтын функцияны атқарады. Процедураларды жасағанда, әр кестеге мәлімет енгізетін процедураларды жасадым. Ол процедуралар сұранысқа байланысты басқа кестедегі өзгерістерді қатар өңдейді. Клиент енгізу процедурасы құпиясөзді хэштайды және триггердің орындалуымен бірге жүреді. Кітап енгізу процедурасы жанрын оның аты бойынша таңдап, сәйкес жанрдың кітап мөлшерін инкременттейді. Дәл солай, баға енгізу процедурасы сәйкес кітаптың орташа бағалауын өңдесе, кітап сатып алу процедурасы кітаптың экземплярлар жазбаларын өңдейді. Функциялар қандай-да бір сұранысты орындауға ыңғайлы етіп, процедураларды қолданылды. Орташа бағалауын табу, экземпляр санын өңдеу, кітаптар санын инкременттеу функциялары сәйкес процедураларда қолданылады. Көріністер әр кестенің басқа кестелерге байланысты жазбалар мәнін алып, толық ақпаратты шығаратын кестені көрсетеді. Мысалы, Бағалау кестесінің 2 бағаны – басқа кестелерінің id мәніне сілтеме болса, солардың орнына нақты кітап атын, клиент атын, т.б. шығарады. Соңында Питон тіліндегі терезелік қосымша жасап, интерфейс арқылы дерекқордан ақпарат оқуды ұйымдастырдым. Пайдаланылған әдебиеттер: 5В070400 - Есептеу техникасы және бағдарламалық қамтамасыз ету және 5В070300 – Ақпараттық жүйелер мамандықтары бойынша зертханалық жұмыстарды орындауға арналған әдістемелік нұсқаулар - Алматы 2013 https://ru.wikipedia.org/wiki/%D0%9D%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%84%D0%BE%D1%80%D0%BC%D0%B0 https://stackoverflow.com/questions/61743834/listbox-displaying-tables-from-database-in-tkinter |