Tienes razón en el dinero con las posibles claves candidatas, vikkyhacks. Las claves candidatas superpuestas son claves candidatas compuestas (consisten en más de un atributo) con al menos un atributo en común. Por lo tanto, sus claves candidatas superpuestas son NM y NO (comparten N).
Explicación adicional de lo anterior, originalmente dejado en comentarios:
Todas las claves candidatas superpuestas son grupos de (por ejemplo, dos o más) claves candidatas. Eso significa que el primer criterio es que su relación R
debe tener más de una clave candidata (superclaves mínimas). Para que cualquiera de las claves candidatas se superponga, cada una de ellas (nuevamente dos o más) debe cumplir algunas condiciones adicionales. 1) Ambos deben ser claves candidatas compuestas. Deben constar de más de un atributo, por lo que una clave como A
nunca se superpondrá, pero AB
podría superponerse con otra clave. 2) Las claves compuestas deben compartir un atributo. AB
se superpone con AC
y BD
pero no CD
o EF
.
Para resumir: dos o más conjuntos de atributos donde 1) cada conjunto es una clave candidata (superclave mínima) para la relación, 2) cada conjunto es una clave compuesta (consta de más de un atributo) y 3) uno o más de los atributos de las claves compuestas se superponen con un atributo de otra clave en el conjunto. Por lo tanto, puede descartar MNOP
y NOPL
sobre la base de que no son superclaves mínimas. Puede descartar P
y L
sobre la base de que no son claves compuestas (consisten en un atributo). Te quedan dos teclas NO
y NM
, que comparten el atributo N
, por lo que has terminado.
Ejemplo
También puede ser útil tener un ejemplo en el que realmente puedas entender. La única vez que he visto dónde se superpondrán claves candidatas es cuando tiene 1) dos atributos que se determinan funcionalmente entre sí (por ejemplo, una relación uno a uno entre A
y B
donde A
tiene uno B
y B
tiene uno A
) y 2) estos los atributos son parte de las claves candidatas compuestas.
Por ejemplo, en algún sistema, a Customer
tiene uno CreditCard
y a CreditCard
pertenece a uno Customer
. En la tabla Alquileres, identifica de forma exclusiva a Rental
por EquipmentId
, Date
y CustomerId
. Para mayor comodidad, también ha almacenado CreditCard
en esta tabla.
Esto significa que se mantienen los siguientes FD:
{CustomerId, EquipmentId, Date} -> {CreditCard}
{CustomerId} -> {CreditCard}
Pero como la asociación es uno a uno, también se mantienen los siguientes DF:
{CreditCard} -> {CustomerId}
{CreditCard, EquipmentId, Date} -> {CustomerId}
Dado CustomerId
y CreditCard
puede ser utilizado indistintamente para identificar de forma única a su cliente.
En el escenario anterior, tiene claves candidatas superpuestas:
{CreditCard, EquipmentId, Date}
{CustomerId, EquipmentId, Date}
Se superponen porque son claves compuestas (consisten en más de un atributo) y porque al menos uno de sus atributos es compartido (en este caso, comparten ambos EquipmentId
y Date
.
Dijiste que no te importa BCNF
en este momento, pero para llevar esto completamente a casa, el escenario anterior es la razón por la cual ocasionalmente verás una mesa que está dentro 3NF
pero no BCNF
. La tabla de arriba está adentro 3NF
, pero no BCNF
.
3NF
permite FDs donde 1) el FD es trivial 2) el lado izquierdo del FD es una clave candidata o 3) el lado derecho del FD es un atributo clave (un atributo utilizado para hacer cualquier clave). Puesto que CreditCard
y CustomerId
son los dos atributos clave, todos FDs alcanzan 2 o 3.
BCNF
es muy similar, pero solo permite las condiciones 1 y 2 permitidas por 3NF
. Como la tercera condición no está permitida por BCNF
, y ambas CID -> CC
y CC -> CID
usan la condición 3, esta tabla no lo es BCNF
, pero lo es 3NF
.
Para fines prácticos, el caso es bastante raro y esta información es pedante. El obsequio de que su mesa tiene un problema será el hecho de que los CreditCard/CustomerId
pares se repiten en toda su mesa. También puede reconocer que la tabla ni siquiera estaría 2NF
sin esta rara condición en la que el lado derecho de un FD puede ser un atributo clave porque CreditCard
es una dependencia parcial de la clave primaria (depende de CustomerId
pero no EquipmentId
o Date
.
P
,L
,NO
, yNM
A califica súper como una tecla candidato sólo si no tiene un subconjunto mínimo. Tomar su ejemploMNOP
es súper clave porque el subconjunto mínimoP
en él puede derivar todos los demás atributos de la relación