Реляционные вычисления кортежей

Рассмотрим следующую реляционную схему.

Students(rollno: integer, sname: string)
Courses(courseno: integer, cname: string)
Registration(rollno: integer, courseno: integer, percent: real)

Для следующего запроса:

{T ∣ ∃S∈Students,∃R∈Registration(
    S.rollno=R.rollno ∧ R.courseno=107 ∧ R.percent>90 ∧ T.sname=S.sname)}

Будет ли получен целый набор удовлетворяющих кортежей или только их T.sname? (Если так, это будет отличаться?)

1 ответ

Выражение реляционного исчисления или алгебры возвращает значение отношения. Отношения содержат наборы кортежей. Наборы не содержат дубликатов.

Атрибуты в результате зависят от того, как определена ваша конкретная версия корреляционного исчисления. Две разумные возможности:

  • Правая часть говорит, что значение кортежа с именем T является элементом некоторого отношения, определенного в терминах данных отношений, чтобы иметь определенные атрибуты.

  • Мы принимаем T назвать значение кортежа, которое имеет именно те атрибуты, которые используются после T. справа.

(В противном случае, любое значение кортежа для имени T просто атрибут sname удовлетворяет правой части, любой другой кортеж с какими-либо дополнительными атрибутами при любых значениях также удовлетворяет правой части.)

(Некоторые версии реляционного исчисления кортежей дают только имена атрибутов слева. Некоторые версии дают имена атрибутов плюс значения (в терминах имен кортежей, используемых справа) слева. Некоторые версии дают выражения вида R.a слева, отсюда и имена и значения атрибутов. Некоторые версии похожи на одну из них, но также дают имя кортежа T налево.)

Другие вопросы по тегам