Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СРС.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
662.02 Кб
Скачать

Қалыпты формалар

Қалыпты формалар (ҚФ) әдісін қолданып ДҚ-н жобалау итерациялық процесс болып табылады және қатынасты белгілі бір ережелер бойынша 1-ші қалыпты формадан одан гөрі жоғары қалыпты формаға біртіндеп өткізу болып табылады. Әр қалыпты формада ФТ табылады.

Жалпы 5 қалыпты форма бар:1ҚФ , 2ҚФ, 3ҚФ – күшейтілген Бойс-Кодд формасы, 4ҚФ, 5ҚФ.

Бірінші қалыпты форма (1ҚФ). Қатынас 1ҚФ-да дейді, егер оның атрибуттары қарапайым болса, яғни жалғыз мән қабылдайды. Бастапқы берілгендер қатынасы 1ҚФ-да болатындай құрылуы керек. Оқытушылар қатынасында ФИО, Топ, Пән – құрмалас кілт бар, олар жалғыз мән қабылдайтын болғандықтан 1ҚФ-да. Стаж – Стаж-қ – Каф – Қызметі – Жалақы атрибуттары ФИО – кілттік өрістен бөлшекті ФТ екендігі көрінеді. Бұл ФТ келесіні көрсетеді:

  1. Қатынаста айқын және айқын емес шамадан тыс қайталанулар бар

  2. Шамадан тыс қайталану салдарынан жөндеу кезінде проблемалар туындайды.

Сондықтан, бұл проблемалардан құтылу үшін 2ҚФ-ға өткізген дұрыс.

Екінші қалыпты форма (2ҚФ). Қатынас 2ҚФ-да дейді, егер ол 1ҚФ-да болып, оның әрбір кілттік емес атрибуты кілттік атрибуттардан толық ФТ болса. 1ҚФ-дан 2ҚФ-ға өткізу «жоғалтусыз декомпозициялау» әдісімен орындалады. Оны проекциялау әдісі дейді. Мысалы R(A,B,C,D,E,…) қатынасы бар болсын. Шамадан тыс қайталануы бар C – D ФТ-тен құтылу үшін оны екі қатынасқа декомпозициялаймыз: R1(A,B,C,E,…) және R2(C,D). Сонда R2 қатынасы C,D атрибуттарына R қатынасының «жоғалтусыз проекциясы» болады.

2-3 кестелерде Оқытушылар қатынасының 2 қатынасқа декомпозициялануы көрсетілген. Мұндағы R1, R2 қатынастарында оқытушылардың аты-жөнінің (ФИО) қайталануын тоқтатты. Бірақ R2 қатынасында айқын емес шамадан тыс қайталану әлі бар, енді одан құтылу үшін 3ҚФ-ға өткізу керек.

Үшінші қалыпты форма (3ҚФ). Қатынас 3ҚФ-да болады, егер ол 2ҚФ-да тұрып, оның әрбір кілттік емес атрибуты кілттік атрибуттардан транзитивті емес ФТ болса.

Кесте 2- R1 қатынасы

Аты-жөні

Пән

топ

Сабақ түрі

Иванова Д.А.

Логика

256

практика

Иванова Д.А.

Моделир

123

практ

Петрова И.С.

СУДҚ

256

Практ

Петрова И.С.

Проект

256

Лекция

Сидорова Т.П.

Логика

123

Лекция

Сидорова Т.П.

Проектир

256

Практика

Егоров А.Т.

Дельфи

244

лекция

Кесте 3- R2 қатынасы

Аты-жөні

қызметі

жалақы

стаж

Стаж-қ

каф

Иванова Д.А.

оқытушы

500

5

100

25

Петрова И.С.

Аға оқытушы

800

7

100

25

Сидорова Т.П.

оқытушы

500

10

150

25

Егоров А.Т.

оқытушы

500

5

100

24

R1 қатынасында транзитивті тәуелділік жоқ болса, R2 қатынасында транзитивті тәуелділік бар:

ФИО – Қызметі – Жалақы

ФИО – Жалақы – Қызметі

ФИО – Стаж – Стаж-қ

Транзитивті ФТ шамадан тыс қайталануды туындатады. Одан құтылу үшін R2 қатынасын бірнеше қатынастарға бөлшектейміз: R3, R4, R5 қатынастары 4-6 кестелерде көрсетілген.

Кесте 4 - R3 қатынасы

Аты-жөні

қызметі

стаж

каф

Иванова Д.А.

оқытушы

5

25

Петрова И.С.

Аға оқытушы

7

25

Сидорова Т.П.

оқытушы

10

25

Егоров А.Т.

