Реляционная алгебра для отношений «один ко многим»

Предположим, у меня есть следующие отношения:

Academic(academicID(PK), forename, surname, room)

Contact (contactID(PK), forename, surname, phone, academicNO(FK))

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

Π( relation, attr1, ... attrn ) означает проецирование n атрибутов из отношения.

σ( relation, condition) означает выбор строк, соответствующих условию.

⊗(relation1,attr1,relation2,attr2) означает объединение двух отношений по именованным атрибутам.

relation1 – relation2 — это разница между двумя отношениями.

relation1 ÷ relation2 — это разделение одного отношения на другое.

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

До сих пор я использую эту структуру '

LessNumVac = Π( σ( job, vacancies < 2 ), type )
AllTypes = Π( job, type )
AllTypes – LessNumVac.

Как построить алгебру для...

Перечислите имена всех контактов, которые принадлежат академику «Джон».


person MooHa    schedule 11.03.2013    source источник
comment
Вы забыли показать нам отношение job?   -  person Bergi    schedule 12.03.2013
comment
нет необходимости, я просто показываю структуру. присваивание результатов переменной LessNumVac и т. д. люди склонны придумывать сложные решения, так что это просто для того, чтобы показать структуру, с которой я хотел бы помочь.   -  person MooHa    schedule 12.03.2013
comment
Так в чем твой вопрос? Кстати, ваше описание реляционной алгебры несовершенно, взгляните на информацию тега   -  person Bergi    schedule 12.03.2013


Ответы (2)


Перечислите имена всех контактов, которые принадлежат академику «Джон».

Для этого вы должны соединить отношения Academic и Conctact, отфильтровать Джона и спроецировать атрибуты имени. Для эффективности выберите Джона перед присоединением:

πимя, настоящее имя (Контакт ⋈academicNO = академическийIDacademicIDимя = "Джон" Academic) )))

person Bergi    schedule 12.03.2013

Вы должны расширить свой набор операций с помощью natural join ⋈, Left outer join ⟕ и/или Right outer join ⟖, чтобы показать объединения.

В Википедии есть отличная статья о реляционной алгебре. Вы обязательно должны прочитать это!

person MarcinJuraszek    schedule 11.03.2013