Тақырып 9

Реляциондық деректер қоры

Спецификация бойынша не тексеріледі:

Деректер қоры және ДҚБЖДеректер модельдері: иерархиялық, желілік, реляциялықКесте: өрістер мен жазбаларӨрістердің деректер типтеріБастапқы және сыртқы кілттер, индекстерКестелер арасындағы байланыстар және қалыпқа келтіруІздеу, сұрыптау және сүзгілеу

Бір минутта мәні

Деректер қоры (ДҚ) — белгілі бір пәндік сала туралы деректердің ұйымдастырылған қоймасы: мектеп оқушылары, кітапхана кітаптары, банк клиенттері. Онымен деректер қорын басқару жүйесі (ДҚБЖ) арқылы жұмыс істейді — 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;

Шешімі бар есеп мысалдары

Есеп 1students кестесінің неше жазбасы grade = 10 AND score > 100 шартын қанағаттандырады?
  1. 10-сынып оқушылары: Дана (112), Аружан (135), Тимур (66), Санжар (91).
  2. Олардың ішінде 100-ден көбі: Дана және Аружан.
Жауабы 2 жазба
Есеп 2grade = 11 OR city = 'Алматы' шарты неше жазбаны іріктейді?
  1. 11-сынып: Айгерим, Нурлан, Ерлан, Мадина — 4.
  2. Алматыдан: Нурлан, Аружан, Санжар — 3.
  3. Нурлан екі тізімге де кірді, оны бір рет санаймыз: 4 + 3 − 1.
Жауабы 6 жазба
Есеп 3students кестесі grade өрісі бойынша өсу ретімен, ал grade тең болғанда score бойынша кему ретімен сұрыпталды. Кімнің жазбасы үшінші болады?
  1. Алдымен барлық 10-сынып оқушылары, содан кейін 11-сынып оқушылары.
  2. 10-сынып балы кему ретімен: Аружан 135, Дана 112, Санжар 91, Тимур 66.
  3. Үшінші жазба — Санжар.
Жауабы Санжар
Есеп 4students(id, name, grade, city, score) кестесінің қай өрісін бастапқы кілт етіп алуға болады?
  1. Кілт бірегей және бос емес болуы керек.
  2. name қайталануы мүмкін (екі Айгерим), grade пен city біздің деректерде қазірдің өзінде қайталанады, score да сәйкес келуі мүмкін.
  3. id әр оқушы үшін бірегей етіп беріледі.
Жауабы id
Есеп 5students және courses кестелерінің арасында қандай байланыс түрі бар және ол оқу ДҚ-сында қалай жүзеге асырылған?
  1. Бір оқушы бірнеше курсқа, бір курсқа бірнеше оқушы жазыла алады: «көптің көпке» байланысы.
  2. Оны enroll(student_id, course_id, mark) байланыстырушы кестесі жүзеге асырады.
  3. students → enroll: 1:К (student_id бойынша); courses → enroll: 1:К (course_id бойынша).
Жауабы enroll кестесі арқылы К:К
Есеп 6city = 'Астана' OR city = 'Шымкент' AND score < 110 шарты (жақшасыз) неше жазбаны іріктейді?
  1. AND амалы OR-дан бұрын орындалады: шарт city = 'Астана' OR (city = 'Шымкент' AND score < 110) болып оқылады.
  2. Астанадан барлығы: Айгерим, Ерлан, Тимур — 3.
  3. Шымкенттен балы 110-нан аз: Мадина (103); Дана (112) өтпейді. Барлығы 3 + 1.
Жауабы 4 жазба

Күрделі есептер: қадам-қадаммен

Есеп 1students және enroll кестелерін пайдаланып, Астанадағы неше оқушы кемінде бір «5» алғанын анықтаңыз.

Идея: Алдымен бірінші кесте бойынша қажетті оқушылардың id-лерін табамыз, содан кейін сыртқы кілт арқылы олардың екінші кестедегі жазбаларын іздейміз.

  1. Астанадағы оқушылар
    students: id 1 (Айгерим), 4 (Ерлан), 6 (Тимур).
  2. Олардың enroll-дағы бағалары
    student_id = 1: 5 және 5 бағалары. student_id = 4: 3 және 4. student_id = 6: 3.
  3. Іріктеу
    «5» тек id = 1 оқушыда бар.
  4. Сол іріктеу SQL-да
    SELECT DISTINCT students.name FROM students
    JOIN enroll ON students.id = enroll.student_id
    WHERE students.city = 'Астана' AND enroll.mark = 5;
