Visio has a generic layer facility that allows you to place shapes on one or more layers. A user can then specify settings for a given layer that dictate some behavior for all shapes on that layer. For example, all shapes on a particular layer can: be explicitly hidden (or shown), have their line/text color changed to a particular color, not be printed, locked such that the user cannot select/modify the shapes, or have other behavior characteristics (which are so important for our purposes here).
A diagram can have any number of layers specified and a given shape can be on more than one layer (which can cause some display problems, discussed below). You can view/change the properties for any layers via the "View | Layer Properties..." menu item. You can add a shape (or set of shapes) to a layer by selecting the shape(s), right clicking, selecting "Format | Layer...", and then selecting the layers you wish the shape(s) to reside (hold down the CTRL or Shift keys as appropriate to select more than one).
VEA's ORM source stencil has a number of predefined layers upon which constraints are shown, the idea being that you could use these layers to quickly "toggle off" the display of a particular constraint type. The layers automatically maintained for the VEA ORM Source stencil are (default layer names, which can be changed, are in quotes):
- "1. UniqueExt constraints" – external uniqueness constraint symbols
- "2. MaDisj_SetComp constraints" – mandatory disjunction, subset, equality, and exclusion constraint symbols
- "3. Value constraints" – value constraint symbols
- "4. FreqRing constraints" – frequency and ring constraint symbols
- "5. Index markers" – index "constraint" symbols
- "Connector" – subtype arrow symbols
You can add to this list at your discretion. For example, perhaps you want the ability to toggle on/off the display of: internal uniqueness constraints, predicate readings, "major" fact types from "minor" ones, surrogate key fact types, fact types involved in reference schemes (surrogate or otherwise), legacy fact types, or fact types that are onomatopoetic.
This can be slick for presentations, but can have an annoying drawback: if a given shape is on more than one layer, so long as any of those layers are visible, the shape will be. Consider, for example, a co-referenced object type whose reference scheme, which uses an external uniqueness constraint, is two fact types. If you add the two fact types and the external uniqueness constraint to a new layer and set it to invisible, the external uniqueness constraint will still be visible, seemingly floating in mid-air attached to nothing, because it is a member of the "1. UniqueExt constraints" layer, still visible. If you set the "1. UniqueExt constraints" layer to be invisible, all external uniqueness constraints will become invisible, which may not be what you want. Similar problems will arise if you want to set a given color for a layer, and so on.
Thus, the best approach would be to make your layers orthogonal (heh) such that a given shape is on at most one layer. That aside, layers can be slick, especially for hiding details not useful for business-level review or analysis purposes such as derived and stored fact types introduced for denormalization purposes, surrogate keys, and so on.