2013-06-11 1 views
2

Задачи из экзамена для систем баз данных, подлежащими:запросов в реляционной алгебре без использования агрегатных функций

Я следующая схемой:

Excavator(EID, Type) - EID is a key 
Company(Name, HQLocation) - Name is a key 
Work(Name, EID, Site, Date) - All collumns together form a key 

Я должен написать этот запрос в реляционной алгебре:

"Which company was digging on exactly one site on 1st of May?" 

Я не знаю, как выразить это без агрегатных функций (количество). Я знаю, что люди добавляют эти функции в реляционную алгебру, но нам было запрещено делать это во время этого экзамена.

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

+0

Что реляционная алгебра операторов вы позволили? Кажется, что-то, что можно сделать с коррелированным анти-соединением. –

+0

Я могу использовать деление, проекцию, выбор, декартово произведение, естественное соединение. – alop789312

+0

Не уверен, что это возможно только с этими 5. Даже не минус? –

ответ

4

забывает правильную реляционную синтаксис алгебры сейчас, но вы можете сделать

 (Worked on >= 1 site on 1st May) 
minus (Worked on > 1 site on 1st May) 
-------------------------------------- 
equals (Worked on 1 site on 1st May) 

SQL-решение, используя только оператор, указанных в комментариях (и предполагая rename) ниже.

SELECT Name 
FROM Work 
WHERE Date = '1st May' /*Worked on at least one site on 1st May */ 

EXCEPT 

SELECT W1.Name /*Worked more than one site on 1st May */ 
FROM Work W1 
     CROSS JOIN Work W2 
WHERE W1.Name = W2.Name 
     AND W1.Date = '1st May' 
     AND W2.Date = '1st May' 
     AND W2.Site <> W2.Site 

Я предполагаю, что это будет относительно прямой перевод

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

  • Нет связанных вопросов^_^