{"templateId":"../@theme/Templates/BlogWithAuthors","sharedDataIds":{"sidebar":"sidebar-blog/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"The mental model","description":"Developer documentation for the Caraer platform. REST API reference, Bearer authentication, tutorials, and guides for records, forms, webpages, webhooks, and automations.","llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This post explains how ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Object"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Property"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Relation"]}," work together"," ","to define the platform schema and graph behavior."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"the-mental-model","__idx":0},"children":["The mental model"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Object"]}," defines a data type (for example ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["candidate"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["vacancy"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Property"]}," defines reusable field definitions attached to objects"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Relation"]}," defines links between objects"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Record"]}," (data) then stores values that follow that schema"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Think of this as schema-first graph modeling: objects shape records, properties"," ","shape values, and relations shape connectivity."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"object-schema-root","__idx":1},"children":["Object: schema root"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Object"]}," contains naming, grouping, traits, and schema relationships."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"property-field-definition--object-relationship-metadata","__idx":2},"children":["Property: field definition + object relationship metadata"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Property"]}," is not just a key name. It also includes:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["validation-related rules (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["required"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["unique"]},", format/type rules)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["options and format settings serialization"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["per-object relationship metadata (group, hidden, index)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["index lifecycle (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["indexed"]}," creates/drops DB indexes)"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"relation-graph-connector-between-objects","__idx":3},"children":["Relation: graph connector between objects"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Relation"]}," stores relations and drives object-level graph edges."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["At record level, relation endpoints in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["RecordController"]}," use relation names to"," ","connect actual records through this schema."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"design-guidelines","__idx":4},"children":["Design guidelines"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Keep object names stable and lowercased."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Reuse properties intentionally; avoid creating near-duplicates."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Use relation names that clearly describe business meaning."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Plan indexed properties for real query/filter needs, not by default."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"related-reading","__idx":5},"children":["Related reading"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"/blog/2026-06-07-create-and-share-properties"},"children":["Create and share properties"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"/blog/2026-03-25-save-records"},"children":["Save records"]}]}]}]},"headings":[{"value":"The mental model","id":"the-mental-model","depth":2},{"value":"Object: schema root","id":"object-schema-root","depth":2},{"value":"Property: field definition + object relationship metadata","id":"property-field-definition--object-relationship-metadata","depth":2},{"value":"Relation: graph connector between objects","id":"relation-graph-connector-between-objects","depth":2},{"value":"Design guidelines","id":"design-guidelines","depth":2},{"value":"Related reading","id":"related-reading","depth":2}],"frontmatter":{"title":"Caraer data model explained: Object, Property, Relation","authors":["sem_tadema"],"tags":["documentation","api"],"template":"../@theme/Templates/BlogWithAuthors","seo":{"title":"The mental model"}},"lastModified":"2026-06-07T14:02:22.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/blog/2026-03-25-caraer-data-model-object-property-relation","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}