JavaRush /Java blogi /Random-UZ /Ishlab chiquvchi bilan suhbat: ma'lumotlar bazasi savolla...

Ishlab chiquvchi bilan suhbat: ma'lumotlar bazasi savollarini tahlil qilish

Guruhda nashr etilgan
Hammaga salom! Biz hammamiz bir maqsad sari ishlayapmiz - Java dasturchisi bo'lish . Ehtimol, professional bo'lish yo'lidagi eng muhim bosqich texnik suhbatdir. Qoidaga ko'ra, suhbatdosh bir-ikkita savol berib, asosiy mavzulardan o'tadi. Ushbu maqolada biz shunday asosiy mavzulardan biri haqida gaplashamiz - ma'lumotlar bazalari . Keling, eng ko'p beriladigan savollarni ko'rib chiqaylik va ularga materialga chuqur kirmasdan javob berishga harakat qilaylik, chunki bu holda kitobning hajmi biz uchun etarli bo'lmaydi! Shunday ekan, ketaylik.Ishlab chiquvchi suhbati: ma'lumotlar bazasi savollarini tahlil qilish - 1

1. Ma'lumotlar bazalari nima? Ular qanday turlarga bo'linadi?

DBMS deganda nimani anglatadi?

Ishlab chiquvchi suhbati: ma'lumotlar bazasi savollarini tahlil qilish - 2Ma'lumotlar bazasi (MB) o'zaro bog'liq bo'lgan, asosan katta hajmdagi ma'lumotlarni saqlash, o'zgartirish va qayta ishlash uchun mo'ljallangan tashkiliy tuzilmadir. Boshqacha qilib aytganda, ma'lumotlar bazasi - bu tuzilgan ma'lumotlarni saqlash. Masalan, telefon kitobi.

Ma'lumotlar bazasi turlari

  1. Relyatsion ma'lumotlar bazasi - ular o'rtasida oldindan belgilangan munosabatlarga ega bo'lgan ma'lumotlar to'plami. Ma'lumotlar ustunlar va satrlardan iborat jadvallar to'plami sifatida saqlanadi. Jadvallar ma'lumotlar bazasida taqdim etilgan ob'ektlar haqidagi ma'lumotlarni saqlaydi. Har bir jadval ustunida ma'lum bir ma'lumotlar turi saqlanadi va har bir hujayra atribut qiymatini saqlaydi.
  2. Aloqaviy bo'lmagan tizimlar (NoSQL) - moslashuvchan sxemalarga ega bo'lgan ma'lum ma'lumotlar modellari uchun mo'ljallangan tizimlar. Boshqacha qilib aytganda, bular ma'lumotlarni jadval sxemalari, satrlar va ustunlar ko'rinishida emas, balki boshqa formatlarda saqlaydigan ma'lumotlar bazalari.
Siz ushbu maqolada aloqador bo'lmagan ma'lumotlar bazalari haqida ko'proq o'qishingiz mumkin: Dasturchilar uchun NoSQL bo'yicha qo'llanma . Ma'lumotlar bazasini boshqarish tizimi (DBMS) - bu foydalanuvchi ma'lumotlar bazalarini (MB) yaratishi va ular ustida turli xil operatsiyalarni bajarishi mumkin bo'lgan dasturiy ta'minot to'plamidir: to'ldirish, yangilash, o'chirish, tanlash va hokazo. Ma'lumotlar bazasi ma'lumotlar bazasi ma'lumotlarning xavfsizligini, yaxlitligini, xavfsizligini kafolatlaydi. saqlash va ma'lumotlar bazasini boshqarishga ruxsat berishga imkon beradi. Misol tariqasida, MySql - bu relyatsion ma'lumotlar bazasiga yoki aloqasi bo'lmagani uchun MongoDB ga kirishni ta'minlaydigan ma'lumotlar bazasi.

2. Normallashtirish nima? Normallashtirilgan shakl? Normallashtirishning nechta shakllari mavjud? Birinchi uchtasini nomlang.

