I've yet to see a system that works really well from the perspectives of everyone involved. The big problem is there's a trade-off between traceability and manageability, and you very soon end up needing a fully automated system to keep track of all the revisions (or possibly an intern who has an exceptional eye for detail but at the same time doesn't get bored easily).
For a PCB, I might typically assign a revision letter to each board revision that gets fabricated, so the first PCB that arrives will be rev A.
Then, there's a number assigned to each revision of the BoM, which gets incremented each time there's a component change.
So, the first board to arrive from a manufacturer is likely to be revision A1. This board spends some time in the lab, a few component value changes are made, and the first units to be demonstrated might be up to revision A3. There's also likely to be some wire mods, so there will be a separate mod requirements document which explains what the mods are, which board or BoM revisions they apply to, and why they're needed.
It may then make sense to up-issue the PCB, so the PCB becomes rev B, and the associated BoM becomes rev B1 even if there are actually no material changes to the BoM from rev A3. The first letter of the BoM revision is simply the PCB revision to which it applies.
This all works fine until you have a more complex hierarchy of BoMs, including mechanical assemblies, firmware, option codes, included accessories and the like. Then it rapidly becomes a nightmare, as every change requires a corresponding change to the next level up... unless you work on the principle that the "latest" version of any part is always the one to use. That avoids the ripple effect, where changing a resistor value results in a dozen other BoMs having to change just to reference the update, but it means you lose traceability.