(необходимо сделать оговорку, что существует много вариантов реляционной алгебры; что они различаются семантикой; и они различаются по синтаксису. Предполагая, что вы намереваетесь вариант, аналогичный варианту в wikipedia ...)
Да, это выражение должно работать нормально. Оператор естественного соединения ⋈
сопоставляет одноименные атрибуты двух своих операндов. Таким образом, подвыражение Band ⋈ Album
дает результат с атрибутами {band_name, founded, album_name}
. Ваше выражение проецирует два из них.
Обратите внимание, что атрибуты для значения отношения - это set , а не последовательность; поэтому любая операция над операндами отношения с одноименными атрибутами должна соответствовать атрибутам.
Напротив, декартово произведение ×
требует, чтобы его операнды имели непересекающиеся имена атрибутов. Тогда Band × Album
неправильно сформирован и будет отклонен. (Так что вам нужно переименовать band_name
в одном из них, чтобы получить отношения, которые могли бы быть операндами.)
Я не очень доволен вашим способом написания «объединение устраняет дубликат. запись, которая используется в объединении ". Потому что только в SQL вы получаете дубликат (из SELECT * FROM Band, Album ...
- в результате получается таблица с четырьмя столбцами, два из которых названы band_name
). SQL FROM
список таблиц - это провал: ни соединение, ни декартово произведение, но что-то пытается быть обоими и преуспевает только в том, чтобы быть ни тем, ни другим. RA ⋈
никогда не создает «дубликат», поэтому он никогда ничего не «устраняет».
В частности, если есть объявленные ключи и ограничение внешнего ключа (от Album
's band_name
до Band
' s) Я вижу, что они идентифицируют ту же самую полосу, тогда естественная операция состоит в том, чтобы собрать воедино то, что было разобрано, так что имя «Естественное соединение».