This post explains how Object, Property, and Relation work together to define the platform schema and graph behavior.
Objectdefines a data type (for examplecandidate,vacancy)Propertydefines reusable field definitions attached to objectsRelationdefines links between objectsRecord(data) then stores values that follow that schema
Think of this as schema-first graph modeling: objects shape records, properties shape values, and relations shape connectivity.
Object contains naming, grouping, traits, and schema relationships.
Property is not just a key name. It also includes:
- validation-related rules (
required,unique, format/type rules) - options and format settings serialization
- per-object relationship metadata (group, hidden, index)
- index lifecycle (
indexedcreates/drops DB indexes)
Relation stores relations and drives object-level graph edges.
At record level, relation endpoints in RecordController use relation names to connect actual records through this schema.
- Keep object names stable and lowercased.
- Reuse properties intentionally; avoid creating near-duplicates.
- Use relation names that clearly describe business meaning.
- Plan indexed properties for real query/filter needs, not by default.