R tem de ser uma associação de um para um.
Justificação: Para uma determinda entidade de X só pode corresponder uma entidade de Y (porque A-->B e, A e B são chaves de X e Y respectivamente. O facto de B ser chave de Y significa que os valores de B são únicos, não pode haver repetidos. Logo, a cada entidade de X só pode corresponder uma entidade de Y.) A situação contrária é idêntica e a justificação é semelhante. Isto é, para uma determinada entidade de Y só pode corresponder uma entidade de X.
Sim, basta que B seja também uma chave candidata. Se isso acontecer, B-->C não viola a condição de BCNF.
A diferença é que uma relação é um conjunto. Logo, não pode ter tuplos repetidos. Uma tabela pode ter.
Chave primária: Conjunto de atributos de uma relação que determina univocamente um tuplo da relação (em SQL, apenas pode haver uma chave primária por relação).
Chave candidata: A definição é idêntica à de chave primária mas sem a restrição de só poder haver uma. Isto é, podem existir várias chaves candidatas mas só pode haver uma chave primária por relação.
Chave estrangeira: Conjunto de atributos de uma relação que são chave de uma outra relação.
CREATE ASSERTION b_unico CHECK ( 1 >= ALL (SELECT COUNT(*) FROM R GROUP BY B) );
R: S: a | b a | b ------- ------- 3 | 5 3 | 5 1 | 3 2 | 7 3 | 8então:
R-S: a | b ------- 1 | 3 3 | 8Fazendo os cálculos para ambas as expressões obtemos resultados diferentes.
PI_a( R-S ) = {1,3} PI_a( R ) - PI_a( S ) = {1,3} - {3,2} = {1}
SELECT nota, COUNT(*) AS numero FROM notas GROUP BY nota ORDER BY nota DESC;
O atributo A não pode ser NULL.
A questão essencial (e que quase ninguém conseguiu ver) é que,
SELECT * FROM R WHERE A = Avai dar todos os tuplos de R excepto aqueles em que A é NULL (porque NULL=NULL não é verdadeiro, é UNKNOWN). Logo,
SELECT * FROM R EXCEPT SELECT * FROM R WHERE A = Avai dar os tuplos de R em que A é NULL. Como temos NOT EXISTS no ínicio da asserção, isso significa que R não pode ter tuplos em que A seja NULL.
(NOTA: havia uma gralha no enunciado da pergunta. Em vez de AS deveria ser CHECK).