Normalizatsiya - bu ma'lumotlar bazasidagi ma'lumotlarni tashkil qilish va tizimlashtirish jarayoni bo'lib, u ortiqcha va qaramliklarning nomuvofiqligini bartaraf etish orqali ma'lumotlar bazasining ko'proq moslashuvchanligini ta'minlaydi. Oddiy shakl - jadvalning oddiyligi va tuzilishining to'g'riligi nuqtai nazaridan tavsiflovchi normalash kontekstida ko'rib chiqiladigan jadvalning xususiyati. Oddiy shakl jadvalni qondirishi kerak bo'lgan talablar to'plami sifatida aniqlanadi. Hammasi bo'lib oltita oddiy shakl mavjud, ammo amalda birinchi uchtasidan ko'pi foydalanilmaydi:
  1. Birinchi normal shakl:
    • Barcha atributlar oddiy (ya'ni atomik va bo'linmas);
    • Barcha ma'lumotlar skalyar (ya'ni ijobiy);
    • Ikki nusxadagi qatorlar yo'q (buning uchun har bir satr uchun asosiy kalit yaratiladi).
  2. Ikkinchi normal shakl:
    • Birinchi normal shaklning shartlari bajariladi;
    • Har bir kalit bo'lmagan atribut asosiy kalitga murojaat qiladi.
  3. Uchinchi normal shakl:
    • Ikkinchi normal guruhning shartlari bajariladi;
    • Kalit bo'lmagan maydonlar boshqa kalit bo'lmagan maydonlardan mustaqil: ular faqat asosiy kalit bilan bog'lanishi mumkin.

3. Denormalizatsiya

Denormalizatsiya - bu ma'lumotlar bazasini normallashtirish shakllarini ataylab qisqartirish yoki buzish, odatda ortiqcha ma'lumotlarni qo'shish orqali ma'lumotlar bazasidan o'qishni tezlashtirish uchun. Umuman olganda, bu normalizatsiyaga teskari jarayon. Bu normal shakllar nazariyasi har doim ham amalda qo'llanilmasligi sababli sodir bo'ladi. Masalan, atom bo'lmagan qadriyatlar har doim ham "yomon" emas: ba'zan hatto aksincha. Ba'zi hollarda so'rovlarni bajarishda, ayniqsa katta hajmdagi ma'lumotlarni qayta ishlashda qo'shimcha birikmalar kerak bo'ladi. Bu oxir-oqibatda ishlashni yaxshilashi mumkin. Tahlil uchun mo'ljallangan ma'lumotlar bazalari ko'pincha so'rovlar bajarilishini tezlashtirish uchun normalizatsiya qilinadi. Misol uchun, siz ko'pincha kalit bo'lmagan ustunlar bir-biriga bog'liq bo'lgan hisobotlar uchun ba'zi ma'lumotlarni tanlaysiz. Siz normallashtirishning uchinchi shaklini ataylab olib tashlaysiz va namuna olish qulayligi uchun hamma narsani bitta jadvalda birlashtirasiz - boshqa jadvallarga qo'shimcha so'rovlar qilishingiz shart emas.

4. Indekslar

Indeks - ma'lumotlarni qidirishni tezlashtiradigan ma'lum bir ustunga ega jadval yoki ko'rinish bilan bog'langan saralangan qiymatlar to'plami. Ya'ni, bu indeksning bir turi: telefon kitobidagi alifbo kabi, familiya bo'yicha qidirishda bizga yordam beradi. To'g'ri ishlatilsa, bu xususiyat katta ma'lumotlar bazalari bilan ishlashda ish faoliyatini sezilarli darajada yaxshilaydi. Yoki siz uni ancha tushirishingiz mumkin. Qidiruvni tezlashtirish uchun ushbu kalitlar muvozanatli daraxt tuzilishida saqlanadi, ular orqali qidiruv amalga oshiriladi. Qoidaga ko'ra, indekslar eng ko'p qidiriladigan maydonlarga kiritilishi kerak. Siz kamida 10 ming yozuvga ega bo'lganingizdan oldin indeks yaratish haqida o'ylashingiz kerak. Aks holda, siz sezilarli natijani ko'rmaysiz, chunki muddatidan oldin optimallashtirish EVIL . Va indeks tizimning ishlashiga qanday ta'sir qilishi mumkin, deb so'rayapsizmi? Yangi ma'lumotlar kiritilganda yoki eski ma'lumotlar o'chirilganda, muvozanatli daraxt tuzilishi qayta hisoblab chiqiladi. Aslida, qancha ko'p ma'lumotlar va indekslar bo'lsa, shuncha ko'p daraxtlarni hisoblash kerak. Vaziyatni tasavvur qiling: ushbu jadvalda sizda 20 000 ga yaqin yozuv va 7 ta indeks mavjud. Ya'ni, ma'lumotlarni kiritishda siz har birida 20 000 ta yozuvga ega 7 ta daraxtni qayta hisoblashingiz kerak. To'g'risini aytganda, ma'lumotlar tez-tez qo'shiladigan/o'chiriladigan jadvallar uchun indekslardan foydalanish umuman tavsiya etilmaydi. Va nihoyat, shuni ta'kidlashni istardimki, ko'pincha qiymat topiladigan ustunlar uchun indekslar nullunchalik samarali bo'lmaydi, shuning uchun ularni bunday ustunlarga qo'shishning hojati yo'q.

