Você está certo com as possíveis chaves candidatas, vikkyhacks. As chaves candidatas sobrepostas são chaves candidatas compostas (consistem em mais de um atributo) com pelo menos um atributo em comum. Portanto, suas chaves candidatas sobrepostas são NM e NO (elas compartilham N).
Explicação adicional do exposto acima, originalmente deixada nos comentários:
Todas as chaves candidatas sobrepostas são grupos de (por exemplo, duas ou mais) chaves candidatas. Isso significa que o primeiro critério é que sua relação R
deve ter mais de uma chave candidata (mínimas super chaves). Para que qualquer uma das chaves candidatas se sobreponha, cada uma delas (novamente duas ou mais) deve atender a algumas condições adicionais. 1) Ambos devem ser chaves candidatas compostas. Eles devem consistir em mais de um atributo; portanto, uma chave como A
nunca será sobreposta, mas AB
pode se sobrepor a outra chave. 2) As chaves compostas devem compartilhar um atributo. AB
sobrepõe com AC
e BD
mas não CD
ou EF
.
Para resumir: dois ou mais conjuntos de atributos em que 1) cada conjunto é uma chave candidata (superchave mínima) para a relação, 2) cada conjunto é uma chave composta (consiste em mais de um atributo) e 3) um ou mais de os atributos das chaves compostas se sobrepõem a um atributo de outra chave no conjunto. Portanto, você pode descartar MNOP
e NOPL
com base em que elas não são superchaves mínimas. Você pode descartar P
e L
com base em que elas não são chaves compostas (elas consistem em um atributo). Você fica com duas chaves NO
e NM
, que compartilham o atributo N
, para concluir.
Exemplo
Também pode ajudar a ter um exemplo que você realmente pode entender. A única vez que eu vi onde você terá chaves candidatas sobrepostas é quando você tem 1) dois atributos que determinam uma à outra (por exemplo, um relacionamento individual entre A
e B
onde A
tem um B
e B
tem um A
) e 2) esses atributos fazem parte das chaves candidatas compostas.
Por exemplo, em alguns sistemas, a Customer
possui um CreditCard
e a CreditCard
pertence a um Customer
. Na tabela Aluguel, você identifica exclusivamente um Rental
por EquipmentId
, Date
e CustomerId
. Por conveniência, você também armazenou CreditCard
nesta tabela.
Isso significa que os seguintes FDs são válidos:
{CustomerId, EquipmentId, Date} -> {CreditCard}
{CustomerId} -> {CreditCard}
Mas como a associação é individual, os seguintes DFs também são válidos:
{CreditCard} -> {CustomerId}
{CreditCard, EquipmentId, Date} -> {CustomerId}
Desde CustomerId
e CreditCard
pode ser usado alternadamente para identificar exclusivamente o seu cliente.
No cenário acima, você tem chaves candidatas sobrepostas:
{CreditCard, EquipmentId, Date}
{CustomerId, EquipmentId, Date}
Eles se sobrepõem porque são chaves compostas (consistem em mais de um atributo) e porque pelo menos um de seus atributos é compartilhado (nesse caso, eles compartilham ambos EquipmentId
e Date
.
Você disse que não se importa BCNF
no momento, mas, para trazer essa questão completamente para casa, o cenário acima é o motivo pelo qual você ocasionalmente verá uma tabela que está dentro, 3NF
mas não está BCNF
. A tabela acima está dentro 3NF
, mas não BCNF
.
3NF
permite DFs onde 1) o DF é trivial 2) o lado esquerdo do DF é uma chave candidata ou 3) o lado direito do DF é um atributo de chave (um atributo usado para fazer qualquer chave). Como CreditCard
e CustomerId
são os dois principais atributos, todos os DFs atendem a 2 ou 3.
BCNF
é muito semelhante, mas permite apenas as condições 1 e 2 permitidas por 3NF
. Como a 3ª condição não é permitida BCNF
, e ambas CID -> CC
e CC -> CID
usam a condição 3, essa tabela não é BCNF
, mas é 3NF
.
Para fins práticos, o caso é bastante raro e essa informação é pedante. A oferta de que sua mesa tem um problema será o fato de CreditCard/CustomerId
pares serem repetidos em sua mesa. Você também pode reconhecer que a tabela nem ficaria 2NF
sem essa rara condição em que o lado direito de um FD pode ser um atributo de chave porque CreditCard
é uma dependência parcial da chave primária (depende ou CustomerId
não .EquipmentId
Date
P
,L
,NO
, eNM
super-chave qualifica um como uma chave candidata somente se não tem qualquer subconjunto mínimo. Tomar o seu exemploMNOP
é super-chave porque o subconjunto mínimoP
em que pode derivar todos os outros atributos na relaçãoPara verificar se uma relação está tendo uma dependência de chave Candidate sobreposta:
Verifique se existe alguma dependência em que uma chave Candidato Completo está determinando uma chave Parte do Candidato. Então a dependência do OCK mantém
fonte