Log in
Tonic reduces full production databases to targeted slices of the data your developers actually need, while keeping primary and foreign key relationships intact.

Tell Tonic's AI agent what you're targeting and it configures the subset, picking the tables to anchor on, setting the filters, and flagging the relationships that matter. What used to mean hunting through a legacy schema is now a sentence.
Once the anchor tables are set, Tonic's patented subsetter follows your foreign keys out from there, pulling in every row those records depend on. Lookup tables copy in full, so referential integrity survives the cut.
Subsetting runs in tandem with de-identification so what reaches your test environment is both smaller and safe to use. One pass through test data management, not a dataset queued behind a privacy review.
Describe the dataset you need in plain language and the agent configures it, target tables, row filters, lookup tables, and upstream filters included. Ask it which tables should be lookups, or how large the subset will be. It reads your schema, so its advice reflects how your tables connect.

Name the table that anchors the subset and say how much you want: five percent of transactions, or every transaction from customers in one region. Tonic converts a percentage into a filter your database understands, then builds the rest of the dataset around it.

Relationships in a mature schema often live in application code rather than declared constraints. Add them inside Tonic instead of touching the database, and polymorphic keys become traversable too, preventing a subset from arriving full of orphaned rows that fail your suite on the first run.

Employees reference departments, departments reference managers, and a naive traversal circles between them forever. Tonic catches the cycle before the job starts and breaks it by nulling the fewest nullable keys it can, then marks on the schema graph exactly which columns it touched.


Production won't fit on a developer's machine, and a random sample breaks the first time a foreign key points at a row that got left behind. A subset that respects relationships clones down, boots, and behaves like the real thing, so you debug your code instead of your fixtures.
A WHERE clause on the target table pulls the exact account, order, or claim that triggered the defect, plus every related record scattered across the rest of the schema. The engineer chasing it opens a dataset scoped to the problem instead of grepping through a copy of everything.
Data localization rules and vendor agreements both narrow what can leave your environment. A de-identified subset is small enough to move and narrow enough to leave out what you can't share, so contract teams build against data that behaves like your system without holding your customers' records.
Minimum necessary is a HIPAA standard, not just a storage tactic. Subsetting reduces how much protected health information reaches a non-production environment in the first place, and de-identification handles what does arrive, shrinking both your exposure and the surface an auditor has to walk.
Point Tonic Structural at the production database you want to reduce, then turn on subsetting for the workspace.
Explore Tonic StructuralConfigure the target tables, filters, and lookups yourself, or tell the agent what you're targeting and let it handle the setup and size estimates.
Tonic reads the foreign keys your schema declares. Add virtual ones where a relationship isn't declared, and clear any circular dependencies it flags.
Tonic builds the subset, applies your generators, and writes it to your destination database. Your team gets an environment they can start working in immediately.
Data subsetting reduces a database to a representative sample of its rows while keeping the relationships between them intact. You choose one or more target tables and a filter, and the process follows foreign keys to collect every record those rows depend on.
Not in Tonic. Poorly implemented subsetting can, which is why naive row sampling produces broken test databases. Tonic's traversal takes every row a target row references, upstream and downstream, so no foreign key ends up pointing at nothing. Where your schema doesn't declare a relationship, a virtual foreign key makes it visible.
No. The percentage applies to the target table only. Related tables contribute whatever those rows require and lookup tables copy in full, so a five percent target routinely yields well above five percent of the total. Row count and storage size also move independently — check both.
Subsetting works with the relational, NoSQL, and application database connectors. Data warehouse and Spark-based connectors — Snowflake, BigQuery, and Redshift among them — don't support it, and use table filtering instead, which applies a WHERE clause per table without traversing relationships between them.