Algunas relaciones de tus datos son composiciones: la cosa referenciada solo tiene sentido en el contexto de su padre y desaparece con él. Un pedido tiene líneas; una encuesta tiene preguntas; una factura tiene filas de desglose de impuestos. Yellow lo modela con referencias propietarias — una restricción de referencia de instancia marcada con Owned = true.

Este tutorial construye una composición Order + OrderLine de principio a fin.

1. Los dos modelos

Crea dos modelos en tu schema:

OrderLine — representa una línea de un pedido.

  • product — Referencia a una instancia de Product (referencia normal; los productos existen independientemente).
  • quantity — Integer, obligatorio.
  • unitPrice — Decimal, obligatorio.
  • lineTotal — Decimal, virtual (quantity * unitPrice).

Order — el padre.

  • number — String, propiedad principal.
  • customer — Referencia a una instancia de Customer.
  • lines — Colección de referencias a OrderLine.
  • total — Decimal, virtual (suma de lines.lineTotal).
  • createdOn — DateTime.

2. Marca la colección de líneas como propietaria

En Order.lines, añade una restricción de colección con:

  • Item type = INSTANCE_REFERENCE
  • Target model = OrderLine

Luego añade una restricción de referencia de instancia al elemento de la colección, con:

  • Target model = OrderLine
  • Owned = true

El indicador Owned cambia cómo Yellow trata la relación:

  • Al crear un Order con instancias nuevas de OrderLine, las guarda en el mismo lote — las líneas no existen antes que su padre.
  • Al editar el pedido puedes añadir, quitar o reordenar líneas en la misma pantalla.
  • Al borrar el pedido se hace soft-delete de todas las líneas que posee. Borrar una referencia no propietaria dejaría el objetivo intacto.

3. Comportamiento del formulario

Abre el modelo Order y crea un pedido nuevo. La colección lines muestra un botón incrustado + Añadir línea en lugar de un desplegable — como las líneas son propietarias, el editor sabe que debe crearlas in situ en lugar de elegirlas de las existentes.

Añadir una línea abre el formulario de OrderLine en línea. Rellénala, guarda el padre, y tanto el pedido como sus líneas se guardan juntos.

4. Auditoría e historial

Las referencias propietarias consolidan la traza de auditoría: ver el historial de un pedido muestra las líneas que había activas en ese momento. Restaurar una versión anterior del pedido restaura también sus líneas.

Cuándo usar propietaria vs referencia normal

Hazla propietaria cuando… Hazla referencia normal cuando…
El hijo no tiene sentido sin el padre (líneas de pedido, filas de desglose). El objetivo existe independientemente (un cliente, un producto).
Borrar el padre debe eliminar el hijo. El mismo objetivo lo reutilizan muchos padres.
El usuario espera gestionar ambos a la vez en un solo formulario. El usuario elige el objetivo de una lista existente.

5. Por contraste, una referencia no propietaria

Order.customer es una referencia normal — los clientes se comparten entre pedidos. El formulario muestra un desplegable de clientes existentes. Borrar un pedido deja al cliente tranquilo.

Las dos relaciones están en el mismo modelo a propósito: los pedidos poseen sus líneas, pero referencian a los clientes.

Relacionados