KNOW INTUIT, Лекция, Основни средства за манипулиране на релационни данни релационно смятане

Квантори, свободни и обвързани променливи

При изграждането на WFF са разрешени квантори за съществуване (EXISTS) и универсални (FORALL). Ако form е WFF, включваща променлива var, тогава конструкциите EXISTS var (form) и FORALL var (form) са WFF. По дефиниция, формула EXISTS var (form) се оценява на true тогава и само ако има поне една стойност (кортеж) в обхвата на променливата var, за която WFF формулярът оценява на true. Формулата FORALL var (форма) се оценява на true, ако всички стойности на променливата var в нейния обхват на WFF форма се оценяват на true.

Променливите, включени в WFF, могат да бъдат свободни или обвързани. По дефиниция всички променливи в WFF, които не използват квантори, са свободни променливи. Всъщност това означава, че ако набор от стойности на безплатни променливи на кортежи се изчисли като true при изчисляване на WFF, тогава тези стойности на променливи на кортежи могат да бъдат включени в получената релация. Ако име на променлива се използва непосредствено след квантора, когато се конструира WFF във формата EXISTS var (форма) или FORALL var (форма), тогава в този WFF и във всички WFF, изградени с него, var е обвързана променлива. Това означава, че такава променлива не се вижда извън минималния WFF, който свързва тази променлива. При изчисляване на стойността на такава WFF не се използва една стойност на свързаната променлива, а целият обхват на нейната дефиниция.

Нека тук и по-нататък в този раздел SLU1 и SLU2 са две кортежни променливи, дефинирани в релацията EMPLOYEES. Тогава WFF

СЪЩЕСТВУВА SLU2(SLU1.SLU_ZARP >SLU2.SLU_ZARP)

за текущия кортеж SLU1 е вярно, ако и само ако има кортеж (свързан със SLU2) в цялата релация SERVANTS, така че стойността на неговия атрибут SLU_ZARP да удовлетворява условието за вътрешно сравнение. Лесно е да се види, че тази формула се оценява като вярна само за онези стойности на променливата на кортежа SLU1, които съответстват на служители, които не получават минималната заплата. Съответният набор от кортежи е показан на фиг. 5.2a (за тялото на връзката СЛУЖИТЕЛ от Фигура 5.1).

средства

Правилно изградена формула

ЗА ВСИЧКИ SLU2 (SLU1.SLU_ZARP >= SLU2.SLU_ZARP)

за текущия кортеж променливата SLU1 е зададена на true тогава и само ако за всички кортежи във връзката EMPLOYEE (свързана с променливата SLN2) стойностите на атрибута SLU_ZARP отговарят на условието за сравнение. Отново е лесно да се види, че формулата се оценява като истина само за онези стойности на променливата на кортежа SLN1, които съответстват на най-високоплатените служители.3 Упражнение за читателите. Защо първата формула (с EXISTS ) използва условието SLU1.SLU_ZAP > SLU2.SLU_ZARP и втората формула (с FORALL) - SLU1.SLU_ZAR >= SLU2.SLU_ZARP? . Съответният набор от кортежи е показан на фиг. 5.2б.

Всъщност по-правилно е да се говори не за свободни и обвързани променливи, а за свободни и обвързани появявания на променливи. Ако var е обвързан във WFF form, тогава във всички WFF, които включват form, може да се използва среща на същото име на променлива var извън form, което може да бъде свободно или обвързано, но във всеки случай няма нищо общо с появата на var във WFF form. Ето един пример:

Тази формула се оценява само като вярноза тези стойности на променливата SLU1, които съответстват на служители, участващи в проекти с повече от един участник, като всички участници в проекта получават една и съща заплата. Тук имаме две свързани срещания на променливата SLU2 с напълно различни значения. Грубо казано, за текущата стойност на променливата SLN1, променливата SLN2 "преминава" два пъти през своята област на дефиниране - първия път при изчисляване на частта от формулата с квантора на съществуване и втория път при изчисляване на частта с универсалния квантор. Между другото, формула с един универсален квантор на формата ще доведе до същия резултат:

Лесно е да се види, че кванторите могат да се третират като булеви функции (функции, които приемат стойности true или false) върху набора от стойности на свързаната променлива на кортежа. Със същия успех могат да се въведат числени функции над множества в релационното смятане, като MIN (минимална стойност), MAX (максимална стойност), AVG (средна стойност) и т.н.

В този случай може да се напише например WFF

SLU1.SLU_ZARP > MIN SL2.SL_ZARP (SL1.PRO_NOM = SL2.PRO_NOM)

чийто регион на истината съдържа всички кортежи от отношението СЛУЖИТЕЛ, съответстващи на онези служители, които получават заплата, по-висока от минималната заплата на служителите, участващи в същия проект. Ясно е, че за да се получи полученото съотношение, може да се интерпретира формулата по същия начин, както в случая с наличието на квантори, обсъдени по-горе.

Списъци с цели и изрази на релационно смятане

И така, WFF предоставя средство за формулиране на условие за избор от взаимоотношенията на базата данни. За да можем да използваме смятането за реална работа с базата данни, е необходим още един компонент, който определя набора и имената на атрибутите на получената релация. Този компонент се наричацелеви списък.

Целевият списък е изграден от целеви елементи, всеки от които може да бъде в следната форма:

  • var.attr, където var е името на съответната безплатна променлива на WFF, а attr е името на атрибута на връзката, върху който var е дефиниран;
  • var , което е еквивалентно на наличието на подсписък от var.attr1, var.attr2, . var.attrn , където 1, attr2, . attrn> включва имената на всички атрибути на определящата релация;
  • ново_име = var.attr; new_name е новото име на съответния атрибут на получената релация.

Последната опция е необходима, когато WFF използва множество свободни променливи със същия обхват. Всъщност прилагането на целеви списък към област на истинност на WFF е еквивалентно на извършване на операция за алгебрична проекция, а последната е някакъв вид операция за преименуване на алгебричен атрибут.

Израз на кортежно релационно смятане е конструкция от формата target_list WHERE WFF. Стойността на израза е релация, чието тяло е дефинирано от WFF, а наборът от атрибути и техните имена се дефинират от целевия списък.

Като прост пример, нека покажем израз на релационно кортежно смятане, чийто резултат е същият като резултата от операцията EMPLOYEES DIVIDE BY PROJECT_NUMBER (Фигура 3.11 от Лекция 3):

Разбира се, резултатът от този израз е релацията