SQLda klasterli va klasterli bo'lmagan indekslar o'rtasidagi farq nima?

Klasterlangan:

  • Tanlangan maydon uchun jismoniy tartibni ta'minlaydi;
  • Agar jadval klasterlangan indeksga ega bo'lsa, u klasterlangan deyiladi;
  • Jadvalga bittadan ortiq indeks kerak emas;
  • MySQL-da klasterlangan indeks foydalanuvchi tomonidan aniq ko'rsatilmagan, chunki agar siz jadvalingizda ASOSIY KALITni belgilamasangiz, MySQL UNIQUEbarcha asosiy ustunlar joylashgan birinchi indeksni topadi NOT NULLva InnoDB uni klasterli indeks sifatida ishlatadi.

Klastersiz:

  • Har bir jadval uchun 999 tagacha klastersiz indekslar mavjud;
  • Jadvaldagi haqiqiy ma'lumotlarga ega qatorlarga ko'rsatgichni o'z ichiga oladi;
  • Jismoniy tartibni ta'minlamaydi;
  • Klasterli bo'lmagan indekslar uchun tartiblangan ma'lumotlarga ega alohida jadvallar mavjud, ya'ni indeks joylashgan bitta ustun uchun bitta jadval, shuning uchun berilgan maydonning bir qismi bo'lmagan ma'lumotlarni so'rashda so'rov birinchi navbatda amalga oshiriladi. ushbu jadvaldagi maydon va shundan keyingina asl jadvaldagi qatorga nisbatan qo'shimcha so'rov.
Klastersiz indeks yaratish:
CREATE INDEX index_name ON table_name(column_name)

6. Kompozit indeks nima?

Kompozit indeks - bir vaqtning o'zida bir nechta ustunlarga yuborish bilan tuzilgan. Boshqacha qilib aytganda, bu bir nechta ustunlardan tashkil topgan murakkab indeks. Bunday indekslar bitta so'rovda bir nechta ustunlar paydo bo'lganda qo'llaniladi. Kompozit indeks yaratish:
CREATE INDEX index_name ON table_name(first_column_name, second_column_name, third_column_name)
Odatda, bu indekslar bir nechta ustunlardagi ma'lumotlar mantiqiy bog'liq bo'lganda ishlatiladi.

7. Qoplovchi indeks nima? Noyob indeksmi?

Yopuvchi indeks - bu jadvalning o'ziga kirmasdan so'rovga javob berish uchun etarli bo'lgan indeks. Ushbu indeksdan foydalanib, siz butun ma'lumotlar qatorini olishingiz mumkin, lekin aslida bu shunchaki kerak emas. Siz to'g'ridan-to'g'ri manba jadvaliga o'tishingiz shart emas va faqat indeks yordamida javob berishingiz mumkinligi sababli, indekslarni qoplash biroz tezroq ishlatiladi. Shu bilan birga, ustunlar qancha ko'p bo'lsa, indeksning o'zi shunchalik noqulay va sekin bo'lishini unutmang. Shuning uchun siz buni suiiste'mol qilmasligingiz kerak. Yuqorida biz noyob bo'lishi mumkin bo'lgan klasterli va klasterli bo'lmagan indekslar haqida gapirdik . Bu shuni anglatadiki, indeks kaliti uchun ikkita maydon bir xil qiymatga ega emas. Aks holda, indeks yagona bo'lmaydi, chunki bir nechta qatorlar bir xil qiymatni o'z ichiga olishi mumkin. Noyob klasterli bo'lmagan indeks yaratish misoli:
CREATE UNIQUE INDEX index_name ON table_name(column_name)