оқытушы

5

24

Кесте 5 - R4 қатынасы

қызметі

жалақы

оқытушы

500

Аға оқытушы

800

Кесте 6 - R5 қатынасы

стаж

Стаж-қ

5

100

7

100

10

150

Олардың әрқайсысы 3ҚФ-да. R3 қатынасында Қызметі атрибутының орнына Жалақы атрибутын қойып жаңа қатынас құруға болады. Оларда шамадан тыс қайталану жоқ болса, осы этаптан кейін ДҚ-ң жобалануы аяқталуы керек. Егер қатынаста тағы да шамадан тыс қайталанулар бар болса, онда күшейтілген Бойс Кодд 3ҚФ-ға (БКҚФ) өткізу керек.

Қатынас БКҚФ-да болады, егер ол 3ҚФ-да тұрып, барлық кілттік атрибуттар мен кілттік емес атрибуттар арасында тәуелділік болмаса. Біздің мысалымызда ондай тәуелділік жоқ, шамалы қайталанудан басқа қайталану жоқ, сондықтан ол қатынасты әрі қарай БКҚФ-на өткізудің қажеті жоқ.

Төртінші қалыпты форма.

Бұл форманы жаңа мысалмен қарастырайық. Мысалы: Жобалар(Жоба- №, Қызметкер коды, Қызметкер тапсырмасы) қатынасы бар болсын. Барлық атрибуттар кілттік болсын. Қатынаста жобалардың нөмірлері бар, әр жоба үшін сол жобаны орындаушы-қызметкер және оның орындауға алған тапсырмасы келтірілген. Қызметкер әртүрлі жобада жұмыс істеуі мүмкін, ал әртүрлі жоба бірдей тапсырмадан тұруы мүмкін. Әлдебір жобаға қатысатын әрбір қызметкер осы жобадағы барлық тапсырмаларды орындауы керек болсын. Осы жағдайды ескерсек, бұл қатынас БКҚФ-да екендігі анықталады: Жоба№, Қызметкер коды, Тапсырмалар атрибуттары құрмалас және алғашқы кілттік атрибут болады.

Жобалар қатынасындағы бастапқы берілгендер ақпараты келесідей кесте құрсын:

Жоба-№

Қызметкерлер коды

Қызметкер тапсырмасы

001

05

1

001

05

2

001

05

3

004

02

1

004

02

2

004

03

1

004

03

2

004

05

1

004

05

2

007

06

1

Жобалар қатынасындағы кемшілік: жобадан бір адам шығарылса, немесе жаңадан қосылса, оның қанша тапсырмасы бар болса сонша рет өшіріп немесе енгізіп отыру керек.

Қатынаста келесі көпмәнділікті тәуелділік бар:

  • Жоба нөмірі – Қызметкер коды

  • Жоба нөмірі – Қызметкер тапсырмасы

Кез келген қатынаста R(A,B,C) бірмезгілде A – B, A – C көпмәнді тәуелділік болуы мүмкін. Оны A–B|C деп белгілейді. Жобалар қатынасындағы келесі тәуелділіктерді анықтау Фейджин теоремасының көмегімен анықталады.

R қатынасы 4ҚФ-да тұрады, тек қана сол жағдайда, егер А – В көпмәнді тәуелділік бар болып, қалған барлық атрибуттары А атрибутынан ФТ болса.

Жобалар қатынасын Жоба-Қызметкерлер және Жоба-Тапсырмалар деген екі қатынасқа бөлуге болады. Структурасы келесідей:

Жоба-Қызметкерлер (жоба нөмірі, қызметкер коды). Кілт - жоба нөмірі, қызметкер коды болады.

Жоба-Тапсырмалар (жоба нөмірі, қызметкер тапсырмалары). Кілт - жоба нөмірі, қызметкер тапсырмалары.

Жоба – Тапсырмалар қатынасы.

Жоба нөмірі

Қызметкер тапсырмасы

001

1

001

2

001

3

004

1

004

2

007

1

Жобалар – Қызметкерлер қатынасы

Жоба нөмірі

Қызметкерлер коды

001

05

004

02

004

03

004

05

007

06

Бұл екі қатынастар 4ҚФ-да, Қызметкерлер кодының қайталануы тоқталды. Екі қатынасты біріктірсек, қайтадан бастапқы Жобалар қатынасын аламыз.

Жалпы жағдайда барлық қатынастарды бастапқы жағдайға келтіре алмауымыз мүмкін. Қарастырып отырған мысалда қандай да бір жобамен жұмыс істейтін әрбір қызметкер осы жобаның барлық тапсырмаларын орындаушы болды. Қызметкерлер бірнеше жобада жұмыс істей алды, әртүрлі жобалардың бірдей тапсырмалары болды.

