2014-09-09 3 views
0

Я пытаюсь понять, когда использовать операторы выбора и проектирования. Мое настоящее понимание заключается в том, что выбор возвращает кортежи, которые соответствуют заданным критериям, а проекция создает новое отношение из отношения, на которое оно действует, но только с указанными атрибутами. Например:Реляционная алгебра, когда использовать проекцию и выбор в этих запросах?

σ(attribute="criteria"^(relation)) 

возвращает все кортежи с указанным значением атрибута, из отношения «отношение».

Π name (relation) 

найдет список имен из отношения «отношение», не считаясь с любыми другими атрибутами.

Из этого примера базы данных, с Звездочка обозначенной первичных ключей:

employee(*personName*, street, city) 
works(*personName*, companyName, salary) 
company(*companyName*, city) 
manages(*personName*, managerName) 

Я должен:

A) Найти имена всех сотрудников, которые работают на M & T Bank.

Π personName(σcompanyName = “M&T Bank” ^(works)) 

B) Найдите имена всех компаний, которые могут быть записаны в базу данных.

Π companyName (company) 

C) Найдите имена всех сотрудников, которые не являются менеджерами.

Π personName (works) - ΠpersonName(manages) 

В основном, являются ли указанные выше попытки запроса правильными? И насколько я понимаю, что эти операторы верны и полны?

ответ

0

Ответ A) правильный (также я не знаю, что означает ^ в ваших обозначениях, поэтому я просто проигнорировал его).

Для B вы должны иметь в виду, что компании могут быть записаны не только в компании таблице , но и в работ таблице. Следовательно, ваш ответ должен быть Π companyName (company) U Π companyName (works).

Для C вы также должны быть более осторожны при идентификации сотрудников. Можно утверждать, что бывшие сотрудники по-прежнему числились в сотрудником, но не в работах также следует учитывать. В зависимости от вашей точки зрения (или вашего учителя) вам может потребоваться использовать Π personName (works) U Π personName (employee) вместо Π personName (works).

Более серьезной проблемой на C является идентификация менеджеров. ΠpersonName(manages) - это управляемые люди, а не менеджеры. Менеджеры: Π managerName(manages).

Следовательно, для C вы можете предпочесть (Π personName (works) U Π personName (employee)) - Π managerName(manages).

В общем, ваше понимание проекции и выбора правильное, но при формулировании ответов вам нужно быть немного осторожнее.

+0

Карат должен был обозначить верхний индекс; извините, если это было непонятно. Это все имеет смысл; Большое вам спасибо за ваш ответ. –