Реляционная Алгебра-декартово произведение vs естественное соединение?

я готовлюсь к экзаменам и не могу найти твердых критериев, по которым я могу определить, является ли декартово произведение x должен использоваться или если естественное соединение |X| используется.

я придумал грубое руководство, которое:

" Если вам нужно спроектировать атрибут, который имеет то же имя, что и атрибут в таблице, к которой нужно присоединиться, вы должны использовать x и укажите имена таблиц, которые будут проецироваться: tableA.colname1 = tableB.colname1"

это, однако, не следует за некоторыми решениями в моих заметках, и мой лектор, похоже, использует x С вышеуказанной конвенцией или |x| взаимозаменяемо.

есть ли у кого-нибудь правило, которому можно следовать, чтобы определить использование одного над другим?


возьмите, например, эту схему (только схема, связанная с вопросом, приведенным для краткости):

takes(ID, course_id, sec_id, semester, year, grade)
student(ID, name, dept_name, tot_cred)

Q) найти имя всех студентов, которые прошли курсы этому учили либо весной 2011 года, либо осенью 2011 года.

моя попытка ответа:

π name(σ semester="Spring" ^ year=2011(takes ⋈ student)) ∪ π name(σ semester="Autumn" ^ year=2011(takes ⋈ student))

правильный ответ:

π name(σ semester="Spring" ^ year=2011 ^ takes.ID=student.ID(takes x student)) ∪ π name(σ semester="Autumn" ^ year=2011 ^ takes.ID=student.ID(takes x student))

может ли кто-нибудь указать причину, почему?

в моем разуме естественное соединение позаботится о takes.ID=student.ID?

2 ответов


естественное соединение, как я понимаю, является проектируемым, отфильтрованным декартовым продуктом:

  • вы берете декартово произведение, затем
  • выберите его, чтобы значения в Столбцах с одинаковым именем имели одинаковое значение и
  • проецируйте его, чтобы все столбцы имели разные имена.

при этом предположении ваш ответ изоморфен фактическому ответу.

чтобы увидеть это, вы можете развернуть естественное соединение с над последовательностью операторов и плавают их вокруг, используя законы реляционной алгебры. Вы увидите, что проекция исчезает из-за проекции на name, и критерий выбора сплавляется с выбором выше. Вы получите точно такое же дерево, как и фактический ответ, хотя вы никогда не меняли значение своего собственного ответа!


Я могу придумать одну причину, почему ваш лектор использует эти понятия взаимозаменяемо: ваш лектор хочет, чтобы вы поймите, что эти понятия можете быть взаимозаменяемыми, потому что "естественное соединение-это просто ярлык" (хотя это спорно).


декартово произведение - это всего лишь частный случай естественного соединения, где объединенные отношения не имеют общих имен атрибутов. В оригинальной алгебре Кодда переименование было отдельной операцией. Чтобы получить истинное декартово произведение двух отношений, имеющих некоторые общие атрибуты, необходимо переименовать эти атрибуты перед выполнением (естественного) соединения.

в интересах краткости переименования иногда остаются вне письменных примеров и символа продукта используется вместо этого. К сожалению, это скрывает важный момент, что существует только один вид соединения.