Saltar al contenido principal

Cómo diseñar una buena base de datos

Ahora que sabemos qué son las tablas y las relaciones, ¿cómo decidimos la manera de organizar la información? Esta sección enseña reglas prácticas para construir una base de datos bien estructurada.

Una BD enferma

Para entender el buen diseño, primero debemos ver cómo luce un mal diseño. Imagina que creas una tabla llamada CONTACTOS para guardar la información de las personas.

A simple vista, puede parecer buena idea guardar todo en el mismo lugar. Sin embargo, veamos lo que sucede cuando empezamos a llenarla con datos reales.

idnombre_completotelefono1telefono2telefono3correociudad_de_residencianombre_ciudad_pais
1Ana Gómez300123ana@mail.comMedellínMedellín, Colombia
2Juan Pérez310456320789juan@mail.comMedellínMedellín, Colombia
3Luz Silva301987311234luz@mail.comBogotáBogotá, Colombia
4Carlos Ruiz315654carlos@mail.comMedellínMedellín, Colombia
Problemas detectados
  • Problema 1: Datos repetidos (redundancia): "Medellín" aparece muchas veces. Si descubres que escribiste mal el nombre y debe ser "Medellín Centro", tendrías que actualizar cientos o miles de filas a mano.
  • Problema 2: Columnas vacías sin sentido: telefono2 y telefono3 están vacíos para la mayoría de las personas, desperdiciando espacio y generando desorden.
  • Problema 3: Un dato hace dos cosas: nombre_ciudad_pais guarda la ciudad y el país al mismo tiempo. Si alguien te pide buscar "solo los contactos de Colombia", será un dolor de cabeza.
  • Problema 4: Grupos repetidos: telefono1, telefono2 y telefono3 son exactamente el mismo tipo de información, solo que repetida como columnas diferentes.

Podemos visualizar los síntomas de una base de datos enferma con el siguiente diagnóstico:

Las reglas del buen diseño

Para evitar que tu base de datos se enferme, existen ciertas reglas prácticas de diseño. A continuación, te presentamos cuatro reglas esenciales para mantener tus datos organizados.

Regla 1: "Un dato, una sola vez"

Cada pieza de información debe vivir en exactamente UN lugar dentro de la base de datos. Si te encuentras repitiendo la misma información en múltiples filas, esos datos merecen su propia tabla.

Por ejemplo, si tienes el nombre de una ciudad repetido en cada contacto, es mejor crear una tabla separada para las ciudades.

Antes y Después
  • Antes: La tabla contacto tiene la columna ciudad_nombre repetida ("Medellín", "Medellín", "Medellín").
  • Después: Creas una tabla CIUDAD. El contacto ahora solo tiene un identificador id_ciudad.

Regla 2: "Cada columna guarda UNA sola cosa"

Una columna debe contener un pedazo de información indivisible. No debes mezclar diferentes tipos de datos en una sola celda.

Antes y Después
  • Antes: La columna nombre_ciudad_pais guarda el valor "Medellín, Colombia".
  • Después: Separas la información en dos columnas: ciudad y pais. O mejor aún, creas tablas separadas para ambos conceptos.

Regla 3: "No más columnas del mismo tipo"

Si tienes columnas como telefono1, telefono2, telefono3, estás rompiendo esta regla. Siempre que tengas un grupo de columnas que hacen lo mismo, debes crear una nueva tabla y vincularla.

Antes — La misma información repetida como columnas separadas:

idnombretelefono1telefono2telefono3
1Ana300123310456
2Juan315789

Después — Una tabla separada con una fila por cada número:

idid_personanumero
11300123
21310456
32315789
Ventaja

Si Ana consigue un cuarto teléfono, simplemente agregas una fila más. No tienes que modificar la estructura de la tabla ni tocar los datos de Juan.

Regla 4: "Cada columna depende de la llave, solo de la llave"

Cada columna de una tabla debe decirnos algo sobre la llave principal de esa tabla, y no sobre otras columnas. Toda la información debe describir directamente al sujeto principal de la tabla.

