First Normal Form (1NF) establece las reglas básicas para una base de datos organizada:
- Eliminar columnas duplicadas de la misma tabla.
- Cree tablas separadas para cada grupo de datos relacionados e identifique cada fila con una columna única (la clave principal).
¿Qué significan estas reglas al contemplar el diseño práctico de una base de datos? En realidad es bastante simple.
Eliminar la duplicación
La primera regla dicta que no debemos duplicar datos dentro de la misma fila de una tabla. Dentro de la comunidad de bases de datos, este concepto se conoce como la atomicidad de una tabla. Las tablas que cumplen con esta regla se dice que son atómicas. Exploremos este principio con un ejemplo clásico: una tabla dentro de una base de datos de recursos humanos que almacena la relación gerente-subordinado. Para los propósitos de nuestro ejemplo, impondremos la regla de negocios de que cada administrador puede tener uno o más subordinados, mientras que cada subordinado puede tener solo un administrador.
Intuitivamente, al crear una lista u hoja de cálculo para rastrear esta información, podríamos crear una tabla con los siguientes campos:
- Gerente
- Subordinado1
- Subordinado2
- Subordinado3
- Subordinado4
Sin embargo, recuerde la primera regla impuesta por 1NF: elimine columnas duplicadas de la misma tabla. Claramente, las columnas Subordinado1-Subordinado4 son duplicativas. Tómese un momento y reflexione sobre los problemas planteados por este escenario. Si un administrador solo tiene un subordinado, las columnas Subordinate2-Subordinate4 son simplemente espacio de almacenamiento desperdiciado (un producto de base de datos valioso). Además, imagine el caso en el que un gerente ya tiene 4 subordinados: ¿qué sucede si ella contrata a otro empleado? Toda la estructura de la tabla requeriría modificación.
En este punto, una segunda idea brillante suele darse a los novatos de la base de datos: no queremos tener más de una columna y queremos permitir una cantidad flexible de almacenamiento de datos. Probemos algo como esto:
- Gerente
- Subordinados
Y el campo Subordinados contendría múltiples entradas en la forma "Mary, Bill, Joe".
Esta solución está más cerca, pero también se queda corta. La columna de subordinados sigue siendo duplicativa y no atómica. ¿Qué sucede cuando necesitamos agregar o eliminar un subordinado? Necesitamos leer y escribir todo el contenido de la tabla. Eso no es un gran problema en esta situación, pero ¿y si un gerente tuviera cien empleados? Además, complica el proceso de selección de datos de la base de datos en consultas futuras.
Aquí hay una tabla que satisface la primera regla de 1NF:
- Gerente
- Subordinar
En este caso, cada subordinado tiene una sola entrada, pero los administradores pueden tener varias entradas.
Identificar la clave principal
Ahora, ¿qué pasa con la segunda regla? Identifique cada fila con una columna única o un conjunto de columnas (la clave principal). Puede mirar la tabla anterior y sugerir el uso de la columna subordinada como clave principal. De hecho, la columna subordinada es un buen candidato para una clave principal debido al hecho de que nuestras reglas comerciales especifican que cada subordinado puede tener solo un administrador. Sin embargo, los datos que hemos elegido almacenar en nuestra tabla hacen que esta sea una solución menos que ideal. ¿Qué pasa si contratamos a otro empleado llamado Jim? ¿Cómo almacenamos su relación gerente-subordinado en la base de datos?
Es mejor usar un identificador verdaderamente único (como una identificación de empleado) como clave principal. Nuestra mesa final se vería así:
- ID del gerente
- ID subordinada
Ahora, nuestra mesa está en primera forma normal! Más allá de esto, hay opciones para poner su base de datos en Segunda forma normal y Tercera forma normal si está entusiasmado con aún más organización.