Según tengo entendido, la tercera forma normal (3NF) básicamente significa que debe haber exactamente una clave.
No. 2NF, 3NF y Boyce Codd Normal Form (BCNF) se ocupan de dependencias funcionales . Una tabla en 2NF significa que no hay dependencias parciales de claves en las que una columna sin clave depende de algún subconjunto adecuado de una clave de varias columnas. Las tablas como la de nuestro ejemplo ya están en 2NF ya que cada clave candidata es una sola columna. Una tabla en 3NF significa que cada columna no clave es también no funcionalmente dependiente de alguna otra columna no clave, y creando así una dependencia transitiva. No importa si hay una o cien claves candidatas. En realidad, es BCNF, no 3NF, que es la forma normal "final" con respecto a las dependencias funcionales. Esto se debe a que una tabla puede estar en 3NF pero no estar en BCNF ya que podría haber múltiples claves candidatas que se superponen. Por lo tanto, cuando usamos el término 3NF para significar "totalmente normalizado" con respecto a las dependencias funcionales, lo que realmente queremos decir es BCNF.
Si una tabla con, por ejemplo, una columna de identificación de incremento automático también tiene una columna que se sabe que es única y no nula, por ejemplo, el número de seguro social, esta otra columna podría usarse como clave.
¡No solo podría serlo, debe serlo si queremos asegurarnos de que los datos almacenados en la base de datos permanezcan consistentes con las reglas que hemos identificado en el mundo real!
Ignorando problemas prácticos / comerciales (por ejemplo, riesgo de seguridad / privacidad al pasar SSN como clave / FK), desde un aspecto estrictamente de diseño de esquema, ¿tal tabla no estaría en 3NF porque efectivamente hay 2 claves?
Como se explicó anteriormente, si la tabla está o no en 3NF (o más importante, BCNF) es ortogonal a la cantidad de claves candidatas que contiene.
¿La respuesta variará sobre si había una clave única en la otra columna? Si es así, ¿por qué?
No, simplemente porque determinar si la tabla está o no en 3NF no tiene nada que ver con cuántas claves candidatas tiene. En cambio, tiene todo que ver con garantizar que todas las columnas sin clave dependan completamente de las claves candidatas.
Pero esto hace que aparezca un punto interesante. Tenga en cuenta que una clave única cuando se define como una restricción en un DBMS no es lo mismo que un identificador único definido como una regla de negocio en un modelo de negocio conceptual. Quizás en nuestro mundo siempre conocemos el SSN de la persona y, por lo tanto, sirve como clave candidata para una persona, y quizás también introducimos una clave sustituta en el esquema lógico que llamamos Id . De persona . Nuestro modelo de negocio incluye la regla que establece que el SSN es un identificador único para una persona en nuestro mundo. Esto implica una dependencia funcionalde todos los atributos descriptivos en este atributo de identidad. Esta regla no cambia solo porque olvidamos o decidimos no informar al DBMS. Esta es precisamente la razón por la cual es vital declarar la restricción, para que el DBMS pueda garantizar que los datos almacenados sean consistentes con las reglas del modelo de negocio. Si no creamos esa restricción única en el SSN, ahora podemos crear inadvertidamente más de una fila para la misma persona con el mismo SSN; ¡cada fila tiene una identificación de persona diferente!
Una excelente introducción sobre estos temas es la Serie práctica de la base de datos práctica de Fabian Pascal y la Teoría relacional y de diseño de bases de datos de Chris Date , de donde se deriva esta respuesta. Si bien cada documento de Fabian es una lectura obligada, el documento n. ° 1 (que define claramente la diferencia entre los niveles conceptual, lógico y físico) y el documento n. ° 4 (que define claramente los diversos tipos de claves) abordan específicamente esta pregunta. Del mismo modo, el libro completo de Chris es una lectura obligada, mientras que la Parte II es la sección dedicada a la normalización con respecto a la dependencia funcional.