Quick answer: The modeling layer runs bidirectional impact analysis between API operations and tables. Given an operation, it names the tables and keys it touches, and given a table, it names the operations that depend on it. A schema change therefore shows both the affected operations and the database writes it may require, rather than leaving the relationship to manual tracing.
Why a change is rarely local
A change that looks confined to one request often reaches the storage. Adding a field, changing a type, or removing a relation can require a column, a foreign key, or a migration, and the operations that read the same table can be affected even when their own schemas did not change.
Reading the contract alone misses that reach. The impact analysis connects the operation to the table so the blast radius is visible before the change is planned.
Two directions of the analysis
| Direction | Input | Output |
|---|---|---|
| Operation to table | An API operation | The tables and keys it reads or writes |
| Table to operation | A table | The operations that depend on it |
The first direction tells you what a single request touches, and the second tells you the full set of operations a table change could disturb.
How the impact is read
- Select the operation or the table that is changing.
- Read the connected tables and keys in the first direction.
- Trace back in the other direction to list the impacted operations.
- Read the field diffs against the current model.
- Feed the affected items into the proposed migration.
The Modeled layer carries the impacted operations alongside the per-table status, so a drift table and the requests that depend on it stay in the same record rather than separate notes.
Take a change that widens a status field on the orders table. The operation-to-table direction confirms the write touches only orders, which looks small. The reverse direction then lists every request that reads orders, including a reporting operation and a webhook, whose own schemas were never edited but which now have to handle the new status value. Without the second trace, the team ships the column and the reporting operation later breaks on a value it did not know. The map does not run the change, but it names the full set of requests that need a check, and the plan can include them before the migration runs. That is the practical reason to read both directions rather than stop at the one request being edited.
Why both directions matter
A one-direction trace is enough to see what one operation touches, but it cannot show every operation that a table change reaches. If a shared table is altered, the second direction surfaces requests that were never opened during the change, and it keeps a storage edit from quietly breaking an unrelated operation.
This is the same boundary that keeps a static signal from being treated as a guarantee. The impact analysis is a structural map, not a runtime test, and a connected operation still needs verification when the change lands.
The ER diagram reflects the node state, and the proposed plan stays additive and forward-only, with the generated SQL never executed by the modeling package.
Powerduck keeps the bidirectional analysis in the desktop so the blast radius is read before the migration rather than after.
Frequently asked questions
Can one table change affect operations I did not open? Yes. The table-to-operation direction lists every request that depends on it, even when those schemas were not edited.
Does the impact analysis run the change? No. It is a structural map, and the generated SQL is still generated for review rather than executed.
What feeds the migration plan? The impacted operations, the field diffs, and the table status from the Modeled layer.
The bottom line
An API change reaches the storage, and the bidirectional analysis makes that reach visible: operation to table names the writes, and table to operation names every request that depends on it. Use both directions to size the blast radius before the plan, and keep the result as a structural map rather than a runtime test. The migration stays additive and is never executed for you. Tracing only one direction is how a shared table change breaks an unrelated operation. Read more in the API data model guide.

