{
  "version": 1,
  "tables": [
    {
      "identity": { "schema": "sales", "name": "customers" },
      "description": "Customers partitioned by tenant.",
      "columns": [
        { "name": "tenant_id", "type": "int32" },
        { "name": "id", "type": "int64", "identity": { "seed": 1, "increment": 1 } },
        { "name": "name", "type": "string", "length": 100 },
        {
          "name": "name_length",
          "type": "int32",
          "generated": {
            "expression": {
              "kind": "function",
              "function": "Length",
              "arguments": [{ "kind": "column", "name": "name" }]
            },
            "storage": "stored"
          }
        }
      ],
      "primaryKey": { "name": "pk_customers", "columns": ["tenant_id", "id"] }
    },
    {
      "identity": { "schema": "sales", "name": "orders" },
      "columns": [
        { "name": "tenant_id", "type": "int32" },
        { "name": "id", "type": "int64" },
        { "name": "customer_id", "type": "int64" },
        { "name": "amount", "type": "decimal", "precision": 12, "scale": 2 },
        {
          "name": "status",
          "type": "string",
          "length": 20,
          "default": { "type": "string", "value": "new" },
          "checks": [
            {
              "name": "ck_orders_status",
              "kind": "membership",
              "expression": { "kind": "column", "name": "status" },
              "values": [
                { "type": "string", "value": "new" },
                { "type": "string", "value": "paid" }
              ]
            }
          ]
        }
      ],
      "primaryKey": { "name": "pk_orders", "columns": ["tenant_id", "id"] },
      "checks": [
        {
          "name": "ck_orders_amount",
          "kind": "comparison",
          "left": { "kind": "column", "name": "amount" },
          "operator": ">=",
          "right": { "kind": "value", "value": { "type": "decimal", "value": "0" } }
        }
      ],
      "foreignKeys": [
        {
          "name": "fk_orders_customer",
          "sourceColumns": ["tenant_id", "customer_id"],
          "targetTable": { "schema": "sales", "name": "customers" },
          "targetColumns": ["tenant_id", "id"]
        }
      ]
    }
  ],
  "indexes": [
    {
      "identity": { "schema": "sales", "name": "ux_orders_tenant_amount" },
      "table": { "schema": "sales", "name": "orders" },
      "unique": true,
      "columns": [
        { "name": "tenant_id", "direction": "ascending" },
        { "name": "amount", "direction": "descending" }
      ]
    }
  ],
  "views": [
    {
      "identity": { "schema": "reporting", "name": "customer_names" },
      "query": {
        "source": { "schema": "sales", "name": "customers" },
        "projections": [
          { "expression": { "kind": "column", "name": "name" } },
          {
            "expression": {
              "kind": "function",
              "function": "Length",
              "arguments": [{ "kind": "column", "name": "name" }]
            },
            "alias": "name_length"
          }
        ]
      }
    },
    {
      "identity": { "schema": "reporting", "name": "customer_name_lengths" },
      "query": {
        "source": { "schema": "reporting", "name": "customer_names" },
        "projections": [
          { "expression": { "kind": "column", "name": "name_length" } }
        ]
      }
    }
  ]
}
