Skip to content

relationships

apiVersion: v3.1.0
kind: DataContract
id: orders_domain
status: active
name: Orders Domain
version: 1.0.0
description:
  purpose: Demonstrates different valid relationship definitions between schema objects.

schema:
  - id: categories_obj
    name: categories
    physicalName: categories
    logicalType: object
    physicalType: table
    description: Product categories.
    properties:
      - name: id
        primaryKey: true
        primaryKeyPosition: 1
        logicalType: string
        physicalType: varchar(36)
        required: true

  - id: products_obj
    name: products
    physicalName: products
    logicalType: object
    physicalType: table
    description: Products catalog.
    properties:
      - name: id
        primaryKey: true
        primaryKeyPosition: 1
        logicalType: string
        physicalType: varchar(36)
        required: true
      - name: category_id
        logicalType: string
        physicalType: varchar(36)
        required: true
        description: Property-level relationship using shorthand reference.
        relationships:
          - to: categories.id
            type: foreignKey

  - id: customers_obj
    name: customers
    physicalName: customers
    logicalType: object
    physicalType: table
    description: Customers keyed by id and country_code (composite primary key).
    properties:
      - name: id
        primaryKey: true
        primaryKeyPosition: 1
        logicalType: string
        physicalType: varchar(36)
        required: true
      - name: country_code
        primaryKey: true
        primaryKeyPosition: 2
        logicalType: string
        physicalType: varchar(2)
        required: true

  - id: orders_obj
    name: orders
    physicalName: orders
    logicalType: object
    physicalType: table
    description: Orders referencing customers via a composite foreign key.
    relationships:
      # Schema-level composite foreign key using shorthand references.
      - type: foreignKey
        from:
          - orders.customer_id
          - orders.customer_country
        to:
          - customers.id
          - customers.country_code
        customProperties:
          - property: cardinality
            value: many-to-one
    properties:
      - name: id
        primaryKey: true
        primaryKeyPosition: 1
        logicalType: string
        physicalType: varchar(36)
        required: true
      - name: customer_id
        logicalType: string
        physicalType: varchar(36)
        required: true
      - name: customer_country
        logicalType: string
        physicalType: varchar(2)
        required: true
      - name: product_id
        logicalType: string
        physicalType: varchar(36)
        required: true
        description: Property-level relationship using fully qualified reference.
        relationships:
          - to: schema/products_obj/properties/id
            type: foreignKey
            customProperties:
              - property: cardinality
                value: many-to-one

  - id: order_items_obj
    name: order-items
    physicalName: order_items
    logicalType: object
    physicalType: table
    description: Order line items with a composite primary key where both columns are also foreign keys. Uses a dashed schema name to demonstrate dashes in shorthand references.
    relationships:
      # Schema-level single-column foreign key using a shorthand reference with a dashed schema name.
      - type: foreignKey
        from: order-items.order_id
        to: orders.id
      # Schema-level single-column foreign key using fully qualified references.
      - type: foreignKey
        from: /schema/order_items_obj/properties/product_id
        to: /schema/products_obj/properties/id
    properties:
      - name: order_id
        primaryKey: true
        primaryKeyPosition: 1
        logicalType: string
        physicalType: varchar(36)
        required: true
      - name: product_id
        primaryKey: true
        primaryKeyPosition: 2
        logicalType: string
        physicalType: varchar(36)
        required: true
      - name: quantity
        logicalType: integer
        physicalType: int
        required: true