Cardinalidad en SAP: qué es, tipos y ejemplos

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ónSignificado
[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:

CardinalidadSignificado
1:1Uno a uno
1:NUno a muchos
N:1Muchos a uno
N:NMuchos 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.