Discover keys
The semantic catalog exposes the same model as
primaryKey and
importedForeignKeys on each table.
Preserve table grain
A main Provider table and its child tables have different keys. For example, an issue can have many labels, so the parent issue ID repeats inproviders.github.issues__labels. Use the complete logical key returned by the
catalog instead of deduplicating a child table on its parent ID.
Provider Plugins define the business key and ordering behavior used to project
source records. Consumers inspect that metadata; they do not redefine it in a
query.
Prefer semantic joins
Use a relationship from the catalog when one exists. Otherwise, choose columns that represent the same semantic value or domain key:- Join
Contact.Emailvalues across Provider and Workspace tables. - Join Provider-native IDs only inside the Provider domain that owns them.
- Use
providers.identity.account_associationswhen accounts for the same person do not share an email. - Join work items on a real shared domain key, such as a branch name, rather than similarly named IDs.