Проекция на мултимножества
Проекцията на една релация R с екземпляр мултимножество се осъществява по аналогичен начин на проекцията при множества - всеки кортеж се проектира независимо. Разликата е, че в резултата не се елиминират дубликатите.
Ще разгледаме пример.
Нека R е следната релация:
-
A
|
B
|
C
|
1
|
2
|
5
|
3
|
4
|
6
|
1
|
2
|
7
|
1
|
2
|
8
|
Тогава релацията A,B (R) изглежда по следния начин:
-
Ако прилагаме проекция на множества, кортежът (1, 2) ще се среща само един път в резултата.
Селекция на мултимножества
Селекцията на една релация R с екземпляр мултимножество се осъществява по аналогичен начин на селекцията при множества - към всеки кортеж на R се прилага независимо условието за селекция.
Отново разликата е, че в резултата не се елиминират
дублиращите се кортежи. Ще разгледаме пример.
Нека R е следната релация:
-
A
|
B
|
C
|
1
|
2
|
5
|
3
|
4
|
6
|
1
|
2
|
7
|
1
|
2
|
7
|
Тогава релацията C>6 (R) има следния вид:
-
Декартово произведение на мултимножества
Нека R, S са релации с екземпляри мултимножества. Тогава декартовото произведение R x S се изчислява по естествения начин - всеки
кортеж на R независимо се съединява с всеки кортеж на S.
С други думи, ако един кортеж t се среща m пъти в R и един кортеж s се среща n пъти в S, то съединението на кортежите t и s ще се среща m.n пъти в R x S. Ще разгледаме пример.
Нека R е следната релация:
-
Нека S е следната релация:
-
Toгава R x S е следната релация:
-
A
|
R.B
|
S.B
|
C
|
1
|
2
|
2
|
3
|
1
|
2
|
4
|
5
|
1
|
2
|
4
|
5
|
1
|
2
|
2
|
3
|
1
|
2
|
4
|
5
|
1
|
2
|
4
|
5
|
Съединение на мултимножества
Нека R, S са релации с екземпляри мултимножества.
Тогава при съединение на R и S всеки кортеж на R независимо се изпробва да се съедини с всеки кортеж на S. В резултата не се премахват дубликатите.
Ще разгледаме примери за естествено съединение и тита-съединение с релациите R и S, които въведохме непосредствено по-горе.
Релацията R ⋈ S изглежда по следния начин:
-
Релацията R ⋈ R.B < S.B S изглежда по следния начин:
-
A
|
R.B
|
S.B
|
C
|
1
|
2
|
4
|
5
|
1
|
2
|
4
|
5
|
1
|
2
|
4
|
5
|
1
|
2
|
4
|
5
|
Разширени операции на релационната алгебра
Разгледаните операции върху множества и мултимножества са в основата на всеки съвременен език за заявки. Сега ще разгледаме други операции, които разширяват функционалността на класическата релационна алгебра. Тези операции са реализирани в SQL.
-
Операция за премахване на дублиращите се кортежи.
-
Агрегатни операции - SUM, AVG, MIN, MAX, COUNT. Тези операции не са от релационната алгебра, т.е. те не преобразуват релации в релации. Използват се при операцията за групиране.
-
Операция за групиране - групира кортежите на една релация по еднакви стойности на част от атрибутите.
Върху останалите атрибути се прилагат агрегатни функции в
рамките на всяка група.
-
Разширена проекция - чрез нея могат да се въвеждат нови атрибути, които се изчисляват на базата на съществуващите атрибути.
-
Операция за сортиране - превръща релацията в списък от кортежи, сортирани по един или повече атрибути.
-
Операция за външно съединение - вариант на съединение, чрез което се избягва загубата на информация от висящите кортежи.
Операция за премахване на дубликати
Нека R е релация с екземпляр мултимножество. Операцията за премахване на дубликати се означава по следния начин: (R).
Резултатната релация има същата схема, както R и в нейния екземпляр всеки кортеж на R се среща точно по един път. С други думи, операцията преобразува екземпляр на релация от мултимножество в множество. Ще разгледаме пример. Нека R е следната релация:
-
Тогава (R) е следната релация:
-
Агрегатни операции
Агрегатните операции се прилагат върху множества или мултимножества от атомарни стойности в една колона на релация.
Стандартно се поддържат следните агрегатни операции:
-
SUM - намира сумата от стойностите в колона с числа.
-
AVG - намира средното аритметично на стойностите в колона с числа.
-
MIN - намира най-малката стойност в колона с числа (относно стандартната наредба на числата) или с низове (относно лексикографската наредба на низовете).
-
MAX - намира най-голямата стойност в колона с числа (относно стандартната наредба на числата) или с низове (относно лексикографската наредба на низовете).
-
COUNT - намира броят на стойностите в произволна колона.
Ще разгледаме примери с горната релация R.
SUM (B) = 2+4+2+2 = 10
AVG (B) = (2+4+2+2)/4 = 2.5
MIN (A) = 1
MAX (B) = 4
COUNT (A) = COUNT (B) = 4
Операция за групиране
Много често се налага агрегатна функция да не се прилага върху цяла колона на една релация, а кортежите да се разбият на групи и агрегацията да се извършва независимо в рамките на всяка група.
Нека R е релация. Операцията за групиране означаваме
по следния начин: L (R). L е списък от елементи от следните два вида:
-
Атрибут на R, по който се прилага групирането. Такъв елемент се нарича групиращ атрибут.
-
Агрегатна функция, приложена към атрибут на R, последвана от стрелка и име на атрибута в резултата. Такъв елемент се нарича агрегиран атрибут.
Схемата на резултатната релация се получава от имената на
атрибутите в L.
Екземплярът на резултатната релация се получава по следния начин:
-
Разбиваме кортежите на R на групи. Всяка група се състои от всички кортежи, които покомпонентно се съгласуват по стойностите на групиращите атрибути. Ако няма групиращи атрибути, то всички кортежи в R образуват една група.
-
За всяка група в резултатната релация се генерира точно един кортеж, който се състои от стойностите на групиращите атрибути за тази група и агрегациите на кортежите в групата върху агрегираните атрибути.
Ще разгледаме два примера.
Разглеждаме релацията Movie (title, year, length, type, studioName).
Да предположим, че трябва да изпълним следната заявка:
“Да се намери общата дължина на филмите на всяко студио.”
Тогава съответният израз, който трябва да използваме е следния:
studioName, SUM (length)totalLength (Movie).
Разглеждаме релацията StarsIn (title, year, starName).
Да предположим, че трябва да изпълним следната заявка:
“Да се намерят годините на най-ранните участия на тези звезди, които са играли в поне три филма.”
Едно възможно решение е да групираме по starName, като агрегираме title чрез COUNT и year чрез MIN, след което да извършим подходяща селекция и проекция. Съответният израз е следния:
starName, minYear (ctTitle>=3 ( starName, MIN (year)minYear, COUNT (title)ctTitle (StarsIn))).
Да отбележим, че операторът за премахване на дубликати е частен случай на оператора за групиране. Действително, ако A1, A2, …, An са атрибутите на релация R, то изразът (R) е еквивалентен на израза
(R). Действително, при изчисляване на последния израз се групират еднаквите кортежи и в резултата се включва по един кортеж от всяка група.
Разширена проекция
Нека R е релация. При класическата проекция L (R), L е списък от атрибути на релацията R. При разширената проекция, която се означава по същия начин, L е списък от елементи от следните видове:
-
Атрибут на R.
-
Израз от вида Expr R, където Expr е израз, включващ атрибути на R, константи, аритметични операции или операции за стрингове, а R е новото име на атрибута, който се получава като резултат от изчисляването на израза Expr.
Схемата на резултатната релация се получава от имената на
атрибутите в L. В екземпляра на резултатната релация има по един кортеж за всеки кортеж от екземпляра на R. Този кортеж получаваме, като заместим в L стойностите на съответните атрибути и извършим съответните операции. При това, в резултата могат да се съдържат повтарящи се кортежи, дори в първоначалната релация да няма дубликати. Ще разгледаме примери.
Нека R е следната релация:
-
Тогава релацията A, B+CX (R) има следния вид:
-
Релацията B - AX, C - BY (R) има следния вид:
-
Операция за сортиране
В много случаи при извеждане на кортежите на една релация е удобно те да бъдат сортирани. Нека R е релация. Операцията за сортиране бележим по следния начин: L (R). L е списък от атрибути на R, спрямо който се осъществява сортирането. Резултатната релация има същата схема като R и същите кортежи като R, но сортирани по атрибутите в L, т.е. първо по най-левия атрибут в L, при равенство по следващия атрибут в L и т.н. Операцията е единствената разглеждана операция, която като резултат дава списък. Затова има смисъл да се прилага в края на серия от операции, тъй като операциите в релационната алгебра се прилагат върху множества и мултимножества, а не върху списъци.
Ако след се изпълни друга операция на релационната алгебра, то резултатът от се третира като множество (мултимножество).
В някои случаи, обаче, е по-ефективно да се изпълни дадена операция върху сортирана релация, така че понякога с цел ефективност е смислено да използваме като междинна операция.
Външно съединение
Едно свойство на операцията съединение е, че е възможно някои от кортежите на една релация да са висящи, т.е. да не успеят да се съединят с никой кортеж от другата релация. Информацията за висящите кортежи се губи в резултата, което в някои случаи не е желателно. Поради тази причина се въвежда външно съединение.
Нека R, S са релации.
Външно естествено съединение на R и S се означава така: R ⋈ S. Резултатната релация се получава по следния начин: изчисляваме R ⋈ S и добавяме висящите кортежи на R и на S, като запълваме с
NULL-стойности () всички атрибути, които не са техни, но присъстват в резултата от съединението.
Ляво външно естествено съединение на R и S се означава по следния начин: R L⋈ S. То е аналогично на обикновеното външно съединение, но в резултатната релация се добавят само висящите кортежи на R (допълнени с NULL-стойности).
Дясно външно естествено съединение на R и S се означава по следния начин: R R⋈ S. То е аналогично на обикновеното външно съединение, но в резултатната релация се добавят само висящите кортежи на S (допълнени с NULL-стойности).
Външно тита-съединение на R и S се означава така: R ⋈C S.
Тук C е условен израз, в който могат да участват атрибути на R и на S. Резултатната релация се получаваме по следния начин:
изчисляваме R ⋈C S и добавяме висящите кортежи на R и на S, като запълваме с NULL-стойности всички атрибути, които не са техни, но присъстват в резултата от съединението.
Ляво външно тита-съединение на R и S се означава
по следния начин: R L⋈C S. То е аналогично на обикновеното външно тита-съединение, но в резултатната релация се добавят само висящите кортежи на R (допълнени с NULL-стойности).
Дясно външно тита-съединение на R и S се означава по следния начин: R R⋈C S. То е аналогично на обикновеното външно
тита-съединение, но в резултатната релация се добавят само висящите кортежи на S (допълнени с NULL-стойности).
Ще разгледаме примери.
Нека U е следната релация:
-
Нека V е следната релация:
-
B
|
C
|
D
|
2
|
3
|
10
|
2
|
3
|
11
|
6
|
7
|
12
|
Тогава U ⋈ V, U L⋈ V, U R⋈ V имат съответно следния вид:
-
A
|
B
|
C
|
D
|
|
|
A
|
B
|
C
|
D
|
|
|
A
|
B
|
C
|
D
|
|
|
|
|
1
|
2
|
3
|
10
|
|
|
1
|
2
|
3
|
10
|
|
|
1
|
2
|
3
|
10
|
|
|
|
|
1
|
2
|
3
|
11
|
|
|
1
|
2
|
3
|
11
|
|
|
1
|
2
|
3
|
11
|
|
|
|
|
4
|
5
|
6
|
|
|
|
4
|
5
|
6
|
|
|
|
|
6
|
7
|
12
|
|
|
|
|
7
|
8
|
9
|
|
|
|
7
|
8
|
9
|
|
|
|
|
|
|
|
|
|
|
|
|
6
|
7
|
12
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Релацията U ⋈А>V.C V изглежда така:
-
A
|
U.B
|
U.C
|
V.B
|
V.C
|
D
|
4
|
5
|
6
|
2
|
3
|
10
|
4
|
5
|
6
|
2
|
3
|
11
|
7
|
8
|
9
|
2
|
3
|
10
|
7
|
8
|
9
|
2
|
3
|
11
|
1
|
2
|
3
|
|
|
|
|
|
|
6
|
7
|
12
|
Естествено, U L⋈ А>V.C V се получава като премахнем последния ред на тази релация, а U R⋈ А>V.C V се получава като премахнем нейният предпоследен ред.
Сподели с приятели: |