Redundancias

Error: Mantener datos redundantes en múltiples tablas.

Es importante eliminar redundancias para evitar inconsistencias, ya que un dato duplicado debe actualizarse en varios lugares. Además, esto desperdicia espacio de almacenamiento.


Clave Primaria Inadecuada

Error: Usar campos no únicos, como nombres o direcciones de correo, como claves primarias.

Las claves primarias deben ser de preferencia un valor numérico, como un campo ID o un UUID en casos específicos.


Falta de Restricciones de Integridad

Error: No definir restricciones en las columnas, como NOT NULL, UNIQUE, o valores predeterminados.

Hay que aplicar restricciones según los requisitos del diseño para limitar los valores posibles y garantizar la integridad de los datos.


Diseño Sin Planificación de Crecimiento

Se debe considerar que la base de datos podría ampliarse en el futuro; esto significa que la estructura debe estar lista para más usuarios, datos o funciones.


Inconsistencias en las Relaciones

Relación Uno a Uno (1:1)

  • Ejemplo: Cada persona tiene un único número de seguro social, y cada número de seguro social pertenece solo a una persona.

Relación Uno a Muchos

  • Ejemplo: Un profesor puede impartir varios cursos (uno a muchos), pero cada curso solo tiene un profesor asignado.

Relación Muchos a Muchos

  • Ejemplo: Un estudiante puede inscribirse en varios cursos y cada curso puede tener múltiples estudiantes inscritos.

Ejemplo Red social

  1. Usuario y su Perfil: Cada usuario tiene un perfil único, y cada perfil está vinculado únicamente a un usuario.
  2. Usuarios y Comentarios: Uno a Muchos, un usuario puede hacer varios comentarios, pero cada comentario pertenece a un solo usuario.
  3. Amistades de los Usuarios: Muchos a Muchos, los usuarios pueden ser amigos entre sí en una relación bidireccional.

Tablas inecesarias

Crear una tabla solo debe hacerse cuando la entidad es única, independiente y no se puede obtener de otra manera.

¿Cuándo no es necesario crear una tabla?
Si la información que necesitan es una combinación de datos de varias tablas, no es necesario hacer una tabla nueva. Esto se puede resolver mediante consultas.

Es probable que te refieras a consultas y no a tablas si mencionas elementos como:

  • Inventarios.
  • Reportes.
  • Estadísticas.

¿Por qué? Las tablas se usan para almacenar datos específicos, como la lista de productos, clientes o ventas. En cambio, los inventarios, reportes y estadísticas son resultados que obtenemos al consultar, combinar y analizar los datos que ya tenemos en esas tablas.

Por ejemplo:

  • Inventario es una consulta sobre los productos disponibles en una tabla de productos, donde puedes ver cuántos quedan en existencia.
  • Reportes suelen combinar datos de varias tablas (como ventas y clientes) para mostrar información detallada de cada mes o año.
  • Estadísticas implican cálculos (como promedios o totales) y no son datos fijos que guardes en una tabla, sino resultados de consultas que puedes generar en cualquier momento.

Ejemplo Red social

Usuarios que cumplen años este mes: en una red social, no necesitan una tabla de "Cumpleaños en el mes", sino una consulta que busque en la tabla de usuarios y compare las fechas de nacimiento con el mes actual.


Log

  1. Auditoría de Acceso: Si necesitan saber quién accedió a cierta información y cuándo lo hizo, pueden usar una tabla de logs para almacenar estos datos.

  2. Análisis de Uso: En sistemas donde es útil saber qué datos son consultados con mayor frecuencia o identificar patrones de acceso.

  3. Seguridad y Cumplimiento: En algunas organizaciones, es necesario llevar un registro de acceso a datos sensibles para cumplir con normativas de seguridad.


Tipos de datos

Tipo de Dato en MySQL Equivalente en Access Ejemplo de Atributo
INT Long Integer id_usuario
VARCHAR(255) Text nombre_cliente
TEXT Memo descripcion_producto
DATE Date/Time fecha_nacimiento
DATETIME Date/Time fecha_creacion
FLOAT Single porcentaje_descuento
DOUBLE Double precio_producto
DECIMAL(10,2) Currency monto_total
BOOLEAN Yes/No activo
CHAR(10) Text (Fixed Width) codigo_pais
TINYINT Byte nivel_acceso
SMALLINT Integer cantidad_item
ENUM('M','F') Text genero
BLOB OLE Object imagen_producto