Лекция · 5.5

Көпкестелік дерекқор құру

100 музыкалық аспапты бір кестеге жазсаң, әр аспаптың өндірушісінің мекенжайын ҚАЙТА-ҚАЙТА теруің керек болар еді. Ал өндіруші мекенжайы өзгерсе ше — жүздеген жазбаны түзетесің бе? Дәл осы мәселе деректерді бірнеше кестеге БӨЛУ идеясын тудырды. Бүгін көпкестелік дерекқордың неге қажет екенін және оны қалай құруды үйренеміз.

Бір кестенің кемшілігі

Барлық деректі бір кестеге жинау қарапайым болғанымен, ҮЛКЕН кемшіліктері бар:

КемшілікМысал
ҚайталануӨндіруші аты әр аспап жазбасында қайта-қайта жазылады
Өзгерту қиындығыБір атауды өзгерту үшін БІРНЕШЕ жазбаны түзету керек
Қате көбеюҚайталанатын деректің бір жерінде қате кетсе, сәйкессіздік туады
Нормализациялау — кестеге бөлу
Есеп (қиын): қайталануды жою

Берілді: musical_instruments бір кестелі дерекқорында аспап атауы, өндіруші, бағасы бірге сақталған, өндіруші аты бірнеше рет қайталанады.

Шешуі: өндірушілер туралы ақпаратты БӨЛЕК кестеге шығарамыз:

producers: id_producers, name, address
1 | Turdyguov Zh.  | Almaty q., Abai kosh., 56
2 | Abramkin V.    | Shymkent q., Shakarim kosh., 21

Ал негізгі кестеде өндіруші атының орнына ТЕК оның кодын сақтаймыз:

instruments: id_instr, name_instr, id_producers, price
1 | Dombyra | 1 | 200000
2 | Qobyz   | 2 | 150000

Жауабы: id_producers — екі кестені байланыстыратын СЫРТҚЫ КІЛТ қызметін атқарады, қайталану ЖОЙЫЛАДЫ.

Терең нормализациялау үшін атау/түр/материал секілді ҚАЙТАЛАНАТЫН мәтіндік мәндерді де бөлек индекстік кестелерге бөлуге болады — негізгі кестеде тек кодтар сақталады. Бұл деректер қорының көлемін АЗАЙТАДЫ және қайталануды толығымен жояды.

Есеп (орта): индекстік кесте құру
CREATE DATABASE kaz_mus_instruments;

CREATE TABLE name_instr (
    id_name_ins INT AUTO_INCREMENT PRIMARY KEY,
    name_instr VARCHAR(20)
);

INSERT INTO name_instr VALUES (NULL, 'dombyra');
INSERT INTO name_instr VALUES (NULL, 'qobyz');

Түсіндірме: AUTO_INCREMENT өрісіне NULL берілсе, MySQL келесі бос нөмірді АВТОМАТТЫ түрде тағайындайды.

Деректер қорының тұтастығы
Анықтама
Деректер қорының тұтастығы — кестелер арасындағы байланыстың ДҰРЫСТЫҒЫН қамтамасыз ету (мыс. instruments кестесінде ЖОҚ id_producers кодын қолданбау).

Байланысқан кестелермен жұмыс істегенде ДҚБЖ бірнеше әрекетті қолдай алады: байланысты жазбалар бар кезде негізгі жазбаны ЖОЮҒА ТЫЙЫМ салу; каскадтық жою (негізгі жазбамен бірге оған байланысты барлық жазбаларды да жою); байланысты өрісті өзгертуге рұқсат беру/бермеу.

Кестелер арасындағы байланыс түрлері
ТүріСипаттамасы
«Біреуден-көпке»Бір өндірушінің БІРНЕШЕ аспабы болуы — ЕҢ КӨП тараған түрі
«Біреуден-біреуге»Негізгі кестенің бір жазбасына бағынышты кестенің ТЕК бір жазбасы сәйкес
«Көптен-көпке»Екі жақта да бірнеше жазба сәйкес келеді
⚠️
Маңызды ережe: реляциялық ДҚ-да «көптен-көпке» байланысы ТІКЕЛЕЙ қолданылмайды — оны АРАЛЫҚ кесте енгізу арқылы екі «біреуден-көпке» байланысына айналдыру керек.
🎯 ҰБТ байланысы
Нормализациялау мақсаты мен байланыс түрлерін ажырата білу маңызды.
1
Нормализациялаудың мақсаты — деректің ҚАЙТАЛАНУЫН жою.
2
«Біреуден-көпке» — ЕҢ КӨП тараған байланыс түрі.
3
«Көптен-көпке» тікелей жасалмайды — аралық кесте керек.
Сабақ қорытындысы
  • Бір кестеге барлық деректі жинау — қайталану, өзгерту қиындығы мен қате қаупін тудырады.
  • Нормализациялау — қайталанатын деректі бөлек кестеге шығарып, сыртқы кілт арқылы байланыстыру.
  • Деректер тұтастығы — кестелер арасындағы байланыстың дұрыстығын қамтамасыз ету.
  • Байланыс түрлері: біреуден-көпке (ең көп таралған), біреуден-біреуге, көптен-көпке (аралық кесте керек).