-
Vejamos as dependências funcionais:
A → B
A → C
A → D
B → A
Concluímos que os determinantes são A e B, e a questão menciona "mantém a normalização do esquema"( Uma normalização usual - 3 FN-), sendo assim:
"um esquema de relação R está na 3FN se para cada dependência funcional X → A, X é uma superchave de R ou A é um atributo primário de R"
Em palavras não técnicas: A ou B devem ser primary key ou unique e ambas not null. Sabendo disto vamos as alternativas:
a) Incorreta, atributo b deveria ser unique e not null, se fosse primary key iriamos ferir a 2ª FN;
b) Correta, observe: atributo a é not null e PK; b é not null e unique;
Ou seja, B poderia ser uma superchave da relação T, porém não foi escolhida. Atributos C e D podem ser null, pois não irá interferir nas dependências funcionais apresentadas;
c) Incorreta, T1 e T2 estão erradas,
em T1 falta o atributo B, para satisfazer a dependência funcional(A → B )
em T2 falta o atributo A, para satisfazer a dependência funcional ( B → A).
Adendo, observe que as tabelas não estão relacionadas, ao meu ver, isto não apresenta um erro, se as dependências funcionais estivem sido cumpridas estaria tudo ok. Claro que ao meu ver!! Se alguém souber que para cumprir a dependência elas devam estar relacionadas, por favor, me mandem mensagem!
d) Incorreta, pelo mesmo motiva da alternativa C:
em T1, falta o atributo B, para satisfazer a dependência funcional(A → B )
em T2, o atributo B, deveria ser not nul e unique, para estarmos na 3º FN.
e) Incorreta,
em T1 o atributo b deveria ser not null e unique, para satisfazer a 3º FN;
T2 está correta
Obs.: Alguém pode estar se perguntando: WTF! Char como chave primária? Usar 'texto' como chave primária?
Podemos sim usar char para ser um Primary Key, entretanto NÃO É NADA USUAL! pois trocar um maiúsculo para um minusculo iria causar um estrago gigantesco no banco de dados, porém na hora da prova, podemos sim ter atributos char como PK!
-
Ao analisar a questão, após a explicação do Luiz Ortiz - Max Q, cheguei ao seguinte bizu:
Questão A - Utiliza os atributos A,B, C e D. O atributo a not null primary key, mas o atributo b, não está especificado e pode receber valores nulos, conforme a explicação do Max Q;
Questão B - Certa;
Questão C - Criou duas tabelas, mas elas não se relacionam;
Questão D - Criou 2 tabelas, elas não se relacionam e o atributo b da segunda tabela, não está especificado; e
Questão E - Criou 2 tabelas, elas não se relacionam e o atributo b das duas tabelas não estão especificados.
-
Em primeiro lugar, é preciso entender o que é decomposição sem perda.
Uma decomposição é sem perdas se for sempre possível reconstruir a instância da tabela original efetuando a junção das instâncias correspondentes das tabelas decompostas.
Qual o objetivo da normalização?
Evitar anomalias atualização (inserção, deleção e alteração).
Como?
Decompondo uma tabelão em pequenas tabelas.
Quais as regras para fazer isso?
Por meio da normalização.
1a Forma Normal:
Uma tabela não pode conter atributos compostos ou multivalorados.
(única forma normal que não se baseia em dependências funcionais)
O que é uma dependência funcional?
Nada mais é do que quando um atributo (coluna) determina o valor de outra.
Ou seja, X -> Y (X determina funcionalmente Y) quando, sempre que o X aparece, o Y também aparece.
2a Forma Normal:
Não pode haver dependência parcial da chave.
Somente ocorre em tabelas com chave primária composta, quando os atributos não chave são determinados por somente parte da chave. Ou seja, há um atributo na chave composta que é desnecessário para determinação dos outros atributos.
3a Forma Normal:
Não pode haver dependências transitivas.
Dependência funcional transitiva.
Ocorre quando existe um atributo não chave que determina outro atributo não chave.
3.5 Forma Normal (Boyce-Codd)
Não pode haver determinante que não determine todos os atributos.
Todo determinante precisa ser chave candidata.
Quando um conjunto de atributos de uma relação determinar um outro atributo, devem também determinar todos os outro atributos.
Analisando as alternativas:
a) create table T( a char(8) not null primary key,
b int, c int, d int)
- Atende 1FN, Atende 2FN, Atende 3FN, porém não tende 3.5FN.
- Perceba que para atender a 3.5FN, o atributo b deveria ser unique e not null.
b) create table T( a char(8) not null primary key,
b int not null unique, c int, d int)
- Atende 1FN, Atende 2FN, Atende 3FN e atende 3.5FN.
- Alternativa correta.
c) create table T1( a char(8) not null primary key,
c int, d int)
create table T2( b int not null primary key,
c int, d int)
- Aqui temos violações do enunciado e decomposição com perda. B não determina C, tampouco D.
- Há decomposição com perda pelo fato de na tabela T1 não existir referência a B.
d) create table T1( a char(8) not null primary key,
c int, d int)
create table T2( a char(8) not null primary key,
b int)
- Aqui temos a criação redundante de duas tabelas e que não resolve o problema inicial (para que duas tabelas se a mesma semântica poderia ser realizada em uma só?). Além disso, em T2, b continua determinando a, porém a DDL não corresponde à essa semântica (unique e not null).
e) create table T1( a char(8) not null primary key,
b int, c int, d int)
create table T2( a char(8) not null primary key,
b int not null unique)
- Mesmo problema da alternativa d) (redundância de tabelas), porém a T2 atende às regras de normalização até 3.5FN.