Категория ‘Бази от Данни’
* Покриващи индекси
Публикувано на 12 декември 2023 в раздел Бази от Данни.
Разработчици знаят, че тежките заявки могат да подобрят значително бързодействието си при наличие на индекси при колоните, които участват в условието WHERE. Това обикновено води до значително подобрение. Има обаче една техника, която може да ускори нещата дори още повече. Нарича се „покриващи индекси“. Прочети още...
* Страниране
Публикувано на 17 октомври 2023 в раздел Бази от Данни.
Когато информацията на някоя страница е много, понякога решаваме да направим т.нар. страниране. Това означава да покажем първите няколко записа и след тях да поставим връзки към следваща страница, на която ще се покажат следващите няколко записа. Тоест даваме възможност на потребителят да прелиства напред-назад като в книга, вместо да му изсипваме цялото съдържание накуп. Как се постига това в MySQL/MariaDB? Прочети още...
* Домейн-ключ нормална форма
Публикувано на 05 декември 2022 в раздел Бази от Данни.
Домейн-ключ нормалната форма в общи линии не се ползва в практиката и рядко се изучава дори в университетите. При нея се дефинират множества от допустими стойности чрез таблици. Обикновено е много по-подходящо въпросните ограничения да се правят в приложния софтуер, чрез CHECK ограничения или с тригери. Въпреки това за пълнота ще ги разгледам техниката за тази нормализация и тук. Прочети още...
* Рекурсивно извикване на подзаявки – още примери
Публикувано на 05 юни 2020 в раздел Бази от Данни.
В предишната статия показах един прост пример за използване на оператор WITH. Тук ще дам още няколко. Прочети още...
* Рекурсивно извикване на подзаявки
Публикувано на 04 юни 2020 в раздел Бази от Данни.
Рекурсията е традиционно слаб елемент в езика SQL. Едни от най-трудните задачи обикновено са свързани именно с извеждане на данни, които са наредени в някаква йерархия (например дървовидна структура) и зависят едни от други. В тази статия ще дам много прост пример за начални стъпки в рекурсивните заявки с оператор WITH.
Нека първо решим една наглед проста, но всъщност не съвсем тривиална задача. Нека имаме таблица, в която се отбелязват датите на възникнали покупки на продукти. Искаме да извадим списък с дата и брой покупки за деня от текущата седмица. За улеснение ще направя таблицата максимално проста: Прочети още...
* Виртуални колони
Публикувано на 16 декември 2016 в раздел Бази от Данни.
С MySQL 5.7.7 се появава още една сериозна добавка - виртуални колони в таблици. Друг възможен адекватен превод би бил "изчислими колони" - такива, които се генерират динамично на базата на друга съществуваща информация. Нека разгледаме най-простия пример - дадена е следната таблица: Прочети още...
* Курсори
Публикувано на 19 юли 2015 в раздел Бази от Данни.
Курсорите не съдържат нищо по-особено от обикновена резултатна таблица (т.е. result set) от SELECT заявка. Това, което ги прави по-специални, е че MySQL ни позволява да обхождаме тази резултатна таблица с цикли с помощта на итератор. Може да си представите курсора като референция (или указател) към пореден ред от дадена таблица. Прочети още...
* Задача от контролно 2 – 2015 г. вариант 2
Публикувано на 17 юни 2015 в раздел Бази от Данни.
Има ежегоден рок фестивал, в който се провеждат поредица от концерти в няколко поредни дни. Във всеки отделен ден свирят по няколко групи на три различни сцени – една голяма и две малки. По правило всеки ден на голямата сцена свирят две популярни групи – една подгряваща и една основна (headliners). През останалото време на малките сцени един след друг свирят по-неизвестни състави. Трябва да се състави база от данни, в която да се пази следната информация: Прочети още...
* Задача от контролно 2 – 2015 г. вариант 1
Публикувано на 17 юни 2015 в раздел Бази от Данни.
Задачата е от 13.06.2015 г. Да се създаде база от данни, в която да се пази следната информация: Прочети още...
* FEDERATED таблици в MySQL
Публикувано на 21 май 2015 в раздел Бази от Данни.
Представете си, че имаме две различни системи, които работят с различни бази от данни, но желаем част от информацията в тези бази от данни да бъде споделена. Например имаме чат и форум - искаме когато някой се регистрира в чата, да бъде регистриран автоматично и във форума (и обратно). Тоест таблиците на двете бази от данни в по-голямата си част са различни, но една от тях - таблицата Users - трябва да бъде споделена между двете бази от данни. Прочети още...