8. Birlamchi kalit nima

Birlamchi kalit - bu ma'lumotlar bazasi jadvalidagi har bir qatorni aniqlaydigan jadvaldagi maydon. Jadvalda faqat bitta bunday maydon bo'lishi mumkin va barcha qiymatlar noyob bo'lishi kerak. Sizga hech narsa eslatmadimi? Ishlab chiquvchi suhbati: ma'lumotlar bazasi savollarini tahlil qilish - 3Axir, asosiy kalit yagona, klasterli indeksdan boshqa narsa emas. Qoida tariqasida, jadval yaratishda asosiy kalitlar yaratiladi:
CREATE TABLE table_name(
column_name int PRIMARY KEY,..)
Ushbu ustunga avtomatik ravishda cheklov qo'shiladi - NOT NULL. Siz allaqachon yaratilgan jadval uchun kalitni o'rnatishingiz mumkin:
ALTER TABLE table_name ADD PRIMARY KEY (column_name);
Agar asosiy kalit yuqorida tavsiflangan tarzda qo'shilsa, asosiy kalit ( column_name) sifatida ko'rsatilgan maydonlarning qiymatlari ularda null qiymatlar mavjud emasligiga ishonch hosil qilish uchun tekshiriladi (cheklov ham qo'shiladi - NOT NULL).

Chet el kaliti nima?

Chet el kaliti - bu jadvallar orasidagi munosabatni ta'minlash uchun yaratilgan xususiyat. Odatda, tashqi kalit pastki jadvaldagi ustunlarga o'rnatiladi va asosiy jadvaldagi ustunlardan biriga ishora qiladi. Jadval yaratishda ko'rsatilishi mumkin:
CREATE TABLE table_name{
column_name int,..
FOREIGN KEY(column_name) REFERENCES another_table_name(another_table_column_name) }
Shunday qilib, jadvalni yaratgandan so'ng:
ALTER TABLE table_name
ADD FOREIGN KEY(column_name) REFERENCES another_table_name(another_table_column_name));
Chet el kaliti tegishli maydonni boshqarishda uning harakatini o'rnatishingiz mumkin. Manipulyatsiyalar quyidagi turlarda bo'lishi ON DELETEmumkin ON UPDATE: Mumkin bo'lgan xatti-harakatlar variantlari:
  • CASCADE— bu xususiyat yordamida asosiy jadvalda tegishli satrlar oʻchirilgan yoki oʻzgartirilganda bogʻliq jadvaldagi satrlar avtomatik ravishda oʻchiriladi yoki oʻzgartiriladi;
  • SET NULL— bu xususiyat yordamida asosiy jadvaldan tegishli satr oʻchirilganda yoki yangilanganda NULLtashqi kalit ustunining qiymati oʻrnatiladi;
  • NO ACTION— agar qaram jadvalda oʻzaro bogʻliq qatorlar mavjud boʻlsa, asosiy jadvaldagi qatorlarni oʻchirish yoki oʻzgartirishga urinishlarni rad etadi;
  • RESTRICT- ga teng NO ACTION;
  • SET DEFAULT- ushbu xususiyat bilan, asosiy jadvaldan tegishli qator o'chirilganda yoki yangilanganda, tashqi kalit ustuni uchun standart qiymat (agar mavjud bo'lsa) o'rnatiladi.
Foydalanish misoli:
CREATE TABLE table_name{
column_name int,..
FOREIGN KEY(column_name) REFERENCES another_table_name(another_table_column_name) ON UPDATE CASCADE ON DELETE CASCADE }
ON DELETEAgar xatti-harakatlar va aniq belgilanmagan bo'lsa ON UPDATE, xatti-harakatlar o'rnatiladi RESTRICT.

10. Jadvallar orasidagi ulanish turlari (Join)

