Relations are a powerful way to extend Properties to be bi-directional and automatic.
Use case or problem
Obsidian users create implicit or explicit relations between their notes manually all the time.
Consider:
- Note 1: Music Collection
“I have a bunch of music. My music collection includes [[Ziggy Stardust]]” - Note 2: Ziggy Stardust
“An album in my [[Music Collection]].”
Backlinks create implicit relations between notes, but consider if we could use Properties in these notes to reference each other:
- Note: Music Collection
- Property key:
Album, value:[[Ziggy Stardust]]
- Property key:
- Note: Ziggy Stardust
- Property key:
Contained within, value:[[Music Collection]]
- Property key:
The relation in this case would be consist of the Album ↔ Contained within predicates and the corresponding links.
I want to be able to create Relations in a note that link to a different notes, and on creation results in that note automatically having a corresponding Relation that links back.
These property keys and values are analogous to graph database edges.
Proposed solution
Since a Relation is a pair of related properties each with keys that describe their half of the relation, and a value that is a link to target note for that property, this could be implemented as a special type of property in a note, or potentially as special syntax in markdown links that articulate the Relation within the link.
Again, this is just like a graph database edge between nodes. Relations represent bi-directional subjects with predicates. A Mom note can have a Child of property that links to the Grandma note. A Legal team note can have a Sub-team property that links to a Compliance team note, which itself has an automatic and corresponding Parent team property that links back.
If the Sub-team property is renamed, it is renamed globally without breaking the relation, and likewise for any other predicate properties.
Current workaround
Currently, there is nothing stopping this from being done manually, essentially, but creating these bi-directional property links between notes, but this robs us of the ability to automatically index relations and provide picker-functionality, to be able to populate relations from pre-existing notes with the corresponding properties. For example, if you create a note and add to it a “Parent team” property, you could produce a picker that listed all existing notes with one or more “Sub-team” properties.