Бесінші қалыпты форма.

Кей жағдайда алдыңғы формадағы қатынастарды біріктіру нәтиже бермей қалуы мүмкін. Ондай кезде бастапқы қатынасты 2-ден жоғары қатынастарға декомпозициялайды.

Қызметкерлер (Қ) – Бөлімдер (Б) – Жобалар (Ж) (қызметкерлер коды, бөлімдер коды, жоба нөмірі) қатынасын қарастырайық.

Қызметкер коды

Бөлім коды

Жоба нөмірі

01

РД

036

02

АД

004

03

УП

004

04

АД

019

05

ЛС

001

05

ЛС

004

06

УП

007

08

ВЦ

013

09

ВЦ

014

10

СЖ

013

Кілт – барлық атрибуттардан тұратын құрмалас болсын. Мұнда бір қызметкер бірнеше бөлімде жұмыс істейтін және әрбір бөлімде бірнеше жобаға араласа алсын. Бір бөлімде бірнеше қызметкер жұмыс істейді, бірақ бір жобаны тек қана бір қызметкер жасайтын болсын. ФТ және көпмәнді тәуелділік жоқ және 4ҚФ-да болсын. Қызметкер бірнеше бөлімде жұмыс істейтін болғандықтан, оны жұмыстан шығару кезінде ол туралы деректерді басқа кортеждерден де тауып өшіру керек болады.

Біріктіру тәуелділігі туралы анықтама енгізейік.

R(X,Y,…, Z) қатынасы *(X,Y,…, Z) деп белгіленетін біріктіру тәуелділігін қанағаттандырады, егер бұл қатынас өзінің X,Y,…, Z проекцияларын біріктірген кезде қайта калпына келсе.

R қатынасы 5ҚФда тұрады, тек қана сол жағдайда, егер R қатынасына біріктірудің кез - келген тәуелділігі R-де әлдебір мүмкін кілттің бар болғанынан шықса.

Құрмалас атрибуттарды құрамыз:

ҚБ(қызметкер коды, бөлім коды)

Қызметкер коды

Бөлім коды

01

РД

02

АД

03

УП

04

АД

05

ЛС

05

ЛС

06

УП

08

ВЦ

09

ВЦ

10

СЖ

ҚЖ(қызметкер коды, жоба нөмірі)

Қызметкер коды

Жоба нөмірі

01

036

02

004

03

004

04

019

05

001

05

004

06

007

08

013

09

014

10

013

БЖ(бөлім коды, жоба нөмірі)

Бөлім коды

Жоба нөмірі

АД

019

АД

004

ЛС

001

ЛС

004

УП

004

УП

007

ВЦ

013

ВЦ

014

РД

036

СЖ

013

Бұл қатынастарды біріктірсек, бастапқы қатынас алынуы керек. Үш қатынасты біріктіру үшін, алдымен оларды екі- екіден біріктіріп, қиылысу амалын орындап, олардың проекцияларын аламыз.

*(ҚБ, ҚЖ)

Қызметкер коды

Бөлім коды

Жоба нөмірі

01

АД

036

02

АД

004

03

ЛС

004

04

ЛС

019

05

УП

001

05

УП

004

06

ВЦ

007

08

ВЦ

013

09

РД

014

10

СЖ

013

*(ҚБ, БЖ)

Қызметкер коды

Бөлім коды

Жоба нөмірі

01

РД

036

02

АД

004

02

АД

019

03

УП

004

03

УП

007

04

АД

004

04

АД

019

05

ЛС

001

05

ЛС

004

06

УП

004

06

УП

007

08

ВЦ

013

08

ВЦ

014

09

ВЦ

013

09

ВЦ

014

10

СЖ

013

*(ҚЖ, БЖ)

Қызметкер коды

Бөлім коды

Жоба нөмірі

01

РД

036

02

АД

004

02

ЛС

004

02

УП

004

03

АД

004

03

ЛС

004

03

УП

004

04

АД

019

05

ЛС

001

05

АД

004

05

ЛС

004

05

УП

004

06

УП

004

06

УП

007

08

ВЦ

013

08

ВЦ

014

09

ВЦ

013

09

ВЦ

014

10

СЖ

013

Қалыпты формаға келтіру атрибуттар арасындағы келесі талаптардың орындалуын қадағалайды :

1ҚФ-да:

  1. қайталанатын жазулар болмайды

  2. қайталанатын атрибуттар тобы болмайды

  3. қатынас жолдары реттелмеген болады

  4. қатынас бағандары реттелмеген болады