Jadvallar orasidagi aloqa umumiy ma'lumotlar (maydonlar) asosida ta'minlanadi. Bu operator yordamida sodir bo'ladi JOIN, ya'ni bir jadvaldagi satrlarni boshqasidagi qatorlarga moslashtiradigan operatsiya. Xaritalash ikkala jadvalning ustunlari bir-biriga ulashgan bo'lishi uchun amalga oshiriladi, garchi ularni alohida jadvallardan olish mumkin. Va agar bizda uchta jadval uchun umumiy maydonlar mavjud bo'lsa, biz ularning ma'lumotlarini bitta umumiy jadval sifatida ko'rsatishimiz mumkin. Ammo shuni hisobga olish kerakki, qancha jadvallar birlashtirilsa, so'rov shunchalik tez ishlaydi. Shunday qilib, turlari JOIN:
  • INNER JOIN- faqat birinchi jadvaldagi ikkinchi jadvaldagi ba'zi ma'lumotlarga mos keladigan ma'lumotlarni ko'rsatadigan ulanish. Qolganlari pastga tushadi.Ishlab chiquvchi suhbati: ma'lumotlar bazasi savollarini tahlil qilish - 4
  • LEFT JOIN- birinchi jadvaldagi barcha ma'lumotlarni va agar mavjud bo'lsa, ikkinchidan mos keladigan ma'lumotlarni ko'rsatadigan ulanish. Agar tegishli ma'lumotlar bo'lmasa, ikkinchi jadvaldagi ma'lumotlar uchun maydonlar bo'sh bo'ladi.Ishlab chiquvchi suhbati: ma'lumotlar bazasi savollarini tahlil qilish - 5
  • RIGHT JOIN- ikkinchi jadvaldagi barcha ma'lumotlarni va agar mavjud bo'lsa, birinchidan mos keladigan ma'lumotlarni ko'rsatadigan ulanish. Agar tegishli ma'lumotlar bo'lmasa, birinchi jadvaldagi ma'lumotlar uchun maydonlar bo'sh bo'ladi.Ishlab chiquvchi suhbati: ma'lumotlar bazasi savollarini tahlil qilish - 6
  • FULL JOIN- birinchi va ikkinchi jadvallardagi barcha ma'lumotlarni ko'rsatadigan ulanish. Agar boshqa jadvalda tegishli ma'lumotlar bo'lmasa, ushbu ma'lumotlar uchun maydonlar bo'sh bo'ladi.Ishlab chiquvchi suhbati: ma'lumotlar bazasi savollarini tahlil qilish - 7
  • CROSS JOIN- birinchi jadvalning har bir qatori ikkinchi jadvalning har bir qatoriga (har biriga) birlashtirilgan o'zaro faoliyat birikma. Ya'ni, agar ikkita jadvalning har biri 3 qatordan bo'lsa, bu qo'shilishdan so'ng biz 9 ta qatorga ega bo'lamiz.Ishlab chiquvchi suhbati: ma'lumotlar bazasi savollarini tahlil qilish - 8
Misol Join(inner):
SELECT *
FROM first_table
INNER JOIN second_table ON first_table.some_column = second_table.some_column

11. Ma'lumotlar bazasida ACID xossasi nima?

A - Atomicity , hech qanday tranzaksiya qisman tizimga berilmasligini ta'minlaydi. Yoki uning barcha suboperatsiyalari bajariladi yoki hech biri bajarilmaydi. Masalan, bankdan boshqa hisob raqamiga pul o'tkazish ikkita operatsiyani o'z ichiga oladi:
  1. Bank hisob raqamiga pul o'tkazish.
  2. Bank hisobvarag'idan ma'lum bir hisob raqamiga pul o'tkazish.
Lekin hamma narsa bo'lishi mumkin. Misol uchun, ular bankka boradilar, keyin esa qandaydir xatolik yuz beradi va ikkinchi operatsiya tugallanmaydi. Yoki aksincha: faqat ikkinchi operatsiya amalga oshiriladi. Shuning uchun bu harakatlar bitta tranzaksiya doirasida amalga oshiriladi va natijada hammasi yoki hech narsa bo'lmaydi. C - izchillik : Har bir muvaffaqiyatli tranzaksiya har doim faqat hal qilinadigan natijalarni qayd etadi. Bu barcha cheklovlar bajarilishini ta'minlaydi (masalan, NOT NULL), aks holda tranzaksiya orqaga qaytariladi. Va - izolyatsiya : tranzaktsiyani amalga oshirish jarayonida parallel operatsiyalar uning natijasiga ta'sir qilmasligi kerak. Bu bizga yakuniy bo'lmagan ma'lumotlar holatini hammadan yashirish imkoniyatini beradi. Aslida, shuning uchun muvaffaqiyatsiz bitimlar hech narsani buzmaydi. Biroz pastroqda biz tranzaksiyalarni izolyatsiya qilish darajalari bilan tanishamiz. D - Chidamlilik : Agar tranzaktsiya tugallangan bo'lsa, unda amalga oshirilgan o'zgarishlar ba'zi muvaffaqiyatsizliklar tufayli bekor qilinmasligiga amin bo'lishingiz mumkin.

