For different purposes, different programs.
Application streams are better generated than drawn ones. Graphviz dot is great for this. Then you can enter something like:
digraph{ step1 -> step2; step2 -> step3; step2 -> step4 [label="optional"]; }
A simple language for oriented graphs. It is well documented and has cross-platform implementations. It is also suitable for generating class diagrams, but you probably do not want its DSL directly for it (just write a small program to create it)
For databases, I used Fabforce DbDesigner. There is also a version with SQL Server support.
http://www.fabforce.net/dbdesigner4/
Stephan eggermont
source share