The best paid one I've used is Enterprise Architect, which is an all-singing, all-dancing solution. I used to have a license, but let it lapse, as I don't do UML anymore, but the product is very good, and the people working on it were always very helpful.
Well... there is not much you can't do with Enterprise Architect
As a developer, I would suggest the "Professional" version. See the features listed/compared here:
We had an inhouse training from one of their trainer... was awesome and on point, no questions left.
The developer has a very fair price and good updates and support. Maybe checkout the trail version (30 days free ultimate version) - but... follow some tutorials because there are lots of features which can be overwhelming.
Enterprise Architect can generate code from state machines. You can modify the code generation templates too. See here
No tool does what I want 100%, unfortunately. Each have their strengths and weaknesses.
You can do a fair amount with Visio, but the UML out of the box is a limited subset and quite clunky. There are some UML 2 stencils, I've used, which helps, but Visio doesn't have a lot in the way of user experience that will help your modelling workflow
Visual Paradigm is actually a lot better there, but the last time I used it it had a few styling issues that I didn't like.
I think the tool I like best is Enterprise Architect, which features the best overall modelling options, IMO. Not as user-friendly as Visual Paradigm, but still very good, and with better drawing output.
Part of the problem is that tools will implement the UML 2 standard, where semantics are important, and often force you to conform to those semantics -- even when you don't necessarily want to. Modelling is about abstraction, and UML 2 seems to want to be a programming language with diagrams, and it unfortunately fails at that pretty darn hard. When the tools force you to conform (for example not allowing a particular type of line from a particular shape to a different type of shape), your ability to abstract in the way you want to abstract is diminished.
I don't think UML is much use for creating code - it can be vaguely useful for documenting it. The only UML tool I've ever used that is any good is Enterprise Architect.
Paper is best - apart from anything else, it stops you getting too detailed. But the best design tool (if you have to produce UML to satisfy some contractual agreement) I've used is Enterprise Architect. It isn't free (there is a 30-day free trial) but it is worth the money.
You might try downloading something like Enterprise Architect or at least try looking at their documentation website.
I tried this product not too long ago and found it confusing and cumbersome. In fairness I really did not put a lot of effort into it. I know there are many loyal users. Perhaps someone will post alternative products. I don't know of any
BTW I don't know of too many companies who generate a lot of formal documentation anymore. Everyone is agile.
For free, try the Oracle tool. If you have to go beyond Oracle then the best commercial tool (IMO) is ER/Studio. A less expensive, but still very good modeling tool (much more than just database) is Sparx Enterprise Architect. I have used both of these tools for years and they are very good. I don't much care for ERwin.
In my experience, UML is a pretty poor design tool, but a good tool for documenting existing systems. If you want a stand-out UML tool, then Enterprise Architect is the way to go (but its not free).
In its simplest form, revision control:
You create a file.
Then you check that file into a revision control system (software).
When you need to make a modification/revision of that file, you or anyone who is authorized checks out the file, makes the revision, then checks it back in.
The original is still kept and now you have two files. They may be called file.001 and file.002.
If someone screws up when they made file.002, you can always go back to file.001 and redo the the changes. If you check that one in, you get file.002.001 and file.002.002 (or something like that). The branching can get convoluted, but at least you have complete tracking of every drawing and every modification. It is a great management tool.
This is easy to see in software development. Sometimes a file has to be modified for a bug fix and sometimes it has to be modified to change for a client-specific application. Bug fixes are tracked linearly, whereas client mods create a branch, then each branch is tracked linearly.
Anyway, this PDF might be a good start.
edit: Every check in and check out is time/date stamped, along with the user name, notes on why, etc. The entire database is backed up as one entity.