C, PHP, VB, .NET

Дневникът на Филип Петров


Категория ‘Бази от Данни’

* Покриващи индекси

Публикувано на 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 – трябва да бъде споделена между двете бази от данни. Прочети още…

.