Естественное присоединение к базе данных и переименование

Я пытаюсь изучить реляционную алгебру и запросы к базе данных. В следующем вопросе и типовом ответе, если мы переименуем каждый атрибут в Q1, как в ответе, может ли по-прежнему выполняться естественное соединение? Я думал, что у этих двух отношений должен быть хотя бы один общий атрибут с одинаковым именем. Не могли бы вы помочь объяснить, что здесь происходит? Большое спасибо! введите здесь описание изображениявведите здесь описание изображения


person user3735871    schedule 27.03.2015    source источник


Ответы (1)


Имена атрибутов не обязательно должны быть одинаковыми, но если они не совпадают, может возникнуть путаница. Однако, упомянув, например, [sid] ‹ ПОСТАВЩИКИ[sid] вы разъясняете фактические отношения.

Это вы можете переименовать, например. Suppliers.sid в Suppliers.supplierId, а затем четко указать, что Catalog.sid относится к Suppliers.supplierId, и все это там.

На практике я всегда называю PK таблиц, которые я разрабатываю, Id, а когда использую его в других таблицах как FK, я называю его [tablename]Id, например. идентификатор поставщика.

person simon at rcl    schedule 27.03.2015
comment
Спасибо. Вы имеете в виду, что если атрибуты в двух таблицах не имеют одинаковых имен, естественное соединение все равно может быть выполнено. Например, результирующая таблица после естественного соединения будет иметь атрибуты sid, sid', pid, pid', cost, cost' ? - person user3735871; 28.03.2015
comment
Я имею в виду, что имена не обязательно должны быть одинаковыми, чтобы соединение работало. Я не уверен, что означает ваше последнее предложение. - person simon at rcl; 28.03.2015
comment
Я хотел спросить, а что получится после объединения sid, pid, cost и sid', pid', cost'? Является ли результатом таблица с атрибутами sid, sid', pid, pid', cost, cost'? - person user3735871; 29.03.2015
comment
Это зависит от типа базы данных. В SQL Server повторяющиеся имена столбцов в запросе не допускаются; если вы не дадите имена, выбрав a.sid как asid, b.sid как bsid... и т. д., тогда он даст sid, sid2, pid, pid2 и так далее. Что делают MYSql и другие, я не знаю. - person simon at rcl; 29.03.2015