Вопрос

Я довольно новичок в синтаксисе реляционной алгебры, и мне трудно понять, как я могу установить пункт «хотя бы один».

Пример: у меня есть:

  • Таблица с книгами (в перечислении названия, Год опубликованного и удостоверения личности),
  • Таблица с авторами (перечисляет их имя и удостоверение личности),
  • В таблице, в которой перечислены то, что автор написал, какую книгу (через кортеж по идентификаторам, упомянутым ранее).

Как я мог в реляционной алгебре получить «всех авторов, которые опубликовали хотя бы одну книгу в год между 2008 и 2010 годами»?

Я подумал это до сих пор. На шаге «B» естественное соединение используется, поскольку обе таблицы имеют общее. Таким образом, полученная таблица - это | publicationId | AutorRID | Год |. Так что я просто упускаю шаг «C», где я не понимаю, как собрать подзадачу авторов, которые опубликовали хотя бы одну книгу в год в период с 2008 по 2010 год.

$ a Leatharrow pi_ {publicationId, Год} (Публикация) $

$ b Leatharrow a bowtie authorpublication $

$ c Leatharrow sigma_ {что -то} $

Это было полезно?

Решение

Первый намек на решение - подумать о том, что является результатом естественный Присоединяйтесь между автором $ $, $ publication $ и $ outorpublication $? »Ответ - это« универсальные отношения »$ r (bookid, авторитетное, название, год, имя) $, описывающий, кто написал книгу и когда. Обратите внимание, что книга без Любой автор или автор без какой -либо написанной книги не появится в $ r $. Поэтому автор в $ r $ написал хотя бы одну книгу. Следующий запрос дает авторам, которые написали хотя бы книгу в 2008 году: $$ $ pi_ {name} (Автор присоединиться к Authorpublication Join Sigma _ {(2008 = Год)} (Публикация)) $$

Для окончательного ответа вычислите пересечение этого запроса с его вариантами: $$ pi_ {name} (Автор присоединиться к Authorpublication Join Sigma _ {(2008 = Год)} (Публикация)) cap pi_ {name} ( Автор присоединиться к Authorpublication Join Sigma _ {(2009 = Год)} (публикация)) cap pi_ {name} (Автор Join authorpublication Join Sigma _ {(2010 = Год)} (Публикация)) $$

Вы можете дать другие эквивалентные ответы с внешним автором $ присоединиться к $.

Другие советы

Это ответ от OP, который удален из вопроса.

Друг дал мне чаевые, и появилось возможное решение:

Для автора (имя, авторид) | Публикация (название, год, книга) | Authorpublication (BookId, Authorid)

$ Renamedap = alpha _ {(Authorid: LinkAuthorid, publicationId: linkpubid)} (authorpublication) $

$ Mix Leatharrow enedamedap times Автор Times Publication $

$ Mix2 Leatharrow Sigma _ {(AutorID = LinkAuthorid Wedge publicationId = linkpubid)} (mix) $

$ Y2008 Leatsarrow Sigma _ {(Год = 2008)} (Mix2) $

$ Y2009 Leatsarrow Sigma _ {(Год = 2009)} (Mix2) $

$ Y2010 Leatharrow sigma _ {(Год = 2010)} (Mix2) $

$ Subresult Leatharrow y2008 cap Y2009 Cap Y2010 $

$ Result Leatharrow pi_ {name} (subresult) $

Лицензировано под: CC-BY-SA с атрибуция
Не связан с cs.stackexchange
scroll top