Реляционная алгебра: естественное соединение со значением NULL

Таблица 1

Customer  id  city 
John       1   LA
Nancy      2   NULL

Таблица 2

Customer  $ in the pocket 
John       20
Nancy      30

Мне интересно, что произойдет, если Table 1 естественное соединение с Table 2? Я предполагаю, что результатом будет 4 атрибута, и появятся и Джон, и Нэнси.

Но мой друг сказал мне, что появится только Джон, Нэнси не будет, потому что есть значение null.


person randy    schedule 03.10.2016    source источник
comment
объединение происходит по двум атрибутам, и если вы присоединяетесь, используя Customer (что будет по умолчанию), то ваш друг ошибается :)   -  person bugwheels94    schedule 04.10.2016
comment
Чтобы понять это, просто перепишите NATURAL JOIN как обычный INNER EQUIJOIN, используя те же правила, что и NATURAL JOIN. Учитывая отношения в вашем примере, это будет эквивалентное соединение для атрибута Customer. (Значение NULL в атрибуте города не имеет значения, так как другое отношение не имеет атрибута с именем city.) ЕСТЕСТВЕННОЕ СОЕДИНЕНИЕ будет использовать все атрибуты с одинаковыми именами. Если бы второе отношение также имело атрибут с именем city, это было бы то же самое, что и INNER EQUIJOIN для обоих атрибутов Customer и city.   -  person spencer7593    schedule 04.10.2016
comment
При естественном присоединении мы присоединяемся только в том случае, если мы совпали с общим атрибутом (в данном случае это поле «Клиент»)?   -  person randy    schedule 04.10.2016
comment
@ spencer7593, значит, если общий атрибут не содержит null, то все в порядке?   -  person randy    schedule 04.10.2016
comment
Я бы не стал говорить, что ЕСТЕСТВЕННОЕ СОЕДИНЕНИЕ подойдет. За пределами научных кругов мы никогда не используем ЕСТЕСТВЕННОЕ СОЕДИНЕНИЕ. (Все, что нам нужно, это чтобы кто-то добавил столбец с именем city в table2, и наш запрос, который работал, сломался.) Когда я сталкиваюсь с ЕСТЕСТВЕННЫМ СОЕДИНЕНИЕМ, чтобы понять, что оно на самом деле делает, мне нужно просмотреть все столбцов в обеих таблицах и найти все совпадения. И пока я это делаю, я тихо проклинаю разработчика, который все время экономил на том, что печатал NATURAL вместо ON a.customer = b.customer, чтобы я мог потратить в двадцать раз больше времени, чтобы разобраться.   -  person spencer7593    schedule 04.10.2016
comment
Использование NATURAL JOIN также по существу запрещает нам добавлять общие служебные столбцы с одинаковыми именами (добавленная строка даты и времени, измененная строка даты и времени, пользователь/актер, который изменил строку), а также запрещает называть любые анонимные суррогатные столбцы первичного ключа с тем же именем ( id). По сути, это вынуждает нас принимать неверные соглашения об именах для столбцов, чтобы мы непреднамеренно не создавали столбцы с одинаковыми именами, и в то же время вынуждает нас использовать одно и то же имя столбца, если мы хотим выполнить операцию эквивалентного соединения. Недостатки NATURAL JOIN намного перевешивают любые предполагаемые преимущества.   -  person spencer7593    schedule 04.10.2016
comment
Как я сказал в своем первом комментарии, всякий раз, когда вы видите ЕСТЕСТВЕННОЕ СОЕДИНЕНИЕ, просто знайте, что это EQUIJOIN для набора столбцов (атрибутов), которые вам решать. Вам нужно просмотреть определения таблиц, чтобы понять, что все столбцы в двух таблицах имеют одинаковые имена. Вы не можете остановиться только на первом совпадении; вы должны убедиться, что нет других совпадающих имен столбцов.   -  person spencer7593    schedule 04.10.2016
comment
Существует много РА (реляционных алгебр). Они различаются операторами и даже отношением. Дайте определения оператора и свою ссылку для вашего. Например, название учебника, издание и страница.   -  person philipxy    schedule 30.06.2020


Ответы (1)


В приведенном выше случае ваш друг неправ, вы правы!

Давайте рассмотрим случай, когда было бы иначе:

Таблица «Клиент»

Id Name   AccNo
1  John    44
2  Nancy  NULL 

Таблица «Учетная запись»

AccNo $_in_Pocket
44       20
45       30

Здесь, с естественным объединением, мы получим все атрибуты для Джона, но Нэнси будет отсутствовать в результатах.

person Sonam Gurung    schedule 03.10.2016
comment
Вам не нужно форматировать свой ответ с помощью HTML-тегов и сущностей, вместо этого используйте правильное форматирование ответа Stackoverflow. - person bugwheels94; 06.10.2016