2ҚФ-да:

  1. 1ҚФ-ң талаптарын қанағаттандырады

  2. кез келген индекстік (кілттік) емес атрибут барлық кілттік атрибуттар жиынынан бірмәнді, бөлікті тәуелсіз болады

3ҚФ-да:

  1. 2ҚФ-ң талаптары орындалады

  2. индекстік емес атрибуттардың бірде біреуі индекстік атрибуттардан транзитивті тәуелсіз болады

БКҚФ-да:

  1. Кілттік атрибуттар кілттік емес атрибуттардан тәуелсіз болады

Студенттердің №2 өзіндік жұмысы (СӨЖ№2). ДҚБЖ ортасында құрастырылған жобаны іске қосу

Мақсаты: Деректер қорын құру және SQL құрылымды тілін қолдауымен сұраныстарды құру

Теориялық бөлім

    1. SQL тіліне кіріспе: деректер қоры құрылымын құру және жұмыс істеу.

Деректер қорының құрылуы және таңдау. create database деректер_қоры_аты; операторы арқылы іске асырылады.

Оператор тапсырманы show databases; көмегімен орындағанына көз жеткізіңіз

Енді кесте құру керек болған бос ДҚ бар. ДҚ жұмысты бастамас бұрын ДҚ таңдап алу керек. Оператор көмегімен таңдалады

use деректер_қоры_аты;

Енді барлық іс-әрекеттер осы ДҚ қабылданады.

Кесте құру. оператор CREATE TABLE қолданылады. Ол келесідей көрінеді:

create table кесте_атауы (кесте сипаттауы);

Тырнақшадағы кесте атынан кейін баған аты, оның типі және басқа да ақпараттар жарияланады.бағанды анықтауда келесідей сипаттамаларды келтіруге болады.

  • Кез келген бағанға NOT NULL немесе NULL жариялау (бағанға NULL мәні шектелген және шектелмеген). Үнсіз келісім бойынша – NULL.

  • Бағанға үнсіз келісім бойынша DEFAULT кілт сөзін қолданып мән беруге болады.

  • Қатардағы номерлерді іріктеу үшін AUTO_INCREMENT кілт сөзін қолдануға болады. Автоматты іріктеу кесте мәніне қарағанда бірлікке үлкен болады. Бірінші қатардың номері 1 болады. Кестеде бір бағаннан AUTO_INCREMENT артық болуына болады және ол индекстелуі керек.

  • PRIMARY KEY арқылы бағанды кестенің алғашқы кілті деп жариялау.

  • REFERENCES сілтеме жасай отырып, FOREIGN KEY арқылы бағанды сыртқы кілт деп жариялау.

  • Бағандарды INDEX немесе KEY (синонимдер) арқылы бағандарды индекстеу.Мұндай бағандар біркелкі мән қаблдауға міндетті емес.

  • Біркелкі мәндерді сақтауға арналған бағанды UNIQUE сөзі арқылы индекстеу.

  • FULLTEXT сөзі арқылы TEXT, CHAR немесе VARCHAR типтерімен баған негізінде толықмәтінді индекс құру(MyISAM тек кестелерге).

MySQL бағанға қатысты келесідей мәліметтер типін сақтайды:

  • сандық;

  • қатарлық;

  • күнтізбелік;

  • NULL – ақпарат жоқтығын қамтамасыз ететін арнайы тип.

Бүтін санды типтерге кіреді:

  • INT

  • INTEGER

  • SMALLINT

Нақты санды типтерге кіреді

  • NUMERIC

  • DECIMAL

Жуық санды типке мыналар кіреді:

  • FLOAT –қарапайым дәлдікпен құбылмалы үтірлі сандарды көрсетеді;

  • DOUBLE – екі еселенген дәлдікпен құбылмалы үтірлі сандарды көрсетеді;

Құбылмалы нүктесі бар сандық типтердің unsigned параметрі болуы мүмкін. Атрибут бағанда теріс шамалардың сақталуына жол бермейді, шаманың максималды интервалы сол қалпында қалады.

Жуық санды мәліметтер қарапайым формада (мысалы, 45.67)және құбылмалы үтірлі(мысалы, 5.456Е-02 немесе 4.674Е+04) формада берілуі мүмкін.

Мәтіндік типтер және жолдар:

  • CHAR – бекітілген ұзындығы бар жолдарды сақтау;

  • VARCHAR – ауыспалы ұзындықты жолдарды сақтау;

  • TEXT, BLOB және олардың нұсқалары – үлкен фрагментті мәтіндерді сақтау;

  • ENUM және SET – берілген тізімнің мәндерін сақтау.

