Реляциондық деректер қоры
Спецификация бойынша не тексеріледі:
Бір минутта мәні
Деректер қоры (ДҚ) — белгілі бір пәндік сала туралы деректердің ұйымдастырылған қоймасы: мектеп оқушылары, кітапхана кітаптары, банк клиенттері. Онымен деректер қорын басқару жүйесі (ДҚБЖ) арқылы жұмыс істейді — Access, MySQL, PostgreSQL, SQLite. Деректердің байланысу тәсілі бойынша иерархиялық (ағаш), желілік (граф) және реляциялық (кестелер) модельдер ажыратылады; ҰБТ-да әңгіме көбінесе реляциялық модель туралы болады. Реляциялық ДҚ кестелерден тұрады: бағандар — өрістер, жолдар — жазбалар; әр кестенің бастапқы кілті бар, ал кестелер арасындағы байланыстар (1:1, 1:К, К:К) сыртқы кілттер арқылы беріледі. Тақырып бойынша ҰБТ-ның негізгі тапсырмалары: кесте элементтерін атау, бастапқы кілт пен деректер типін таңдау, байланыс түрін анықтау және AND, OR, NOT шарттары бар сұрыптау мен сүзгіден кейін неше жазба қалатынын санау.Қарапайым тілмен
Реляциялық деректер қоры — мектеп журналы сияқты: әр баған — өріс, оқушы жазылған әр жол — жазба, ал тізім бойынша оқушы нөмірі — оны аттасынан ажырататын кілт.
Кесте — негіз
Барлық деректер кестелерде жатады. «Қала» бағаны — өріс, «Айгерим, 11, Астана, 128» жолы — жазба.
Кілт — жазбаның төлқұжаты
Бастапқы кілт (мысалы, id) әр жазбада бірегей. Бір мектепте екі Айгерим болса да, олардың id-лері әртүрлі болса, мәселе жоқ.
Байланыстар — кестелер арасындағы сілтемелер
Әр бағада оқушының атын жазбас үшін бағалар кестесінде тек оның id-ін сақтайды. Бұл сыртқы кілт — басқа кестедегі жазбаға «сілтеме».
Сүзгі — елек
қала = Астана ЖӘНЕ балл > 100 шарты тек екі шарт та ақиқат болатын жазбаларды өткізеді; НЕМЕСЕ болса, біреуі жеткілікті.
Ұғымдар мен терминдер
- Деректер қоры
- компьютердің сыртқы жадында сақталатын, белгілі бір пәндік саладағы объектілер туралы құрылымдалған деректердің ұйымдастырылған жиынтығы.
- ДҚБЖ
- деректер қорын басқару жүйесі — деректер қорын құру, ақпаратты жаңарту және толықтыру мүмкіндігін беретін, ақпаратқа икемді қолжеткізуді қамтамасыз ететін программалық жабдықтама (Access, MySQL, PostgreSQL, SQLite).
- Реляциялық деректер қоры
- нақты қатынастармен байланысты реттелген деректер жиынтығы ретінде ұйымдастырылған кестелерден тұратын деректер қоры (ағылш. relation — қатынас).
- Иерархиялық деректер қоры
- иерархия (ағаш) қағидасы бойынша құрылған деректер қоры: бір объект негізгі, қалғандары бағыныңқы; әр элементтің дәл бір «ата-анасы» болады.
- Желілік деректер қоры
- әр элемент кез келген сандағы басқа элементтермен байланыса алатын деректер қоры; жазбаның бірнеше «ата-анасы» болуы мүмкін.
- Өріс
- объектінің белгілі бір қасиетін (атрибутын) сипаттайтын кесте бағаны; өрістің аты және деректер типі болады.
- Жазба
- деректер қоры өрістеріндегі бір объект қасиеттерінің мәндерін қамтитын кесте қатары.
- Бастапқы кілт
- мәні жазбаны бірмәнді анықтайтын өріс (немесе өрістер жиыны): ол бірегей және бос бола алмайды.
- Сыртқы кілт
- мәндері басқа кестенің бастапқы кілтінің мәндерімен сәйкес келетін кесте өрісі; кестелер ол арқылы байланыстырылады.
- Индекс
- жазбаларды іздеу мен сұрыптауды жылдамдататын өріс бойынша реттелген қызметтік құрылым (кітаптың соңындағы әліпбилік көрсеткіш сияқты).
Тақырыпты талдау
Деректер қоры және ДҚБЖ 9–10 сынып
Деректер қоры — жай ғана деректері бар файл емес, құрылымдалған қойма: барлық жазбалар бірдей құрылған, оларды тез іздеуге, сұрыптауға, шарттар бойынша іріктеуге болады. Мысалдар: Kundelik электрондық журналы, ҰБТ нәтижелерінің базасы, eGov, интернет-дүкен каталогы, банк клиенттерінің базасы.
ДҚБЖ — ДҚ-ны құратын, сақтайтын, деректердің тұтастығын қадағалайтын және пайдаланушылардың сұраныстарын орындайтын программа. Үстел ДҚБЖ-лары: MS Access, LibreOffice Base. Серверлік: MySQL, PostgreSQL, Oracle, MS SQL Server. Кіріктірілетін: SQLite (телефондар мен браузерлерде). Реляциялық ДҚБЖ-лардың басым көпшілігінің сұраныс тілі — SQL.
ДҚБЖ-ның негізгі объектілері (Access мысалында): кестелер (деректерді сақтайды), сұраныстар (деректерді іріктейді және өңдейді), формалар (деректерді ыңғайлы енгізу және қарау), есептер (басып шығаруға ресімделген шығару). Қарапайым бір кестелі ДҚ-ны электрондық кестеде де жүргізуге болады: жолдар — жазбалар, бағандар — өрістер, бірінші жол — өріс аттары (9.2.2.2 мақсаты).
Деректер модельдері: иерархиялық, желілік, реляциялық 10 сынып
Иерархиялық модель — ағаш: бір түбірлік элемент, әр элементтің дәл бір «ата-анасы» және кез келген сандағы «ұрпақтары» бар. Мысалдар: файлдық жүйе (диск → бумалар → файлдар), мектеп құрылымы (мектеп → сыныптар → оқушылар), жануарлардың жіктелуі. Кемшілігі: бір мезгілде екі «ата-анаға» бағынатын объектіні сипаттау қиын.
Желілік модель — граф: әр элемент кез келген сандағы басқа элементтермен байланыса алады. Мысал: оқушылар мен үйірмелер арасындағы байланыс (оқушы бірнеше үйірмеге барады, үйірмеде көп оқушы бар), сілтемелері бар сайттар. Икемді, бірақ өңдеу күрделі.
Реляциялық модель (Э. Кодд, 1970) — деректер екі өлшемді кесте-қатынастарда сақталады, байланыстар өрістердің ортақ мәндері (кілттер) арқылы беріледі. Бұл ең кең таралған модель. Реляциялық емес (NoSQL) қорлар да бар: құжаттық, «кілт–мән», графтық — оларды үлкен деректер (Big Data) үшін қолданады.
Кесте: өрістер мен жазбалар 9–10 сынып
Өріс — баған, объектінің бір қасиетін сипаттайды (аты, сыныбы, қаласы, балы). Жазба — жол, бір объектіні толығымен сипаттайды. Қиылысында — мән (ұяшық). Біздің оқу кестеміз students-те 5 өріс (id, name, grade, city, score) және 8 жазба бар.
Реляциялық кестенің қасиеттері: кестеде өріс аттары қайталанбайды; бір өрістің барлық мәндері бір типті; ұяшықта бір (атомарлы) мән; бірдей екі жазба жоқ; жазбалар мен өрістердің реті маңызды емес — оны шығарғанда сұрыптау арқылы береді.
Кесте өлшемін «жазбалар саны × өрістер саны» деп береді: кестеде 30 жол және 6 баған болса, онда 30 жазба және 6 өріс, барлығы 180 мән. Оқушыны қосу — жаңа жазба; «телефон» қасиетін қосу — жаңа өріс.
Өрістердің деректер типтері 10 сынып
Әр өріс үшін деректер типі беріледі — ол қандай мәндерді сақтауға болатынын және олармен қандай амалдар орындалатынын анықтайды. SQL-да (10.3.2.1 мақсаты): INTEGER / INT — бүтін сан; REAL, FLOAT, DECIMAL — бөлшек сан (ақша — DECIMAL); TEXT, VARCHAR(n) — n таңбаға дейінгі жол, CHAR(n) — дәл n таңбалы жол; DATE, TIME, DATETIME — күн мен уақыт; BOOLEAN — логикалық (ақиқат/жалған); BLOB — екілік деректер (суреттер).
Access-те типтер былай аталады: Қысқа мәтін (255 таңбаға дейін), Ұзын мәтін (MEMO), Сандық, Ақшалай, Күн/уақыт, Логикалық (Иә/Жоқ), Санағыш (автоматты түрде өсетін сан — кілт үшін ыңғайлы), OLE объектісінің өрісі, Тіркеме, Гиперсілтеме.
Типті қалай таңдау керек: өріспен есептесе — сан; телефон нөмірі, ЖСН, пошта индексі — мәтін (есептемейміз, нөлден басталуы және «+» таңбасы болуы мүмкін); туған күні — күн; «тапсырды/тапсырмады» — логикалық; тегі — мәтін.
Бастапқы және сыртқы кілттер, индекстер 10 сынып
Бастапқы кілт (PRIMARY KEY) — мәндері бірегей және бос емес, сондықтан жазбаны бірмәнді анықтайтын өріс (10.3.1.3 мақсаты). Жақсы кілттер: id-санағыш, ЖСН, студенттік билет нөмірі, төлқұжат нөмірі. Жаман кілттер: тегі, қаласы, сыныбы, балы — олар қайталануы мүмкін.
Құрама кілт — тек бірге алғанда бірегей болатын бірнеше өріс жиыны. enroll(student_id, course_id, mark) кестесінде student_id да, course_id да жеке алғанда бірегей емес, бірақ (student_id, course_id) жұбы бірегей — бір оқушы курсқа бір рет жазылады.
Сыртқы кілт (FOREIGN KEY) — басқа кестенің бастапқы кілтіне сілтейтін өріс: enroll.student_id → students.id, enroll.course_id → courses.id. ДҚБЖ деректердің тұтастығын қадағалайды: жоқ оқушыға баға қоюға болмайды.
Индекс — өріс бойынша қосымша реттелген құрылым (10.3.1.2 мақсаты). Ол осы өріс бойынша іздеу мен сұрыптауды жылдамдатады, бірақ орын алады және енгізуді баяулатады. Бастапқы кілт бойынша индекс автоматты түрде жасалады.
Кестелер арасындағы байланыстар және қалыпқа келтіру 10 сынып
Бірдің бірге (1:1): бірінші кестенің бір жазбасына екіншісінің ең көбі бір жазбасы сәйкес келеді. Мысал: азамат — төлқұжат, оқушы — жеке іс.
Бірдің көпке (1:К) — ең жиі кездесетін байланыс: сынып — оқушылар, мұғалім — курстар, ел — қалалар. Сыртқы кілт «көп» жағына қойылады: оқушылар кестесінде сынып нөмірі сақталады.
Көптің көпке (К:К): оқушы көп курсқа барады, курста көп оқушы бар. Реляциялық ДҚ-да К:К тікелей сақталмайды — үшінші байланыстырушы кесте жасалады (бізде enroll), және байланыс екі 1:К байланысына бөлінеді: students 1:К enroll және courses 1:К enroll.
Қалыпқа келтіру (нормализация) — деректерді артықшылық (қайталану) және өзгерткенде ауытқулар болмайтындай етіп кестелерге бөлу. 1ҚФ: әр ұяшықта бір мән, қайталанатын топтар жоқ. 2ҚФ: әр кілттік емес өріс бүкіл кілтке тәуелді. 3ҚФ: кілттік емес өрістер бір-біріне тәуелді емес. Нашар құрылымның белгісі: бір нәрсе (мысалы, мұғалімнің тегі) ондаған жолда жазылған, мұғалім ауысқанда бәрін түзетуге тура келеді.
Іздеу, сұрыптау және сүзгілеу 9–10 сынып
Сұрыптау — жазбаларды бір немесе бірнеше өріс бойынша реттеу: өсу ретімен (А→Я, 0→9, ерте күндер бірінші) немесе кему ретімен. Екі өріс бойынша сұрыптағанда екінші өріс жазбаларды тек бірінші өрістің мәні бірдей топтар ішінде реттейді. Сұрыптау жазбалар санын өзгертпейді.
Сүзгілеу (іріктеу) — тек шартты қанағаттандыратын жазбаларды көрсету; қалғандары жасырылады, бірақ жойылмайды. Электрондық кестеде бұл — автосүзгі, ДҚБЖ-да — сүзгі немесе сұраныс (9.2.2.3 мақсаты).
Шарттар =, <> (тең емес), >, <, >=, <= салыстыру амалдарынан және логикалық амалдардан құрылады: AND (ЖӘНЕ — екі шарт та орындалуы керек, іріктеу тарылады), OR (НЕМЕСЕ — біреуі жеткілікті, іріктеу кеңейеді), NOT (ЕМЕС — терістеу). Басымдық: алдымен NOT, сосын AND, сосын OR; жақшалар ретті өзгертеді.
students кестесіндегі мысал: grade = 11 AND score > 100 → 2 жазба (Айгерим, Мадина); city = 'Алматы' OR score >= 120 → 4 жазба; NOT city = 'Астана' → 5 жазба. Жолдар әліпби бойынша таңбалап салыстырылады: 'Дана' < 'Ерлан'.
SELECT name, score FROM students
WHERE grade = 11 AND score > 100
ORDER BY score DESC;Шешімі бар есеп мысалдары
grade = 10 AND score > 100 шартын қанағаттандырады?- 10-сынып оқушылары: Дана (112), Аружан (135), Тимур (66), Санжар (91).
- Олардың ішінде 100-ден көбі: Дана және Аружан.
grade = 11 OR city = 'Алматы' шарты неше жазбаны іріктейді?- 11-сынып: Айгерим, Нурлан, Ерлан, Мадина — 4.
- Алматыдан: Нурлан, Аружан, Санжар — 3.
- Нурлан екі тізімге де кірді, оны бір рет санаймыз: 4 + 3 − 1.
- Алдымен барлық 10-сынып оқушылары, содан кейін 11-сынып оқушылары.
- 10-сынып балы кему ретімен: Аружан 135, Дана 112, Санжар 91, Тимур 66.
- Үшінші жазба — Санжар.
- Кілт бірегей және бос емес болуы керек.
- name қайталануы мүмкін (екі Айгерим), grade пен city біздің деректерде қазірдің өзінде қайталанады, score да сәйкес келуі мүмкін.
- id әр оқушы үшін бірегей етіп беріледі.
- Бір оқушы бірнеше курсқа, бір курсқа бірнеше оқушы жазыла алады: «көптің көпке» байланысы.
- Оны enroll(student_id, course_id, mark) байланыстырушы кестесі жүзеге асырады.
- students → enroll: 1:К (student_id бойынша); courses → enroll: 1:К (course_id бойынша).
city = 'Астана' OR city = 'Шымкент' AND score < 110 шарты (жақшасыз) неше жазбаны іріктейді?- AND амалы OR-дан бұрын орындалады: шарт
city = 'Астана' OR (city = 'Шымкент' AND score < 110)болып оқылады. - Астанадан барлығы: Айгерим, Ерлан, Тимур — 3.
- Шымкенттен балы 110-нан аз: Мадина (103); Дана (112) өтпейді. Барлығы 3 + 1.
Күрделі есептер: қадам-қадаммен
Идея: Алдымен бірінші кесте бойынша қажетті оқушылардың id-лерін табамыз, содан кейін сыртқы кілт арқылы олардың екінші кестедегі жазбаларын іздейміз.
- Астанадағы оқушыларstudents: id 1 (Айгерим), 4 (Ерлан), 6 (Тимур).
- Олардың enroll-дағы бағаларыstudent_id = 1: 5 және 5 бағалары. student_id = 4: 3 және 4. student_id = 6: 3.
- Іріктеу«5» тек id = 1 оқушыда бар.
- Сол іріктеу SQL-да
SELECT DISTINCT students.name FROM students JOIN enroll ON students.id = enroll.student_id WHERE students.city = 'Астана' AND enroll.mark = 5;
(city = 'Астана' OR city = 'Шымкент') AND score < 110 және B: city = 'Астана' OR city = 'Шымкент' AND score < 110 шарттарын салыстырыңыз. Әрқайсысы неше жазбаны іріктейді және нәтижелер неге әртүрлі?Идея: AND-тың басымдығы OR-дан жоғары; жақшалар есептеу ретін өзгертеді.
- A шартыАлдымен қала: Астана немесе Шымкент — Айгерим 128, Ерлан 84, Тимур 66, Дана 112, Мадина 103.Содан кейін score < 110: Ерлан, Тимур, Мадина — 3 жазба.
- B шарты
city = 'Астана' OR (city = 'Шымкент' AND score < 110)болып оқылады: Астанадан барлығы (3) және Мадина — 4 жазба. - ҚорытындыАйырмашылық — Айгерим: A-да оны балл шарты кесіп тастайды, B-де ол OR-дың бірінші бөлігі бойынша өтеді.
ҰБТ-дағы жиі қателіктер
- Өріс пен жазбаны шатастырады: өріс — баған (қасиет), жазба — жол (объект). «Неше өріс» = бағандар саны.
- Бастапқы кілт етіп тегін, қаланы немесе балды таңдайды. Кілт бірегей және бос емес болуға міндетті — әдетте бұл id, құжат нөмірі немесе ЖСН.
- AND амалы OR-дан бұрын орындалатынын ұмытады. Жақшасыз
A OR B AND CөрнегіA OR (B AND C)дегенді білдіреді. - Сұрыптау немесе сүзгі жазбаларды жояды деп ойлайды. Сұрыптау тек ретті өзгертеді, сүзгі жазбаларды уақытша жасырады; тек DELETE жояды.
- «Көптің көпке» кестелерін тікелей байланыстыруға тырысады. К:К үшін екі сыртқы кілті бар үшінші байланыстырушы кесте қажет.
Есте сақта
Кесте = өрістер (бағандар) × жазбалар (жолдар); бастапқы кілт бірегей әрі бос емес; сыртқы кілт басқа кестенің кілтіне сілтейді; К:К — байланыстырушы кесте арқылы; NOT → AND → OR.
Өзіңді тексер
- өріс
- жазба
- кілт
- индекс
Жауабын көрсету
жазба Жол — жазба (бір объект), баған — өріс (бір қасиет).
- Тегі
- Қаласы
- ЖСН
- Сыныбы
Жауабын көрсету
ЖСН ЖСН әр адамда бірегей және әрқашан толтырылған; тегі, қаласы және сыныбы қайталанады.
- реляциялық
- желілік
- иерархиялық
- кестелік
Жауабын көрсету
иерархиялық Әр бума мен файлдың дәл бір аталық каталогы бар — бұл ағаш, яғни иерархиялық модель.
score > 100 AND city <> 'Алматы' шарты students кестесінің неше жазбасын іріктейді?- 2
- 3
- 4
- 5
Жауабын көрсету
3 score > 100: Айгерим, Дана, Аружан, Мадина. Аружан Алматыдан — алып тастаймыз. 3 қалады.
- Екі кестедегі бір ортақ өріспен
- Үшінші байланыстырушы кесте арқылы
- Екі кестені біреуге біріктіру арқылы
- Бастапқы кілт бойынша индекспен
Жауабын көрсету
Үшінші байланыстырушы кесте арқылы Байланыстырушы кесте (enroll сияқты) екі сыртқы кілтті қамтиды және К:К-ны екі 1:К байланысына бөледі.
- Сандық
- Мәтіндік
- Логикалық
- Ақшалай
Жауабын көрсету
Мәтіндік Нөмірмен есептеулер жүргізілмейді, онда «+», жақшалар және алдыңғы нөлдер болуы мүмкін — бұл мәтін.