Жауабы 1 оқушы (Айгерим)
Есеп 2A: (city = 'Астана' OR city = 'Шымкент') AND score < 110 және B: city = 'Астана' OR city = 'Шымкент' AND score < 110 шарттарын салыстырыңыз. Әрқайсысы неше жазбаны іріктейді және нәтижелер неге әртүрлі?

Идея: AND-тың басымдығы OR-дан жоғары; жақшалар есептеу ретін өзгертеді.

  1. A шарты
    Алдымен қала: Астана немесе Шымкент — Айгерим 128, Ерлан 84, Тимур 66, Дана 112, Мадина 103.
    Содан кейін score < 110: Ерлан, Тимур, Мадина — 3 жазба.
  2. B шарты
    city = 'Астана' OR (city = 'Шымкент' AND score < 110) болып оқылады: Астанадан барлығы (3) және Мадина — 4 жазба.
  3. Қорытынды
    Айырмашылық — Айгерим: A-да оны балл шарты кесіп тастайды, B-де ол OR-дың бірінші бөлігі бойынша өтеді.
Жауабы A — 3 жазба, B — 4 жазба

ҰБТ-дағы жиі қателіктер

  • Өріс пен жазбаны шатастырады: өріс — баған (қасиет), жазба — жол (объект). «Неше өріс» = бағандар саны.
  • Бастапқы кілт етіп тегін, қаланы немесе балды таңдайды. Кілт бірегей және бос емес болуға міндетті — әдетте бұл id, құжат нөмірі немесе ЖСН.
  • AND амалы OR-дан бұрын орындалатынын ұмытады. Жақшасыз A OR B AND C өрнегі A OR (B AND C) дегенді білдіреді.
  • Сұрыптау немесе сүзгі жазбаларды жояды деп ойлайды. Сұрыптау тек ретті өзгертеді, сүзгі жазбаларды уақытша жасырады; тек DELETE жояды.
  • «Көптің көпке» кестелерін тікелей байланыстыруға тырысады. К:К үшін екі сыртқы кілті бар үшінші байланыстырушы кесте қажет.

Есте сақта

Кесте = өрістер (бағандар) × жазбалар (жолдар); бастапқы кілт бірегей әрі бос емес; сыртқы кілт басқа кестенің кілтіне сілтейді; К:К — байланыстырушы кесте арқылы; NOT → AND → OR.

Өзіңді тексер

1. Реляциялық деректер қоры кестесінің жолы қалай аталады?
  1. өріс
  2. жазба
  3. кілт
  4. индекс
Жауабын көрсету

жазба Жол — жазба (бір объект), баған — өріс (бір қасиет).

2. Оқушылар кестесінде бастапқы кілт рөліне қай өріс ең жақсы сәйкес келеді?
  1. Тегі
  2. Қаласы
  3. ЖСН
  4. Сыныбы
Жауабын көрсету

ЖСН ЖСН әр адамда бірегей және әрқашан толтырылған; тегі, қаласы және сыныбы қайталанады.

3. «Диск → бумалар → файлдар» файлдық жүйесі деректердің қай моделінің мысалы?
  1. реляциялық
  2. желілік
  3. иерархиялық
  4. кестелік
Жауабын көрсету

иерархиялық Әр бума мен файлдың дәл бір аталық каталогы бар — бұл ағаш, яғни иерархиялық модель.

4. score > 100 AND city <> 'Алматы' шарты students кестесінің неше жазбасын іріктейді?
  1. 2
  2. 3
  3. 4
  4. 5
Жауабын көрсету

3 score > 100: Айгерим, Дана, Аружан, Мадина. Аружан Алматыдан — алып тастаймыз. 3 қалады.

5. Реляциялық деректер қорында «көптің көпке» байланысы қалай жүзеге асырылады?
  1. Екі кестедегі бір ортақ өріспен
  2. Үшінші байланыстырушы кесте арқылы
  3. Екі кестені біреуге біріктіру арқылы
  4. Бастапқы кілт бойынша индекспен
Жауабын көрсету

Үшінші байланыстырушы кесте арқылы Байланыстырушы кесте (enroll сияқты) екі сыртқы кілтті қамтиды және К:К-ны екі 1:К байланысына бөледі.

6. «Телефон нөмірі» өрісі үшін қай деректер типін таңдаған дұрыс?
  1. Сандық
  2. Мәтіндік
  3. Логикалық
  4. Ақшалай
Жауабын көрсету

Мәтіндік Нөмірмен есептеулер жүргізілмейді, онда «+», жақшалар және алдыңғы нөлдер болуы мүмкін — бұл мәтін.

Байланысты тақырыптар

Деңгейіңді біл: ҰБТ-ға тегін диагностика