2010-12-11 3 views
0

Впервые я столкнулся с проблемой реляционной алгебры для баз данных сегодня, и я не могу найти ответ.Синтаксис реляционной алгебры

У меня есть 3 стола, партия, канал и рынок.

Пакет подключен к каналу и рынку с помощью ключей foregein (channelID, marketID).

Что такое правильное обозначение для запроса такого рода:

select * from batch, channel, market 
where batch.channelID=channel.channelID AND batch.marketID=market.marketID 

Благодаря


Если я правильно понял, что мне нужно написать следующее:

π...(Batch⋈         Channel⋈        Market 
      (batch.channelID=channel.channelID)  (batch.marketID=market.marketID) 

ответ

3

Это будет пакет ⋈ канал ⋈ рынок (естественный j жилы ассоциативны и коммутативны).

EDIT: поскольку имена атрибутов одинаковы для каждого соединения (вы сравниваете batch.channelID с channel.channelID), вы находитесь в ситуации, когда запрос может быть написан с естественным присоединяется, и нет необходимости писать (xxx = yyy) под оператором ⋈, когда он представляет собой естественное соединение.

может быть вместо этого писать как θ-соединения, и в этом случае ваш синтаксис будет почти правильным, но я чувствую, что использование θ-соединений для представления естественных объединений вроде пропускает точку. Изменение, которое вам нужно сделать, состоит в том, что поскольку θ-соединения не являются ассоциативными, вам нужно добавить скобки: (пакетный канал ⋈) ⋈ рынок

+0

Привет, не уверен, что понял. Является ли мое обновление правильным в отношении того, как я должен писать суб-нотацию полей объединения? (Я должен описать полный запрос). – Amirshk

+0

Спасибо, очень полезно – Amirshk

Смежные вопросы