Объединение реляционной алгебры - необходимо переименовать? - PullRequest
0 голосов
/ 12 июля 2020

Предположим, у меня есть 2 простых таблицы:

ВАЖНО: Это касается реляционной алгебры, а не SQL.

Таблица диапазонов:

 band_name founded
 Gambo     1975
 John.     1342

Таблица альбомов:

album_name band_name
Celsius.   Gambo
Trambo     Gambo

Теперь, поскольку таблица Band и таблица альбома имеют одно и то же имя столбца «band_name», нужно ли переименовать его, когда я присоединюсь к ним?

Насколько мне известно, объединение исключает повторяющуюся запись, которая используется в объединении. В этом примере, где я просто выбираю все группы, которые существуют в таблице альбома (очевидно, просто «Гамбо» в данном примере)

Πfounded, band_name(Band ⋈ Album)

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

1 Ответ

1 голос
/ 13 июля 2020

(необходимо сделать оговорку, что существует много вариантов реляционной алгебры; что они различаются семантикой; и они различаются по синтаксису. Предполагая, что вы намереваетесь вариант, аналогичный варианту в 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) Я вижу, что они идентифицируют ту же самую полосу, тогда естественная операция состоит в том, чтобы собрать воедино то, что было разобрано, так что имя «Естественное соединение».

...