Identidad, tipos y dominio de valores
¿Cómo sabe un sistema que «Ana López» que hoy cambia de correo electrónico sigue siendo la misma clienta del mes pasado, y no una persona nueva? Para que los datos representen la realidad sin confundir entidades ni aceptar valores absurdos, necesitamos definir tres propiedades lógicas: identidad, tipos de datos y dominio de valores.
Objetivos y conocimientos previos
Partiendo de Datos, información y representación, aprenderás a distinguir la identidad de una entidad de sus atributos descriptivos, a elegir tipos de datos conceptuales adecuados (incluidos códigos y enumeraciones) y a declarar restricciones de dominio que protejan la integridad del sistema.
Identidad frente a atributos descriptivos
Dos personas distintas pueden llamarse «Juan Pérez». Además, una misma persona puede cambiar su dirección, su teléfono o incluso su nombre legal a lo largo del tiempo.
Si un sistema utiliza el nombre o el correo como única referencia para unir a un cliente con sus facturas:
- Cuando dos clientes coincidan en nombre, sus facturas se mezclarán.
- Cuando un cliente cambie su correo, parecerá que sus facturas antiguas pertenecen a otra persona.
Por eso distinguimos:
- Identificador (Clave de identidad): un valor único e inmutable dentro del sistema que señala a una entidad concreta (
id_cliente: C-00104o un identificador único universal). Su única función es distinguir esa entidad de cualquier otra, aunque todos sus demás datos cambien. - Atributos descriptivos: características de la entidad (
nombre,ciudad,correo,telefono). Pueden coincidir entre distintos registros o modificarse según las reglas del negocio sin que la entidad deje de ser la misma. - Identificadores externos o de negocio: documentos oficiales (
DNI,NIF), números de serie o códigos de factura legibles. Aunque en el mundo real buscan ser únicos, pueden contener errores de carga inicial o formatos distintos según el país; el modelo debe decidir explícitamente si admiten corrección sin romper la identidad interna del registro.
Tipos de datos conceptuales
Un tipo de dato define la naturaleza lógica de un atributo y qué operaciones tienen sentido sobre él. Más allá de cómo los llame cada lenguaje de programación, al modelar un sistema debes distinguir:
| Tipo conceptual | Qué representa | Operaciones con sentido | Error habitual al modelar |
|---|---|---|---|
| Texto (Cadena) | Nombres, descripciones, identificadores alfanuméricos ("Rosario", "C-104"). | Comparar igualdad, buscar subcadenas, mostrar. | Guardar como número un código postal (08001) o teléfono: si se trata como número entero, pierde el cero inicial (8001) y no tiene sentido sumarlo ni promediarlo. |
| Cantidad entera | Conteos discretos e indivisibles (plazas_ocupadas: 9, unidades: 3). | Sumar, restar, comparar orden. | Usar números con decimales para contar cosas que no admiten fracciones (como personas reservadas). |
| Magnitud exacta (Moneda / Decimal fijo) | Importes económicos o medidas que exigen precisión exacta (1250 céntimos o decimal exacto 12.50). | Sumar, aplicar recargos o descuentos con reglas de redondeo definidas. | Usar números en coma flotante binaria estándar para dinero, lo que introduce errores de redondeo acumulados (como 0.1 + 0.2 = 0.30000000000000004). |
| Lógico (Booleano) | Una proposición bivalente (pagado: verdadero / falso). | Evaluar condiciones (Y, O, NO). | Usar un booleano cuando en realidad existen más de dos estados (por ejemplo, una factura puede estar pendiente, pagada, vencida o anulada). |
| Instante o Fecha | Momentos en el calendario o en el tiempo (fecha_emision: 2026-10-24). | Comparar qué ocurrió antes o después, calcular plazos. | Guardar fechas como texto sin formato canónico ("24/10/26" mezclado con "10-24-2026") o ignorar la zona horaria en reservas con hora límite. |
Códigos y conjuntos cerrados (Enumeraciones)
Cuando un atributo solo admite un conjunto predefinido de opciones —como el estado de una reserva o el tipo de comprobante—, permitir texto libre provoca inconsistencias inmediatas: distintos usuarios o procesos escribirán "Activa", "activa", "ACT", "Vigente" o "Confirmada" para referirse a lo mismo.
Un código o enumeración restringe el atributo a una lista cerrada y estandarizada de valores simbólicos:
| Código almacenado | Significado acordado en el dominio |
|---|---|
PEND | Factura emitida pendiente de cobro. |
PAG | Factura cobrada íntegramente. |
ANUL | Factura anulada; no computa como deuda ni como ingreso. |
Usar códigos uniformes evita que una consulta o un informe deje registros fuera por diferencias de escritura o de idioma en la interfaz.
Dominio de valores e invariantes de atributo
El tipo de dato no basta por sí solo. Que importe sea un número entero en céntimos impide guardar la palabra "hola", pero todavía permitiría guardar -50000 o 0.
El dominio de valores añade las restricciones específicas del problema sobre ese tipo:
capacidad_actividad: número entero mayor que0y menor o igual al límite físico de la sala.importe_factura_centimos: número entero estrictamente mayor que0.estado_reserva: únicamente uno de los valores{ACTIVA, CANCELADA}.fecha_vencimiento: fecha igual o posterior afecha_emision.
Estas reglas son invariantes de datos: el sistema debe rechazar cualquier entrada o modificación que intente violarlas, venga de un formulario humano, de un archivo importado o de un agente de IA.
Practica
Un agente ha generado el siguiente diseño para la tabla de Facturas:
| Campo propuesto por el agente | Tipo propuesto | Ejemplo que guarda |
|---|---|---|
nombre_cliente | Texto | "Ana López" |
telefono_cliente | Número entero | 34600123456 |
importe | Número decimal en coma flotante | 19.99 |
pagada | Texto libre | "Si" / "No" / "Pendiente de revisión" |
fecha | Texto libre | "Viernes 24" |
- Señala qué problema de identidad tiene este diseño tanto para la factura en sí como para el cliente.
- Corrige el tipo conceptual de cada campo y explica por qué el tipo elegido por el agente para
telefono_cliente,importe,pagadayfechacausará fallos. - Define el dominio de valores (qué valores concretos son válidos e inválidos) para el importe y para el estado de la factura.
Criterio de comprensión: debes añadir un identificador único para la factura y una referencia al identificador único del cliente (no solo su nombre), sustituir el texto libre del estado por un conjunto cerrado de valores, exigir representación exacta para el dinero y formato temporal válido para la fecha.
Profundiza con IA
Aquí tienes mi revisión del esquema de
Facturas: [tu respuesta]. Actúa como un revisor de diseño de datos: intenta introducir tres registros tramposos que cumplan mis tipos pero violen la lógica de un sistema de facturación real. Pídeme que ajuste mis restricciones de dominio para bloquear esos casos sin darme la respuesta hecha.
Siguiente lectura
Ya sabemos cómo definir los atributos y la identidad de un registro individual. ¿Cómo se conectan las facturas con los clientes y las categorías sin duplicar datos? Continúa con Estructuras y relaciones: maestros, movimientos y parámetros.