Antes y Después
  • Antes: En una tabla PEDIDO, tienes ciudad_de_envio, nombre_ciudad y codigo_postal_ciudad. Estos últimos datos describen a la ciudad, no al pedido.
  • Después: Dejas el identificador de la ciudad en el pedido, pero creas una tabla DIRECCION o CIUDAD para guardar sus detalles.

El proceso de mejorar una BD

Aplicar las reglas requiere un proceso metódico. Sigamos los pasos usando nuestra tabla CONTACTOS enferma como ejemplo real, así puedes ver la acción concreta en cada etapa.

1

Escribe todo en una tabla plana

Haz una lista de absolutamente toda la información que necesitas guardar, sin preocuparte por la organización. Ponla en una sola tabla gigante.

Aplicado al ejemplo: Tomamos la tabla CONTACTOS con todas sus columnas tal cual:

idnombre_completotelefono1telefono2telefono3correociudad_de_residencianombre_ciudad_pais
1Ana Gómez300123ana@MedellínMedellín, Colombia
2Juan Pérez310456320789juan@MedellínMedellín, Colombia

Esta es tu "tabla enferma" de partida. Es normal que se vea así al inicio.

2

Encuentra los datos que se repiten fila a fila

Busca columnas cuyo valor es el mismo en muchas filas. Eso indica que ese dato merece su propia tabla.

Aplicado al ejemplo: La columna ciudad_de_residencia tiene "Medellín" repetido en las filas 1, 2 y 4. Si tuviéramos 500 contactos de Medellín y la ciudad cambia de nombre, tendríamos 500 filas que actualizar a mano.

Acción: Crear una tabla CIUDAD separada y reemplazar el texto repetido por un id_ciudad.

idnombre_ciudad
1Medellín
2Bogotá
3

Divide las columnas que mezclan dos cosas

Busca columnas que guarden más de un concepto en una sola celda. Sepáralas.

Aplicado al ejemplo: La columna nombre_ciudad_pais guarda "Medellín, Colombia" — dos datos en uno. Si alguien pide filtrar por país, es imposible hacerlo limpiamente.

Acción: En la tabla CIUDAD que ya creamos, separamos en dos columnas distintas:

idnombre_ciudadnombre_pais
1MedellínColombia
2BogotáColombia

Ahora puedes filtrar por país, por ciudad, o por ambos sin problemas.

4

Elimina los grupos de columnas del mismo tipo

Si tienes telefono1, telefono2, telefono3... estás guardando el mismo tipo de dato en columnas repetidas. Crea una tabla separada con una fila por cada valor.

Aplicado al ejemplo: En lugar de 3 columnas de teléfono, creamos la tabla TELEFONO:

idid_personanumero
11300123
22310456
32320789

Ahora Juan puede tener 10 teléfonos y nunca nos faltará espacio. Solo agregas filas, no columnas.

5

Verifica que cada columna describa solo su tabla

Lee cada columna y pregúntate: "¿Este dato describe a la entidad principal o en realidad describe a otra cosa?". Si la respuesta es "otra cosa", muévelo.

Aplicado al ejemplo: Revisamos la tabla PERSONA. ¿La columna nombre_completo describe a la persona? Sí. ¿El correo describe a la persona? Sí. ¿El nombre_ciudad_pais describe a la persona o a la ciudad? A la ciudad — ya lo movimos en el Paso 3.

Acción: Separar nombre_completo en nombre y apellido para mayor flexibilidad:

idnombreapellidocorreoid_ciudad
1AnaGómezana@mail.com1
2JuanPérezjuan@mail.com1
6

Dibuja el diagrama final

Con todas las tablas depuradas, construye el diagrama ER para visualizar cómo quedaron conectadas. Este es el diseño que vas a implementar en código.

Aplicado al ejemplo: El resultado final de rediseñar CONTACTOS es:

Pasamos de una tabla caótica con 8 columnas a tres tablas limpias, sin datos repetidos y sin columnas vacías.

Pon a prueba tus conocimientos

Cargando cuestionario...