12. Tranzaksiyalarni izolyatsiyalash darajalari

Har bir izolyatsiya darajasi muayyan harakatlarga (imkoniyatlarga) ruxsat beradi/taqiqlaydi:
  • fantom o'qish - bir xil tranzaksiya doirasida bir xil ma'lumotlar so'rovi boshqa (parallel) tranzaksiya tomonidan ma'lumotlar qo'shilishi tufayli yuzaga keladigan turli xil natijalarni beradi.
  • takrorlanmaydigan o'qish - bir xil tranzaksiya doirasida bir xil ma'lumotlar so'rovi boshqa (parallel) tranzaksiya tomonidan ma'lumotlarni o'zgartirish yoki o'chirish natijasida yuzaga keladigan turli xil natijalarni beradi.
  • "iflos" o'qish - tranzaksiya tomonidan qo'shilgan yoki o'zgartirilgan, keyinchalik qaytarib olinmaydigan ma'lumotlarni o'qish;
  • yo'qolgan yangilanish - turli tranzaktsiyalar bir vaqtning o'zida bir xil ma'lumotlar blokini o'zgartirganda, oxirgisidan tashqari barcha o'zgarishlar yo'qoladi (ko'p ish zarralaridagi "poyga holati"ga o'xshash).
Qulaylik uchun biz jadvalda izolyatsiya darajalari va ularning imkoniyatlarini ko'rib chiqamiz:
Izolyatsiya darajalari Fantom o'qish Takrorlanmaydigan o'qish "iflos" o'qish yo'qolgan yangilanish
SERIAL BO'LADI + + + +
KAYTARILABOR_OʻQISH - + + +
READ_COMMITTED - - + +
READ_UNCOMMITTED - - - +

13. SQL inyeksiyasi nima?

SQL in'ektsiyasiGET veb-saytni buzish usullaridan biri bo'lib, uning mohiyati ma'lumotlarga so'rovlar yoki cookie-fayllar orqali ba'zi SQL kodlarini kiritishdir POST. Agar veb-sayt bunday in'ektsiyalarni amalga oshirsa, ma'lumotlar bazasiga kirish va dasturni buzish mumkin. Masalan, biz ba'zi bir o'zgaruvchining nomini bilamiz. column_nameTuri bilan aytaylik boolean. Agar tizim in'ektsiyalarga moyil bo'lsa, biz OR column_name=truema'lumotlar bazasidan kerakli narsalarni qo'shishimiz va keyin yozishimiz mumkin. OROR shartini yaratadi va undan keyingi ifodamiz har doim bo'ladi true, bu bizni uzoqqa olib boradi. SQL so'rovlarida ishlatiladigan kiruvchi ma'lumotlarni noto'g'ri qayta ishlash tufayli SQL in'ektsiyasi kabi veb-saytga hujum qilish mumkin. JDBC yordamida ma'lumotlar bazasiga ulanishda siz turli xil Statements. PreparedStatementXavfsizlikni oshirish uchun odatdagi o'rniga foydalanish kerak Statement, chunki foydalanilganda Statementso'rov satrlari va qiymatlari oddiygina birga qo'shiladi, bu esa in'ektsiyalarni amalga oshirishga imkon beradi. O'z navbatida, PreparedStatementma'lum bir so'rov shabloni mavjud bo'lib, unga ma'lumotlar tirnoq belgilari aks ettirilgan holda kiritiladi. Natijada, SQL in'ektsiyalari faqat ma'lum bir maydonning string tasviri sifatida qabul qilinadi. SQL in'ektsiyalaridan himoya qilish uchun siz muntazam iboralarga asoslangan tekshiruvlardan foydalanishingiz mumkin (siz ushbu maqolada muntazam iboralar haqida ko'proq o'qishingiz mumkin ). Собеседование разработчика: разбор вопросов по базам данных - 9Yana bir variant - kiruvchi parametrlarning belgilar soniga cheklov o'rnatish: masalan, agar siz 9999 dan ko'p bo'lmagan raqamni olishingiz kerak bo'lsa, to'rtta kiruvchi belgilar chegarasi bajariladi. Bu SQL in'ektsiyalari yordamida xakerlik xavfini kamaytiradi.Siz Java'da xavfsizlik haqida ko'proq ma'lumotni "Java'da xavfsizlik: eng yaxshi amaliyotlar" maqolasidan olishingiz mumkin .

