Cuando empiezas a trabajar con asociaciones entre entidades, ya sea en CDS Views, en SEGW (Gateway Service Builder) o simplemente modelando relaciones entre tablas, te encuentras con este concepto de la cardinalidad
Y es normal que al principio cueste entenderlo. No es técnicamente complejo, pero requiere pensar en términos de conjuntos y relaciones, no en registros individuales.
¿Qué es la cardinalidad?
La cardinalidad es el número de registros que se pueden relacionar entre dos entidades.
Dicho de otra forma: cuando tienes dos tablas (o entidades) que se relacionan, la cardinalidad te dice cuántos registros de la entidad A pueden estar relacionados con cuántos registros de la entidad B.
Notación estándar
La cardinalidad se representa con dos números: mínimo y máximo.
| Notación | Significado |
|---|---|
[1..1] | Exactamente uno (obligatorio) |
[0..1] | Cero o uno (opcional) |
[1..*] | Uno o muchos (al menos uno) |
[0..*] | Cero o muchos (opcional, puede no tener ninguno) |
En la práctica, se suele simplificar a:
| Cardinalidad | Significado |
|---|---|
| 1:1 | Uno a uno |
| 1:N | Uno a muchos |
| N:1 | Muchos a uno |
| N:N | Muchos a muchos |
Los 4 tipos de cardinalidad
Uno a uno (1:1)
Un registro de la entidad A se relaciona con como máximo un registro de la entidad B, y viceversa.
Ejemplo real: Persona ↔ Pasaporte. Una persona tiene un solo pasaporte. Un pasaporte pertenece a una sola persona.
association [1..1] to Z_I_Passport as _Passport on $projection.PersonId = _Passport.PersonId
Uno a muchos (1:N)
Un registro de la entidad A se puede relacionar con muchos registros de la entidad B, pero un registro de B solo se relaciona con un registro de A.
Ejemplo real: Cliente ↔ Pedidos. Un cliente puede tener muchos pedidos. Un pedido pertenece a un solo cliente.
association [1..*] to Z_I_Order as _Orders on $projection.CustomerId = _Orders.CustomerId
Muchos a uno (N:1)
Es el inverso de la relación 1:N. Muchos registros de A se relacionan con un registro de B.
Ejemplo real: Pedidos ↔ Cliente. Muchos pedidos apuntan al mismo cliente. Es la misma relación que 1:N, solo que vista desde el otro lado.
association [*..1] to Z_I_Customer as _Customer on $projection.CustomerId = _Customer.CustomerId
Muchos a muchos (N:N)
Un registro de A se puede relacionar con muchos registros de B, y un registro de B se puede relacionar con muchos registros de A.
Ejemplo real: Estudiantes ↔ Cursos. Un estudiante puede estar en varios cursos. Un curso puede tener varios estudiantes.
En CDS Views: La relación N:N no es directa. Se implementa con dos asociaciones 1:N:
define view Z_I_Student as select from student
association [1..*] to Z_I_Student_Course as _SC on $projection.StudentId = _SC.StudentId
{
key StudentId,
_SC
}
// Luego desde _SC navegas a Course con otra asociación 1:1
La cardinalidad es un concepto fundamental en el modelado de datos, las asociaciones en CDS Views y las navegaciones en SEGW. Entenderla bien te permite:
- Diseñar modelos de datos correctos desde el principio
- Crear asociaciones eficientes en CDS Views
- Configurar navegaciones lógicas en servicios OData con SEGW
- Evitar errores de datos por malentender las relaciones
No es un concepto difícil, solo requiere pensar en conjuntos y direcciones. Una vez que lo interiorices, te resultará natural.




