Я пытаюсь изучить реляционную алгебру и запросы к базе данных. В следующем вопросе и типовом ответе, если мы переименуем каждый атрибут в Q1, как в ответе, может ли по-прежнему выполняться естественное соединение? Я думал, что у этих двух отношений должен быть хотя бы один общий атрибут с одинаковым именем. Не могли бы вы помочь объяснить, что здесь происходит? Большое спасибо!
Естественное присоединение к базе данных и переименование
Ответы (1)
Имена атрибутов не обязательно должны быть одинаковыми, но если они не совпадают, может возникнуть путаница. Однако, упомянув, например, [sid] ‹ ПОСТАВЩИКИ[sid] вы разъясняете фактические отношения.
Это вы можете переименовать, например. Suppliers.sid в Suppliers.supplierId, а затем четко указать, что Catalog.sid относится к Suppliers.supplierId, и все это там.
На практике я всегда называю PK таблиц, которые я разрабатываю, Id, а когда использую его в других таблицах как FK, я называю его [tablename]Id, например. идентификатор поставщика.
person
simon at rcl
schedule
27.03.2015
Спасибо. Вы имеете в виду, что если атрибуты в двух таблицах не имеют одинаковых имен, естественное соединение все равно может быть выполнено. Например, результирующая таблица после естественного соединения будет иметь атрибуты sid, sid', pid, pid', cost, cost' ?
- person user3735871; 28.03.2015
Я имею в виду, что имена не обязательно должны быть одинаковыми, чтобы соединение работало. Я не уверен, что означает ваше последнее предложение.
- person simon at rcl; 28.03.2015
Я хотел спросить, а что получится после объединения sid, pid, cost и sid', pid', cost'? Является ли результатом таблица с атрибутами sid, sid', pid, pid', cost, cost'?
- person user3735871; 29.03.2015
Это зависит от типа базы данных. В SQL Server повторяющиеся имена столбцов в запросе не допускаются; если вы не дадите имена, выбрав a.sid как asid, b.sid как bsid... и т. д., тогда он даст sid, sid2, pid, pid2 и так далее. Что делают MYSql и другие, я не знаю.
- person simon at rcl; 29.03.2015