How to best handle inference will depend on how it's being used. There
is a tension between the full rules engine and having database data.
If you can maintain the data in the database only, by infererring once
and writing inferred triples to the database but update is now not
automatic.
If that does not work well for you, then you might consider doing
inference at query time with the backwards rule engine.
Normally, the rules engine is hybrid - some forward rules, executed once
on .prepare() then backwards rules on-demand at query time.
When a lot of overhead from the .prepare is going to waste, not used in
the transaction, backwards makes sense, delaying work until needed
during transaction execution.
(Maybe Dave can add something here).
Andy