Convex currently enforces its own _id primary key for all tables which is problematic and sub-optimal performance-wise in various use cases:
- Migrating data from previous databases to preserve primary keys/relationships
- Using 3rd parties as the source of truth for primary keys e.g. Clerk users, orgs, etc.
- Generating IDs or creating sub-entities code-side based on business logic or domain aggregates without multiple roundtrips to Convex
Supporting the above use cases in the current environment requires workarounds that undermine Convex's type safety for IDs, are confusing for developers and result in over chatty roundtrips to a single-region Convex - which could all be avoided if Convex supported bring-your-own ID for specific tables.
It's also been referenced as forthcoming in this Convex post, but BYO-ID isn't mentioned in any of the planned requests on https://ship.convex.dev