14. Saqlangan protseduralar nima? Saqlangan funksiyalar? Triggermi?

SQL-da saqlangan protseduralar ma'lumotlar bazasidagi ob'ekt bo'lib, u bir marta kompilyatsiya qilinadigan va serverda saqlanadigan SQL ko'rsatmalari to'plamidir. Bir so'z bilan aytganda, bu Java-dagi usullarning analogidir. Saqlangan protseduralar oddiy so'rovlar uchun ham, oddiy so'rovlar uchun mavjud bo'lmagan ba'zi harakatlar ham ma'lumotlar ustida amallarni bajarishi mumkin. Protsedura bir marta yaratiladigan va argumentlarni uzatish orqali chaqiriladigan SQL ob'ektidir. Ushbu yondashuvning afzalligi shundaki, bu ko'rsatmalarni bir necha marta ishlatish mumkin. Saqlangan protseduralar ishlashni yaxshilaydi, dasturlash imkoniyatlarini oshiradi va ma'lumotlar xavfsizligi xususiyatlarini qo'llab-quvvatlaydi. Keling, protsedura yaratishni ko'rib chiqaylik:
CREATE PROCEDURE procedure_name (first_param some_type, second_param some_type..)
 begin
……...
 end
Jarayonni chaqirish:
CALL procedure_name (first_param, second_param…..);
Saqlangan funksiya - bu saqlangan protseduraning bir turi. Funktsiyaning farqi shundaki, u har doim faqat bitta qiymatni qaytaradi, protsedura esa qiymatlar to'plamini qaytaradi. Saqlangan protseduralarni oddiy SQL bilan aralashtirib bo'lmaydi, lekin saqlangan funksiya mumkin - va bu uning afzalligi. Boshqa tomondan, saqlangan funktsiyalar protseduralardan ko'ra ko'proq cheklovlarga ega. Saqlangan funktsiyani yaratish:
CREATE FUNCTION function_name (first_param, second_param…..)
RETURNS some_type
 begin
……...
RETURN some_value;
end
Saqlangan funktsiyani chaqirish:
SELECT function_name(first_param, second_param…..);
Trigger - foydalanuvchi tomonidan bevosita chaqirilmaydigan, lekin ma'lumotlar o'zgartirilganda faollashtirilgan boshqa turdagi saqlangan protseduralar. Ya'ni, ushbu protsedura ma'lum shartlar bajarilganda faollashtiriladi, masalan, INSERTyoki DELETE, yoki UPDATEberilgan jadvalning ma'lum ustunidagi ma'lumotlar. BEFORETrigger ishga tushirilganda kalit so'zlar (bog'langan hodisadan oldin tetik yong'inlari) yoki AFTER(hodisadan keyin) yordamida aniqlanadi .
CREATE TRIGGER trigger_name
ON table_name
AFTER INSERT
 begin
……...
 end

15. Amaliyot

Qanday bo'lmasin, intervyuda eng keng tarqalgan SQL savoli amaliyot bo'ladi - muammoni hal qilish. Qaysi vazifalarga duch kelishingizni taxmin qilishning ma'nosi yo'q, chunki hamma narsa qarama-qarshi odamning tasavvurining murakkabligiga bog'liq. Shuning uchun, yagona ish varianti turli xil murakkablikdagi SQL so'rovlarida yaxshiroq bo'lishdir. sql-ex.ru turli vazifalar ustida mashq qilish uchun manba bo'lib xizmat qilishi mumkin . Birinchi yigirmata bajarilgan topshiriqdan so'ng, suhbatdoshingiz sizni biron bir SQL vazifasi bilan qo'rqitishi juda qiyin bo'ladi. Собеседование разработчика: разбор вопросов по базам данных - 11Bu bugungi kun uchun: Umid qilamanki, ushbu maqolani o'qib chiqqandan so'ng, ma'lumotlar bazalari haqidagi savollar hech qanday qiyinchilik yoki muammo tug'dirmaydi. E'tiboringiz uchun rahmat va yana ko'rishguncha!
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION