One-to-many or many-to-many schema relationships in AEP | Community
Skip to main content
Level 2
January 21, 2026
Question

One-to-many or many-to-many schema relationships in AEP

  • January 21, 2026
  • 3 replies
  • 37 views

According to the official documentation, for B2C implementations, the Schema Editor UI only allows configuring one-to-one relationships between schemas:

Define a Relationship Between Two Schemas Using the Schema Editor | Adobe Experience Platform

I would like to clarify the following:

  • Is it possible to define one-to-many or many-to-many relationships between XDM schemas using the Schema Registry API?

  • If this is not supported (neither via UI nor API), what is the recommended modeling approach in AEP to represent these relationships?

    • Denormalization into the primary schema?

    • Use of lookup datasets?

    • Use of ExperienceEvent schemas with references?

  • Are there any limitations or implications for Real-Time Customer Profile or segmentation when modeling these types of relationships?

Any guidance or best practices for handling one-to-many or many-to-many relationships in B2C AEP implementations would be greatly appreciated.

Thanks in advance.

3 replies

Level 2
January 21, 2026

@OmarGo2  It ultimately depends on the nature of the data and how it needs to be activated in AEP.


In one of our projects, we had a one-to-many relationship, where a single user could be associated with multiple programs or brands.

Since AEP does not support true one-to-many relationships at the profile schema level for B2C implementations,

Program/Brand level attributes—such as email and SMS consent were modeled—within an ExperienceEvent schema.
While this approach worked structurally, it introduced several challenges.

Experience event Challenge:

Consent Policy AJO: Because the consent information was stored at the ExperienceEvent level, it could not be directly evaluated in consent policies in AJO (it only needs profile attributes).

Audience Issue: Because multiple consent event existed for single profile, audience segmentation could not give the most latest consent value. (There are work arounds to store certain important fields at profile level using derived attribute).

Look up Challenges:

Consent Policy:
Lookup attributes cannot be referenced or evaluated in consent policies, limiting their usefulness for governance use cases.

Real Time use case:
Lookup fields do not support real-time use cases in AEP.It cannot be used to build real-time audiences. This makes lookup schemas unsuitable for any scenario that requires immediate audience qualification or real-time personalization.  

 

Level 2
February 6, 2026

Hi,

1:M and M:M relationship is not supported for B2C either by UI or API. 

as workaround you can try by defining Array at profile fields. 

Devyendar
Level 6
February 10, 2026

@OmarGo2 

In B2C AEP/RTCDP,  the UI/API only lets you define a one-to-one relationship descriptor between schemas. However, the source relationship field can be a string array, meaning a single profile/event record can reference multiple destination entities, which effectively enables one-to-many style traversal in multi-entity segmentation.

The working “1:M-style traversal” pattern looks like this,

A) Source (Profile or Event)

  • customerId = primary identity (person)

  • productSkuIds = string[] ✅ (array of foreign keys)

B) Destination (Lookup/Dimension entity)

  • productSkuId = string primary identity ✅ (non-person namespace)

  • other product attributes (brand, categoryId, price, etc.)

Relationship:
A.productSkuIds[]B.productSkuId (primary identity)

Based on data you can also consider these Recommended Approaches,

  • 1:M: denormalize into profile arrays for small bounded collections; use ExperienceEvents for time-series/high-volume; or use dimension/lookup entities + many-to-one relationships where appropriate (keeping dimension datasets small for segmentation performance).

  • M:N: model using an association/bridge dataset (personId + entityId) or ExperienceEvents that naturally connect the entities; optionally enrich the “entity side” via lookup/dimension datasets.

Key implications: large arrays and oversized dimension datasets can negatively impact profile/segmentation performance; dimension entities in particular must remain small enough for the segmentation engine to load into memory.