Мәліметтердің күнтізбелік типі (кесте 4):

  • Date – күнді сақтау үшін (формат YYYY-MM-DD күн үшін 2009-10-15 және формат YY-MM-DD күн түрі 09-10-15);

  • Time – тәулік уақытын сақтау үшін (формат hh:mm:ss, мұндағы hh – сағат, mm – минут, ss – секундтар, мысалы, 10:48:56);

  • Datetime– күн және тәулік уақыттарын көрсету үшін;

  • Timestamp – қатар бағанын да уақыт көрсетілмесе немесе NULL мәні болса, соңғы рет өзгертілген уақыт көрсетіледі (форматы DATETIME);

  • Year – тек жылды сақтайды.

ДҚ қайта атау. ДҚ арнайы қайта атау операт оы жоқ, бірақ жүйелі каталог негізінде ауыстыруға болады(…\DATA).

ДҚ жою. ДҚ толығымен жою мына командамен орындалады:

drop database [IF EXISTS] деректер_қоры_аты;

Кестелер және индекстерді жою. Кестені мына оператор көмегімен жоюға болады:

drop table [IF EXISTS] кесте_аты;

Индексті мына оператор көмегімен өшіруге болады:

drop index индекс_аты on кесте_аты;

Кесте құрылымын өзгерту. Дайын кестенің құрылмын өзгерту үшін ALTER TABLE операторын қолдануға болады. Мысалы, users кестесі үшін name индексін құру келесідегідей:

alter table users add index name (u_name);

ALTER TABLE операторы барынша ыңғайлы болғандықтан көптеген қосымша кілт сөздері бар.

ДҚ құрғаннан кейін оны деректермен толтыру қажет болады. Реляциялық ДҚ-да дәстүрлі 3 жүріс бар:

  • Бірқатарлы оператор insert – кестеге жаңа жазба қосады;

  • Көпқатарлы оператор insert – кестеге бірнеше жазбалар қосады;

  • Пакетті жүктеме LOAD DATA INFILE – файлдан мәліметтерді қосу.

INSERT Операторы көмегімен деректерді енгізу. Бірқатарлы оператор insert бірнеше формада қолданылады. Бірінші формада қысқартылған синтаксис:

insert [IGNORE] [INTO] кесте_аты [(бағана_аты, ... )]

VALUES (өрнек, ... );

Оператор жаңа жазбаны кестеге кесте атына қояды. Жазба өрістерінің мәні (выражение, ... ) тізімінде келтіріледі. Бағандар қатары (имя_столбца, ... ).тізімінде болады.

Кестенің алғашқы кілті бірегей болады. Тағы да бар мәнді келтіру қате болады. Жаңа жазбалар дубликатталмауы үшін insert оператордан кейін IGNORE кілт сөзін қою керек.

insert операторының басқа формасы set сөзін қолдану ұсынылады.

insert [IGNORE] [INTO] кесте_аты

SET бағана1_аты = өрнек1, бағана2_аты = өрнек2, ... ;

Оператор кестеге кесте_аты жаңа жазба жазылады.

Көпқатарлы оператор INSERT бірқатарлы оператор формасына сәйкес келеді, бірақ кілт сөзінен values кейін бірнеше (өрнек, ... ) тізімдер қосылады.

Мәліметтерді жою. Жазбаларды жою үшін келесілер қарастырылған:

  • оператор DELETE;

  • оператор TRUNCATE TABLE.

Оператор DELETE келесідей синтаксисі бар:

DELETE FROM кесте_аты

[Where шарт]

[ORDER BY өріс_ат]

[LIMIT жол_саны];

Егер операторда where шарты болмаса барлық кесте жазбалары өшіп кетеді.

Деректерді жаңарту. Жаңартуды қамтамасыз етеді:

  • оператор Update;

  • оператор Replace.

UPDATE Операторы бар жазбадағы жеке өрістерді қалпына келтіреді. Келесідей синтаксисі бар.

Update [IGNORE] кесте_аты

SET бағана1_аты= өрнек1 [, бағана2_аты = өрнек2 … ]

[WHERE шарт]

[ORDER BY өріс_аты ]

[LIMIT жол_саны] ;

update кілт сөзінен кейін өзгеретін кесте көрсетіледі. set сөйлемінде қандай бағандар қалпына келіп жатыр және орнатылуы көрсетіледі. Міндетті емес WHERE шарты қатарларды іріктеуге мүмкіндік береді.

Егер міндетті емес ignore кілт сөзі көрсетілсе қалпына келтіру командасы тоқтатылмайды.