Tables workspace
Open Databases → Tables to search the currently configured Tables by name, category, or description. Select a Table to keep the data grid visible while its side panel exposes:- Details — stable name, category, description, and lifecycle;
- Metadata — bounded customer-owned JSON labels;
- Partitions — logical parent and LIST, RANGE, HASH, or default partition boundaries;
- Size — total, row data, indexes, and audit allocation;
- Definition — ordered column definitions;
- Audit — future row-change capture;
- Restricted — named users and Groups permitted to access the Table.
A practical orders definition
For a typical order workflow, start with an immutable UUID primary key, a queryable status, and an explicitly time-zoned business timestamp. Add a provider reference only when it is the idempotency proof for an external side effect. The goal is not to represent every possible field; it is to make the few invariants the rest of the platform can trust.
Table fields
Field types
Field definition
Every field supplies the following shape:
Select a row in Definition to open the column panel. The UI keeps primary-key rules explicit: an array cannot be a primary key, and nullable, unique, index, and collection controls apply only where the field is not the primary key. Column metadata is edited independently from the Table’s own metadata.
Foreign references
One reference group contains one or more mappings plus actions for updates and deletes:onUpdate accepts none, cascade, or restrict. onDelete accepts none, cascade, restrict, default, or null. Select cascade only when deleting or changing a parent must intentionally change every dependent record.
Query and index design
Start with one primary key and indexes justified by observed filters, joins, sorting, or materialized-view refreshes. Do not index every field. Composite and predicate index definitions, where supported by the specific data surface, use structured fields rather than raw SQL: supported access methods arebtree, hash, gist, spgist, gin, and brin; predicates use typed operators such as eq, gte, in, and isnull.
Use a View or Materialized View for a reusable multi-table read model. A View’s output fields are derived from its saved query; changing source field names can therefore be an application breaking change.
Partition large Tables deliberately
Partitioning is a physical scale and lifecycle decision, not a replacement for normal indexes. Create a logical parent, choose a supported partition key, then add child partitions:
The partition key and audit policy are inherited from the logical parent. A child partition cannot redefine them independently. Plan non-overlapping ranges/list values and create the next time partition before traffic reaches its boundary.
Operate records
The data surface supports bounded reads, field projection, typed filters, sorting, inserts, updates, deletes, and bulk mutations. Schema validation runs before a supported write reaches the Table. Primary keys, uniqueness, nullability, references, and types can still reject a request even when the caller is authorized. Use Export for a governed CSV artifact in Storage, Clone for an asynchronous copy of the definition with optional data and partitions, and Truncate only for administrative bulk removal. Truncate preserves identity counters unless explicitly told to restart them and never emits row-level audit events.Production review
- Choose
UUIDor a consciously sized integer key before data is inserted. - Keep timestamps in a documented time-zone convention.
- Enable audit before regulated changes begin.
- Validate data at Endpoint boundaries; constraints are the last line of defense, not client feedback.
- Review foreign-reference delete behavior with a real dependency graph.
- Use query traces and actual filters before adding indexes.

