Реляционная Алгебра-декартово произведение 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
, и критерий выбора сплавляется с выбором выше. Вы получите точно такое же дерево, как и фактический ответ, хотя вы никогда не меняли значение своего собственного ответа!
Я могу придумать одну причину, почему ваш лектор использует эти понятия взаимозаменяемо: ваш лектор хочет, чтобы вы поймите, что эти понятия можете быть взаимозаменяемыми, потому что "естественное соединение-это просто ярлык" (хотя это спорно).
декартово произведение - это всего лишь частный случай естественного соединения, где объединенные отношения не имеют общих имен атрибутов. В оригинальной алгебре Кодда переименование было отдельной операцией. Чтобы получить истинное декартово произведение двух отношений, имеющих некоторые общие атрибуты, необходимо переименовать эти атрибуты перед выполнением (естественного) соединения.
в интересах краткости переименования иногда остаются вне письменных примеров и символа продукта используется вместо этого. К сожалению, это скрывает важный момент, что существует только один вид соединения.