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
- Usuario y su Perfil: Cada usuario tiene un perfil único, y cada perfil está vinculado únicamente a un usuario.
- Usuarios y Comentarios: Uno a Muchos, un usuario puede hacer varios comentarios, pero cada comentario pertenece a un solo usuario.
- 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
-
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.
-
Análisis de Uso: En sistemas donde es útil saber qué datos son consultados con mayor frecuencia o identificar patrones de acceso.
-
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 |