A pergunta pergunta:
Dadas duas relações A e B, ambas sobre os atributos x e y. Escreva uma consulta na semântica do saco que retorne A se B estiver vazio e B caso contrário
A maneira como interpretei essa pergunta como "vazia" significava que não havia tuplas na relação.
A questão é dada em um sentido geral para que não haja valores associados a cada relação.
Espero que alguém possa me dar uma orientação para começar.
Edit: Até agora, vejo que, se B estiver vazio, A união B produziria a resposta correta. Mas no caso de B não estar vazio, precisaríamos fazer a interseção com B , ou seja (A união B) cruzar B , mas isso não funcionaria quando B estiver vazio
Edit: Para dar um exemplo no caso em que A e B não estavam vazios:
R : ((1,1), (2,2))
B : ((3,3), (4,4))
A consulta deve retornar: ((3,3), (4,4))
Mas, se mudarmos B para: ()
A consulta deve retornar: ((1,1), (2,2))
Eu simplesmente não consigo entender qual combinação possível de operadores de conjunto me permitiria alcançar isso.
Edit: Aqui está um link para basicamente o deck de slides exato usado para nos ensinar Álgebra Relacional, cerca de 3/4 do caminho define Álgebra em sacos, que é o que minha pergunta usa. O livro-texto usado em aula é "Sistemas de Gerenciamento de Banco de Dados" de Ramakrishnan e Gehrke 3ª edição, página 100, mas este era um texto opcional e nos disseram que nossa principal referência deveria ser o conjunto de slides.
Para condensar os slides, nossa álgebra possui Seleção, Projeção, Renomeação, Produto Cartesiano, União e Diferença. Todas as outras operações podem ser feitas com uma combinação destas.
Para resolver de onde o problema se originou, foi de uma antiga planilha de problemas que eu tinha para o meu módulo de bancos de dados no semestre passado, revisei-a recentemente para revisar a álgebra relacional para um projeto futuro que tenho, mas essa pergunta me deixou perplexo por alguns dias. O professor que apresentou os problemas foi embora, então infelizmente não posso perguntar a eles.
Como você observa, A ∪ B retorna A se B = ∅, caso contrário, retorna tuplas de A e B.
Em outras palavras, o resultado está correto, exceto que inclui A quando B não é vazio.
Você precisa de uma expressão extra E, que retornaria A se B não fosse vazio; caso contrário ∅.
O resultado desejado seria então dado por:
(A ∪ B) - E
Isso removeria A do resultado somente quando B não for vazio.
Para encontrar E, considere como A × B se comporta quando B = ∅.
Isso deve lhe dar o suficiente para encontrar um E adequado e resolver seu problema.
Solução de spoilers abaixo.