Какъв би бил резултатът от тази операция върху тези таблици?

Enroll (table):

cid        sid    grade    gradepoint
CS425      001    A        4.0
CS595      001    B        3.0
CS595      002    A        4.0
EE401      001    A        4.0
EE401      002    B        3.0
EE401      004    A        4.0
PHYS571    002    C        2.0
PHYS571    004    A        4.0

Използвайки релационна алгебра, операцията е (извинете за липсата на гръцки букви, не знам как да ги добавя към SO):

select_(Enroll.gradepoint<x.gradepoint)^Enroll.cid=x.cid (Enroll x rho_x(Enroll))

По принцип се казва да се направи декартово произведение на таблицата Enroll със самата нея (преименуване на второто копие на Enroll на "x"), след което да се изберат само редовете, където cid съвпада (разбира се) и където е оценката по-ниско от себе си. Но това няма смисъл. Това няма ли да доведе само до празен набор?


person JohnSmithy1266    schedule 03.10.2017    source източник
comment
Възможно ли е в релационната алгебра редът на термините в предиката за избор действително да има значение??   -  person JohnSmithy1266    schedule 03.10.2017
comment
Не, @JohnSmithy1266, редът в селекцията σ няма значение, нито в π проекцията. В RA няма „ред по колони“ и достъпът е само по име на атрибут. Нито обикновено има именуване на атрибути с префикс точка (всъщност ли използвате SQL?) -- каква версия на RA използвате? Просто не мога да следя бележката ти. Чрез ρ (rho) връзка за преименуване Enroll към x, предполагам, че получавате две копия на всеки атрибут, произтичащ от декартовия продукт. Съвпадате само на cid, така че ще получите различни sids, grades, gradepoints.   -  person AntC    schedule 04.10.2017
comment
@AntC Не знаех, че има различни вариации на RA. Предполагам, че използвам стандарта, който се преподава в курс за висше училище.   -  person JohnSmithy1266    schedule 04.10.2017
comment
Няма една RA (релационна алгебра). Те се различават дори по това какво представлява връзката. Дайте препратка към вашия RA. (Rho изглежда преименува релация, което няма смисъл, дори ако връзките съдържат собственото си име, но това е вид идиотски така наречени RAs SQL апологети, дефинирани.) Условието за избор/ограничаване се оценява на вярно/невярно, така че защо редът би бил от значение? (Това може според съдържащите се оператори.) Всяка заявка има значение, вашата парафраза е грешна . Къде и как си заседнал?? Моля, потърсете в Google „stackexchange homework“. Вижте Как да попитате.   -  person philipxy    schedule 04.10.2017
comment
Ето връзка към типа релационна алгебра, който използвам: tutorialspoint.com/dbms/relational_algebra .htm   -  person JohnSmithy1266    schedule 04.10.2017
comment
Благодаря. Моля, редактирайте разясненията във вашия въпрос, а не коментарите. Моля, обърнете се към другата ми молба: покажете работата си и къде и как сте заседнали. Имайте предвид, че вашият израз не използва същата алгебра като вашата връзка. Относно първия ви коментар, какво имате предвид, когато казвате, че може да бъде? Изглежда, че е някаква причина за някакъв проблем? PS 1. Можете да търсите в Google „unicode“ с „join“, „rho“ и т.н., след което да изрежете и поставите. 2. dbis-uibk.github.io/relax/calc.htm ( Опитахте ли да намерите онлайн оценител по алгебра?) 3. tutorialspoint е лош източник на информация; тази страница е примерна.   -  person philipxy    schedule 04.10.2017
comment
Какво точно се опитваш да попиташ? Резултатът стойност? Резултатът значи? Моля, редактирайте, за да стане ясно.   -  person philipxy    schedule 04.10.2017


Отговори (1)


Да кажем, че операторът rename n (r) връща таблична стойност като r, но с нови имена на атрибути като старите с префикс n.. Тогава имаме:

/* rows where
    (cid, sid, grade, gradepoint) in Enroll
and (x.cid, x.sid, x.grade, x.gradepoint) in Enroll
and gradepoint < x.gradepoint and cid = x.cid
*/
restrict gradepoint < x.gradepoint and cid = x.cid (
    Enroll times rename x (Enroll)
    )

(Които са редове от формата (cid, sid, grade, gradepoint, x.cid, x.sid, x.grade, x.gradepoint).)

За съжаление този коментар не казва нищо за бизнес ситуацията. Така че нито масата. Но да предположим, че в нашия случай (cid, sid, grade, gradepoint) in Enroll когато in coursecidstudentsidgot gradegrade& grade point averagegradepoint. (Това е (характерният) предикат на таблицата в бизнес термини.) След това чрез заместване на in получаваме, че тази заявка също е:

/* rows where
    in course cid student sid got grade grade & grade point average gradepoint
and in course x.cid student x.sid got grade x.grade & grade point average x.gradepoint
and gradepoint < x.gradepoint and cid = x.cid
*/

Всеки ред в стойност на таблица (константа/променлива или резултат от заявка) прави изявление от включването му в предиката на таблицата. (И всеки отсъстващ ред посочва отрицанието/not на израза от включването му в предиката.) Дизайнерът дава предикатите за константа/променлива и предикатът за резултат от заявката идва от тези и операторите за връзка. (restrict и joins (включително times и intersect) въвеждат and, project въвеждат there exists, union въвеждат or, minus въвеждат and not и т.н.)

Тук изявлението включва един курс и две оценки, всяка от които принадлежи на различен студент. Така че няма "където оценката е по-ниска от себе си".

Формиране на заявка за релационна алгебра от описание на английски
Има ли някакво основно правило за конструиране на SQL заявка от четливо за човека описание?

(Така нареченият „алгебричен оператор“, както споменахте за „преименуване“ на стойност, наистина е нетерминален език за програмиране за присвояване на променлива. Това е ортогонално на алгебрични стойности и оператори Такова объркване възниква от неясно мислене, типично за апологетиката на SQL.)

person philipxy    schedule 04.10.2017
comment
Опитвам се да разбера отговора ви, но съм малко объркан. Мисля, че може да имате някакво грешно кодово обозначение, например около думата got или in course. - person JohnSmithy1266; 04.10.2017
comment
Вашият коментар не е ясен. Но разбира се... не е код, това е английски, това е шаблон какво казва ред за бизнес ситуацията. Редовете, които правят вярно твърдение, влизат в таблицата. Ние казваме, това е, което означава масата; това е (характерният) предикат на таблицата в бизнес термини. Прочете ли линковете? Ще редактирам, когато мога. Моля прочетете заглавието и въпроса си и вижте, че не е ясно какво питате. И обърнете внимание на всичките ми коментари. - person philipxy; 04.10.2017