From andyt@cs.wisc.edu Sun Jul 21 22:12:37 1996
Received: from andvari.cs.wisc.edu (andvari.cs.wisc.edu [128.105.66.42]) by ricotta.cs.wisc.edu (8.6.12/8.6.12) with ESMTP id WAA16087 for <raghu@ricotta.cs.wisc.edu>; Sun, 21 Jul 1996 22:12:36 -0500
Received: (from andyt@localhost) by andvari.cs.wisc.edu (8.6.12/8.6.12) id WAA07745; Sun, 21 Jul 1996 22:12:35 -0500
Date: Sun, 21 Jul 1996 22:12:35 -0500 (CDT)
From: Andy Therber <andyt@cs.wisc.edu>
To: Raghu Ramakrishnan <raghu@andvari.cs.wisc.edu>
Subject: help files
Message-ID: <Pine.SOL.3.91.960721220434.7725A-100000@andvari.cs.wisc.edu>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Status: RO


Raghu,

Here are the help files. Topics are delimited by the following set of
lines:

************************************
* NEW TOPIC: XXXXXXXX
************************************

-Andy

------------------------------------------------------------------------

************************************
* NEW TOPIC: An introduction to the designview system
************************************

designview Help: Introduction to designview
====================================

designview is a tool for analysing and refining relational database
schemas.  By analysing functional dependencies that hold over the
attributes of a database, designview can guide a user in creating
decompositions that both make sense and adhere to some normal form,
for example BCNF or 3NF.

designview allows users to specify relations and functional dependencies
for a database either by creating an ASCII designview input file, or
through a graphical user interface (See the "Input File Format" and
"Creating a New Database" help files for more information). designview can
also import a database description directly from an
Entity-Relationship diagram created in Opossum, a schema design tool
(see the "Using Opossum" help file).

Once a database is opened in designview, the user is not free to modify
the database attributes and functional dependencies, but can begin the
process of schema refinement.  You can perform operations such as
testing to see if a relation is in BCNF or 3NF, or having designview show
you all the BCNF violations for a relation, and then decompose the
relation to remove a specific violation.  While designview provides
automatic decompositions into BCNF and 3NF, these decompositions may
not capture the essence of what the user is trying to represent in the
schema.  Thus by using the tool in an interactive fashion the power of
its normalization algorithms can harnesed in a sensible manner.

Once schema refinement is complete, designview can generate SQL "CREATE
TABLE" statements for all base relations so that the refined schema
can be implemented in a relational DBMS.

The designview user interface is written in Tcl/Tk, and it runs over a
custom wish interpreter containing C++ implementations of the
normalization and decomposition algorithms.  Opossum is a schema
design tool developed as part of the Zoo Desktop Experiment Management
Environment.


Naming Conventions
-------------------
designview uses its own internal names to identify relations and
decomposition sessions. The names you assign to relations and sessions
therefore do not have to be globally unique. However, attribute names
are defined over an entire database, and all references to a specific
attribute name are assumed to refer to the same attribute. This
attribute naming convention is important to keep in mind when you are
creating a new designview database, either within designview or by generating
an ER diagram with Opossum.


What is a session?
-------------------

In designview, you can experiment with various decompositions of any given
relation. Decompositions can be saved and named, are are referred to
as "sessions" throughout all of the designview documentation and its user
interface. Within a single session you can break down a relation into
smaller relations if that relation happens to be in violation of BCNF
or 3NF. A series of such operations yields a "session tree" with the
initial relation at the root, a set of base relations at the leaf
nodes, and possibly some internal nodes. Each leaf node can be linked
to another session, and these session links are followed when you
enumerate all base relations over the entire database.


Enumerating Base Relations
---------------------------

The process of enumerating all base relations in the database works as
follows:

For each source relation, if no default decomposition exists, then the
source relation is considered a base relation. Otherwise, enumerate
all leaf nodes in the default session, and any leaf relations not
linked to another session are considered base relations. For all of
the other leaves, follow the session link into another session and
continue searching for base relations (session leaves that are not
linked to another session) until you cannot go any deeper through the
session trees.

************************************
* NEW TOPIC: Description of the main window
************************************

designview Help: Main Window
=========================

The designview main window offers you a view of all the source relations
that have been defined in your database.  For more details on designview
databases and source relations, see the "Intro to designview" help file.
Basically a designview database is a collection of attributes, a set of
functional dependencies over those attributes, and a set of "source
relations", each of which contains a subset of the database
attributes.  In addition, each source relation can be decomposed into
new relations derived from its attribute set.  These decompositions
and the derived relations also become part of the designview database once
you create them.

There are two ways to open a database in designview:

        * Open a file containing a designview database description.

                To open a designview database description, select Open
                from the File menu, then use the file selection dialog
                box to find the database file.  (See the "Input File
                Format" help file for a description of designview input
                files.)

        * Import an Opossum Entity-Relationship data schema.

                To import an Opossum ER schema, select "Import Opossum
                Schema" from the File menu, then use the file
                selection dialog box to find the appropriate file.
                (See the "Using Opossum" help file for information on
                how to create an Opossum data schema.)

You can also create a designview interactively inside designview by selecting
"New" from the File menu.


Once you have opened a database, the designview main window allows you to:

        * Open the "Detail" window for a source relation.
        * Start a new decomposition session for a source relation.

Each of these operations is described below.


The Detail Window
------------------

Once you have opened a designview database, you can activate the Detail
window by clicking on the "View Details" button in the Main window, or
by selecting "View Details" from the Relation menu.  The Detail window
provides a listing of all attributes, functional dependencies, and
decomposition sessions defined for a single relation referred to here
as the "active" relation. The Detail window also allows you to:

        * View the attributes and functional dependencies for the
          entire database.
        * Create, display and delete decomposition sessions.
        * Set the default decomposition for the active relation.
        * View the SQL "Create Table" statement for the active
          relation.
        * Compute attribute closures.
        * Test a set of attributes for primality.
        * Test a set of attributes to see if it contains a key.

Here is a description of how to perform each of these operations:

* Create, display, and delete decomposition sessions for a source
  relation.

        If any decomposition sessions have been saved for the active
        relation, the names of the sessions appear in the Detail
        window.  You can display one of these sessions by
        double-clicking on the session name.  You can also highlight a
        session name and use the middle mouse button to display a
        menu of session operations. The session operations are:

        * Display: Opens a new Session window and displays the selected
          session.

        * Rename: Allows you to change the name of the selected session.

        * Delete: Permanantly deletes the selected session.

        * Set as Default: Makes the selected session the "default"
          session for the active relation. By convention, the default
          session is always displayed at the top of the session
          list. The default session is used when you request that SQL
          code be generated for all base relations in the database.

        * Start New Session: Opens a new Session window with the
          active relation as the root of a new session tree.

* Compute attribute closures.

        You can compute the attribute closure of a set of attributes
        by highlighting the attribute names, then selecting "Compute
        Closure" from the Attribute menu.  The system will then
        display the closure in a pop-up window.

        NOTE: You can highlight non-adjacent attribute names by
        holding down the Control key as you click on each name.

* Test a set of attributes for primality.

        You can also have the system determine if an attribute set is
        prime.  Just highlight the attributes and select "Prime?" from
        the Attribute menu.

* Test a set of attributes to see if it contains a key.

        To see if an attribute set contains a key for the active
        source relation, highlight the attributes and select "Key?"
        from the Attribute menu.

************************************
* NEW TOPIC: Creating a new database file
************************************

designview Help: Creating a New Database
=====================================

designview contains a graphical interface for creating new databases. You
can open the "Create Database" window by selecting "Create New
Database" from the File menu in the Main window. You have the option
of initializing the new database with all attributes, functional
dependencies (FDs), and source relations from the database that is
currently open.

While working in the Create Database window, you are creating the
structure of a single designview database. You may want to think of this
as a 3-phase process:

1. Decide on all the attributes that belong in the database and add
them to the attribute list. Remember that attribute names are defined
over the entire database--not on a per-relation basis.

2. Define the functional dependencies that hold over the set of
attributes.

3. Group related attributes into source relations, and define the key
and foreign key dependencies for each source relation.


>From the Create Database window, you can perform the following operations:

        * Add an attribute to the database.
        * Delete an attribute from the database.
        * Create a new FD.
        * Edit an existing FD.
        * Delete an FD.
        * Create a new source relation.
        * Define the attributes, a primary key and foreign keys for 
          a source relation.
        * Delete a source relation.

Here are instructions for each operation...

* Add an attribute to the database.

Click on the "Add" button below the list of database attributes. You
will be prompted for an attribute name and its type. You must also
enter a length if the type of the new attribute is "Char".

* Delete an attribute from the database.

Highlight one or more attributes in the list of database attributes,
then click on the "Delete" button below the list. A dialog box will
appear asking you to confirm the deletion, and if you continue the
selected attributes will be deleted from all relations and FDs in the
database.

* Create a new FD.

Click on the "Add" button below the list of FDs. The "FD Editor"
window will appear, which is where you can define the new FD. See the
"FD Editor" help file for more information on using the FD Editor.

* Edit an existing FD.

Highlight an existing FD, then click on the "Edit" button below the
FDlist.  The "FD Editor" window will appear, which is where you can
edit the selected FD. See the "FD Editor" help file for more
information on using the FD Editor.

* Delete an FD.

Highlight an existing FD, then click on the "Delete" button below the
FDlist. You will be asked to confirm the deletion, and by doing so the
FD is permanently removed from the database.

* Create a new source relation.

Click on the "Add" button below the list of source relations. You will
be prompted for a name for the new relation. Duplicate relation names
are not allowed during database creation. After entering the name, a
new relation is created, initialized with an empty attribute set, no
primary key, and no foreign keys. See below for how to add attributes
and keys.

* Define the attributes, a primary key and foreign keys for a source relation.

To add attributes to a source relation, first make sure the correct
relation is highlighted. Then go to the list of all database
attributes and highlight the attributes you want to add. Now click on
the "Add" button below the list of relation attributes and the
selected attributes from the top list will be added to the bottom
list.

You can set the primary key for a relation by highlighting the key
attributes in the list of attributes for that relation (not the list
of all database attributes) and then clicking on the "Set" button next
to the primary key box. You can delete the primary key by clicking on
the "Clear" button.  NOTE: By defining a primary key for a relation
you are implicitly generating an FD for the database. So even if there
is no FD in the list which implies the key dependency, the proper FD
will be created when the database is opened in designview.

You can set a foreign key for a relation by highlighting the key
attributes in the list of attributes for that relation (not the list
of all database attributes) and then clicking on the "Add" button next
to the list of foreign keys. You will then be prompted to choose which
other relation contains the selected attributes. You can delete a
foreign key from the list by highlighting it and clicking on the
"Delete" button next to the foreign key list.

* Delete a source relation.

You can delete a relation from the database by highlighting its name
in the list of source relations and clicking on the "Delete" button
below the list.


************************************
* NEW TOPIC: Defining a custom decomposition
************************************

designview Help: Creating a Custom Decomposition
=============================================

The Custom Decomposition window allows you to define a new
decomposition for a relation that is in violation of BCNF or 3NF. At
the top of this window is a list of all attributes in the original
relation. The bottom half of the window contains a set of attribute
lists, one for each relation that is part of the new
decomposition. The new relations that are being built will be referred
to as the "child" relations. When the window first appears there will
always be two children below the original relation, but you can add a
child by selecting "Add Child" from the Decompose menu. Children are
deleted by highlighting a child frame and selecting "Delete Child"
from the Decompose menu.

The process of defining a decomposition involves copying a subset of
the parent's attributes into each child's attribute list, and defining
a name for each child relation. Attribute copying is done by
highlighting a set of attributes in the parent list, then clicking on
the Add button in one of the child frames. To delete attributes from a
child frame, highlight the attributes to be deleted in the child's
attribute list, then click on that child's Delete button. You can name
a child relation by clicking somewhere in that child's name entry box,
and typing or editing a new name.

A valid decomposition must have the following properties.

* Each attribute in the parent must appear in at least one child
  relation.

* No child can contain all of the parent's attributes.

* Every child relation must have a unique name.

************************************
* NEW TOPIC: Creating and Editing FDs
************************************

designview Help: Using the FD Editor
=================================

Within the FD Editor window you have the ability to define a single
functional dependency. A list of all attributes appears at the top of
the screen. Two other lists appear at the bottom--one for the FD's
antecedent and one for its consequence. To add attributes to one of
the bottom frames, highlight the attribute names in the top frame,
then click on the Add button in one of the lower frames. To delete
attributes from one of the lower frames, hightlight the attributes in
the lower frame (not the top one), then click on the Delete button
within that frame.

************************************
* NEW TOPIC: Explanation of the input file format
************************************

designview Help: Input File Format
=================================

This help file describes the format of a designview input file.  Some
sample input files have been placed in the designview/examples directory.

Input to designview comes from an ASCII file, and by convention the input
files have a ".dbn" file extension.  The input file can be created by
running o2r on an Opossum Entity-Relationship (ER) data schema, or you
can create the file by hand. The input file contains descriptions of
"objects" that the software interprets as a representation of a
relational database schema, together with a set of functional
dependencies (FDs) and decompositions for the schema.  Three types of
objects can exist in the input file:

        * Database
        * Relation
        * Session

What follows are details on how each type of object is represented in
the input file, and some small sample input files.

First some general comments on the structure of the input file:

     1. The input file is a set of object descriptions.  Each object
        has a type, and a collection of properties.  Every object
        description must begin with a line of the form "% <type>"
        where <type> can be Database, Relation, or Session. Each
        property of an object is specified by a line of the form
        PROPERTY = VALUE.  If a label in the VALUE expression contains
        spaces, then that label should be surrounded by braces.

                ex: Attribute ={First Name} Int

     2. IMPORTANT: Attribute names are defined over the entire
        database, not within a specific relation.  So if two relations
        contain an attribute with the same name, then the system
        assumes that these two attributes are the same.



The designview Database
=================================

In designview, a database is a collection of relations, and a relation is
a set of attributes.  The database also contains a set of functional
dependencies, and a list of special relations referred to as the
"source relations".  The source relations are those relations that are
defined independent of any decompositions that have taken place.  For
example, if you translate an Opossum ER schema to a designview input file,
the relations that are generated by the translation serve as the
source relations, and any decompositions you perform inside designview
generate new "derived" relations.  The list of source relations never
changes in designview.

The description of your database must begin with the line:

        % Database

Following this line, you can define attributes and functional
dependencies.  Each attribute and FD is defined on a separate line,
and the lines should look like this:

        Attribute = <attribute name> <type>
        FD = <antecedent> <consequent>
        
        Examples:       Attribute = Salary real
                        Attribute = Name char(30)
                        FD = Name Department

                        Here's the FD "Course,Student -> Grade"...
                            FD = {Course Student} Grade

                        And here's "Zip Code,Region -> Carrier,Vehicle"...
                            FD = {{Zip Code} Region} {Carrier Vehicle}

Spaces in attribute names are allowed, but remember, you must surround
the entire name with braces like this:

        Attribute = {Date of Birth} date

Each attribute list in an FD definition must be surrounded by braces,
and again it's OK to have spaces in the attribute names as long as the
whole name is surrounded by braces. You can also omit the braces
around an attribute list if the list contains only one element.

Here's an example of a complete database description:

        % Database
        Attribute = Emp integer
        Attribute = Dept integer
        Attribute = EmpName char(30)
        Attribute = DeptName char(30)
        FD = Emp {Dept EmpName}
        FD = Dept DeptName



Relations
=================================

The next section of the input file after the database section is the
Relation section, and this section contains a set of relation
descriptions.  Each relation has a name, a set of attributes, a set of
decomposition sessions, and a key.  Also, each relation must have a
unique object identifier.  The OIDs are used to refer to relations in
the third section of the file--the Session section.

Here's an example of a relation description:

        % Relation
        Name = Employees
        ID = 001
        Attributes = Emp EmpName Dept DeptName
        Key = Emp
        Foreign Key = Dept 002
        Sessions = 101 102 103

A few details on the relation descriptions:

        - Spaces in relation names are allowed.
        - There must be a session description (placed in the Session
          section of the file) for each session in the session list and
          the OID of the session should match the OID in the relation's
          session list.
        - The first session in the list is considered the "default"
          session.
        - Relation names do not have do be distinct, only the OIDs.
        - Do not surround the attribute list, key list, or session list
          with braces.

          Example: To define the key to be two attributes, X and Y:

          Right: Key = X Y      (this creates a two-attribute key)
          WRONG: Key = {X Y}    (this would be interpreted as a single
                                 attribute named "X Y")

        - The foreign key line should have the form:

              Foreign Key = <attribute list> <relation>

          where <attribute list> is a list of attributes and <relation>
          is the OID of the other relation that has those attributes as
          its key.



Sessions
=================================

The final section of the input file is the Session section, and it
contains a set of session descriptions.  Each session has a name, and
a set of decompositions.  Also, each session must have a unique object
identifier.  The OIDs are used in relation descriptions to refer to
decomposition sessions that have the given relation as the root.

Each session description begins with a "% Session" line.  Following
that line, you must specify an OID, a name, and a set of
decompositions for the sessions.  The decompositions should look like:

        Decomposition = <parent relation> <list of children relations>
        
Here's an example of a complete session description:

        % Session
        ID = 102
        Name = Session 1
        Decomposition = 001 {004 005}
        Decomposition = 005 {008 015 016}
        Decomposition = 008 {017 031}

The session descriptions simply contain parent-child relationships.
In the example above, all we know about the session is that the
relation with OID 001 was decomposed into two relations, 004 and 005.
Relation 005 was decomposed further into relations 008, 015, and 016,
and so on.  The "root" relations of sessions are not specified in the
session descriptions; this information can be computed by the system
by examining the list of sessions created for a particular relation.



Summary
=================================

The input file contains three sections: Database, Relation, and
Sessions.  

        Database: The database section defines all attributes and FDs
          for the database, and contains a list of the source relations.

        Relations: The relation section defines all relations (source
          relations and derived relations).  A relation has a name, an
          OID, a set of attributes, a key, and a set of decomposition
          sessions.  The key and sessions are optional.

        Sessions: The session section defines all decomposition sessions
          that have been generated in designview.  Each session has a name,
          an OID, and a set of decompositions.

************************************
* NEW TOPIC: Opossum
************************************

designview Help: Using Opossum
============================

GENERAL DESCRIPTION

Opossum is a prototype schema editor that allows you to create and edit
schemas in from several data models, including the Entity-Relationship
model, the MOOSE object-oriented data model and the Relational Model.
Schema editing works through direct manipulation of a visual
representation of the schema.  Opossum is basically generic code; the
data model and visual representations it uses are defined in external
files that are read each time the program starts.  This document will
describe the use of SchemaEd with the ER model.

OPERATION

The name of the Opossum executable is SchemEd. The SchemaEd editor
distributed with minibase is compiled for SunOS4.1 The model files
(.zoo files) must be in the same directory as the executable of the
program.  SchemaEd can also use the file Opossum.bitmap for reading in
a picture of an Opossum to make the editor look prettier.

OPTIONS

SchemaEd may be started with a number of command line options.  These
options may also be specified in the .zoorc file, described below.
All of the options are case insensitive.

  ZOOM_FACTOR=<number>
    This specifies by what factor the ZoomIn and ZoomOut commands change
    the scale.  (These commands are activated by options in the Edit menu
    or the 7 and 9 keys.)

  DEFAULT_FONT=<X font specifiation>
    Specifies the default font to use in schemas.

  DEFAULT_MENU_FONT=<X font specifiation>
    Specifies the font to use in Menus and Buttons in the SchemaEd window.


THE .ZOORC FILE

Any of the above options can be placed in a file called ".zoorc".
Each option must be placed on its own line, with no leading or
trailing whitespace.  The only difference in option specification is
with font names: on the command line, it is necessary to put the
specification of a font name in quotes, but in the .zoorc file this
will cause errors.

DESCRIPTION

The SchemaEd editor appears in a window that contains file information
and a menu bar at the top, a column of tools on the left, a panner in
the lower left corner, and a work/display area comprising the rest of
the area.  Schemas appear in the work area, and may be created and
manipulated there.  The tools allow for direct manipulation of the
schema in the work area.  The panner allows you to change the view of
the work area, either by panning veritically and horizontally, or
zooming in and out.  The menu items perform general functions on the
schema.

INFORMATION DISPLAYS

At the top of the SchemaEd window are two information displays.  One
given the name of current schema (or "[untitled]" if it is not yet
named), followed by "*" if the schema has been changed since it was
last saved.  The other is will be used in the future, when a database
schema will have several different visual presentations.

EDITING TOOLS

You must engage a tool before you can use it.  You engage a tool by
clicking on its icon or by typing the character below and to the right
of its icon.  The icon of the drawing tool that's engaged appears in
inverted colors.  Once engaged, you use the tool by clicking the left
mouse button in the drawing area.  By default, the middle mouse button
acts as the Move Tool, and the right mouse button as the Select Tool.

The Select, Move, Edit, Edit Text, and Stretch tools manipulate
existing schema elements in a generic way.  There are also buttons for
creating primitives of the model in which you are working.  Each type
of primitive object in the data model will have a corresponding button
for creating objects of that type.

Each tool works as follows:

  Select
    Select a schema element, unselecting all others.  A schema element
    is selected if its handles are visible.  Handles are small
    inverse-video squares that either surround the schema element or
    demarcate its important points (such as the endpoints of a line). If
    you hold down the shift key, Select extends the selection:
    it selects the unselected schema element (or unselects the selected
    schema element) you clicked on but does not unselect other selections.
    Clicking anywhere other than on a schema element unselects everything;
    you may also drag a rubberband rectangle around a group of schema
    elements to select all of them at once.  Shortcut: the right mouse
    button invokes Select while the mouse is in the drawing area.

  Move
    Move schema elements from one spot to another.  Shortcut: the
    middle mouse button invokes Move while the mouse is in the drawing
    area.

  Edit
    Change the value of an attribute of the schema element.  Each
    schema element has many attributes, such as color, orientation, or
    text value.  Some of these do not affect the meaning of the schema
    element (e.g., a Node represents a Class in the schema, regardless
    of color.).  Other attributes affect the meaning of the schema
    (e.g., the text of a Node's label, which indicates the name of the
    Class.).

    When the Edit Tool is active, a mouse click on a schema element
    results in the appearance of a menu listing all the attributes in
    the vicinity of the mouse click that may be changed.  Note:
    Sometimes it takes a few seconds for this menu to appear.  These
    menu items are divided into two categories: User Attributes whose
    values affect only aesthetics, and Data Attributes which affect
    the meaning of the schema.

    If an attribute has a limited range of values, a submenu appears
    offering the choice of values.  Otherwise, if an attribute is
    chosen from the menu, a dialog box appears to allow entry of a new
    value for that attribute.

    The Edit Tool produces a menu of one the attributes in the
    vicinity of the mouse click.  To get a menu of all attributes for
    a given Node or Edge, hold the shift key down while clicking the
    mouse.

  Edit Text
    The Edit Text tool is used as a shortcut for editing text values,
    including Node name, and Edge labels.  When it is clicked on a
    textual attribute, a small region appears containing the text.
    The mouse may be clicked or dragged in this area to move the
    cursor and select portions of the text.  Any text typed on the
    keyboard appears in the editing region.

    To conclude the editing, click the mouse anywhere outside of the
    text editing region.

  Stretch
    Under construction.

  Node
    Creates a Node in the drawing area at the mouse pointer's location
    when the mouse button is released.  This node indicates a Class in
    the MOOSE schema.  A node is a rectangle containing two pieces of
    text.

  Edge
    Creates an edge between two nodes.  This edge appears as a line
    between the two nodes with an arrowhead, and optional labels in
    the middle.

    When creating an edge, two nodes must be specified as the
    endpoints.  When any of the Edge tools are active, if the mouse is
    clicked on empty space, the next click must be on the from-node
    (the node that is the origin of the edge), followed by a click on
    the to-node.  If the mouse is first clicked on a node, that node
    is assumed to be the from-node.


PULL-DOWN MENUS

The pull-down menus File, Edit, and Misc.  above the work/display area
contain commands for editing the schema and for controlling SchemaEd's
execution.  The File menu contains the following commands to operate
on files:

  New: Destroy the current schema and replace it with an unnamed blank
  schema.

  Open: Specify an existing schema to edit.

  Save: Save the current schema in the file it came from.  If the
  schema is as yet unnamed, it will prompt you for a schema name.

  Save As: Save the current schema in a file with a specific name.

  Print: Send a PostScript version of the drawing to a printer or to a
  file.

  Quit: Quit SchemaEd.  If the schema has not been saved, you will be
  asked if you wish to save it.

The Edit menu contains the following commands for editing schema elements:

  Undo: Undo the last editing operation.  Successive Undo commands
  undo earlier and earlier editing operations (to a limit of 20
  operations).

  Redo: Redo the last editing operation.  Successive Redo commands
  redo later and later editing operations up to the first operation
  undone by Undo.  Undone operations that have not been redone are
  lost as soon as a new operation is performed.

  Cut: Remove the selected schema elements from the schema and place
  them in a temporary storage area called the clipboard.

  Copy: Copy the selected schema elements into the clipboard without
  removing them from the schema.

  Paste: Paste copies of the schema elements in the clipboard into the
  schema.  Together, Cut, Copy, and Paste let you transfer schema
  elements between schemas simply by cutting schema elements out of
  one schema and pasting them into another.

  Delete: Destroy the selected schema elements.

  Select All: Select every schema element in the drawing.

  Bring To Front: Move all selected items as far forward as possible.

  Send To Back: Move all selected items as far backward as possible.

  Align Selected Left To Right: Aligns horizontally the centers of the
  selected items with the center of the first item selected.

  Align Selected Top To Bottom: Aligns vertically the centers of the
  selected items with the center of the first item selected.

  Zoom To Selected: Zooms so that the selected items fill the screen.

  Zoom To All: Zooms so that the entire schema fits on the screen.

  Zoom In: Move the current view out, so that objects are larger.
  Also activated by the 7 key.

  Zoom Out: Move the current view out, so that more is visible.  Also
  activated by the 9 key.

  Pan Left: Pan the current view left (so object appear to move
  right).  Also activated with the 4 key, useful on the keypad.

  Pan Right: Pan the current view right.  Also activated by the 6 key.

  Pan Up: Pan the current view up.  Also activated by the 8 key.

  Pan Down: Pan the current view down.  Also activated by the 2 key.

  Group Selected Items: Create a group surrounding the selected items.
  Also activated by the "G" key.

  Remove Selected Groups: Remove all selected Groups from the schema
  without affecting their members.  Also activated by the "H" key.

  Collapse Selected Groups: Change all selected Groups to their
  collapsed state.

  Expand Selected Groups: Change all selected Groups to their expanded
  state.  The Misc. menu contains various options for communication
  and changing settings.

  Expand Selected Groups: Change all selected Groups to their expanded
  state.

  Send Relational Schema To File: Used for converting an on-screen
  Relational schema to an SQL create table expression.


USING GROUPING IN EITHER MODEL

Under construction.


BUGS

There are many bugs.  Soon, known bugs will be listed here.

************************************
* NEW TOPIC: The Session window
************************************

designview Help: Session Window
============================

designview provides you with full display and editing capabilities for all
decompositions specified in the process of schema refinement.  Each
source relation in your database can have one or more decomposition
sessions associated with it, and within a session the source relation
can be decomposed into new, "derived" relations.  The derived
relations can be decomposed further within the same session, or new
sessions can be created for derived relations.

IMPORTANT: Any time you try to create a derived relation that has an
attribute set identical to a relation that already exists, designview will
ask you to make a choice about how the new relation should be
created. You can either create a brand new relation with the same
attribute set as the other relation, but with a separate identity--any
sessions associated with the old relation will not be associated with
the new one. The other option is to use the previously existing
relation in the decomposition that is currently being created. This
will bring the name and associated sessions of the old relation into
the session you are currently working on.

Whenever a relation (source or derived) has more than one session, one
of the sessions is chosen to be the "default" session.  The default
session is always the session at the top of any list of sessions, and
it is the default session that gets used in the process of displaying
all base relations.

When you select a source relation in the main window, a list of its
decomposition session appears.  You can view one of these sessions by
double-clicking on the session name or selecting "View Session" from
the Session menu.  You can also start a new session by selecting "New
Session" from the Session menu.  Once you have displayed a session,
the menus in the session window allow you to perform these operations:

        * Save or rename the session.
        * Test a relation for BCNF/3NF.
        * Automatically decompose a relation into BCNF or 3NF.
        * View the FD projection for a relation.
        * Start a new decomposition session for a relation.
        * View a list of other decompositions defined for a relation.
        * Undo decompositions within the session.
        * Hide or unhide attribute lists in the session tree.


Here is a description of how to perform each of these operations:

NOTE: If you click on a relation name in the session window, that
relation becomes the active relation in the session.  You then have
the ability to perform various operations on the active relation
through the operations in the Relation menu.

* Save or rename the session.

        Select Save from the File menu to create a permanent copy of
        the current session.  Select "Save As" to make a copy of the
        session under a different name.

        NOTE: "Save As" makes a copy of the session, the copy with the
        old name is not deleted.

* Test a relation for BCNF/3NF.

        After highlighting a relation, you can test the relation for
        BCNF and 3NF through the "Test/Decompose" option in the
        Relation menu.  If violations exist, you will be presented
        with a list of the violations, and you can respond in one of
        three ways:

           1. Do nothing.

               Just click on the Dismiss button.

           2. Decompose to remove a violation.

               Select a violation from the list, then click on the
               Decompose button.  You will be warned if the generated
               decomposition is not dependency preserving or is not a
               lossless join decomposition.  If a warning is
               displayed, you can cancel the decomposition by clicking
               on the Cancel button.  Otherwise, the decomposition is
               performed and the derived relations are displayed in
               the session window.

           3. Perform a custom decomposition.

               If you click on the "Custom Decomposition" button, a
               window will appear in which you can define a new
               decomposition for the active relation.  At the top of
               the decomposition window is a list of all attributes in
               the original relation.  And across the bottom half of
               the window is a set of frames which will display the
               attribute sets for all relations in the decomposition.
               I'll refer to the original relation as the "parent"
               relation, and all derived relations as "children".

               To copy attributes to a child relation, first go to the
               parent's attribute list and highlight the attributes to
               be copied.  Then click on the Add button in the
               appropriate child frame.  You can also delete
               attributes from a child by highlighting part of the
               child's attribute list and clicking on the Delete
               button.

               If you want to add a child frame, select "Add Child"
               from the Decompose menu.  To delete a frame, click
               somewhere in the frame (the frame border will become a
               thick, solid black outline), and then select "Delete
               Child" from the Decompose menu.

               You can generate a BCNF or 3NF decomposition by
               selecting "Generate BCNF" or "Generate 3NF" from the
               Decomposition menu.  And at any time while working on
               your decomposition, you can test for Lossless Join and
               Dependency Preservation through the Test menu.

               Once you are satisfied with your decomposition, click
               on the Done button and the decomposition will be added
               to the session.  Clicking on the Cancel button discards
               all work you have done in the decomposition window.

* Automatically decompose a relation into BCNF or 3NF.

        Another option under the "Test/Decompose" item of the Relation
        menu is to automatically generate a decompostion that puts
        your relation into a chosen normal form (BCNF or 3NF).  If the
        relation in already in the chosen normal form, you will be
        informed of this and no decomposition will be performed.

* View the FD projection for a relation.

        Select "View FD Projection" from the Relation menu to display
        a pop-up window showing the FD projection for the active
        relation.

* Start a new decomposition session for a relation.

        Select "New Session" from the Relation menu to open a new
        session window for the active relation.

* View a list of other decompositions defined for a relation.

        Select "View Other Decompositions" from the Relation menu to
        display a list of sessions that have been defined for the
        active relation.  While viewing the list you will have the
        option of viewing one of the sessions, deleting a session,
        setting the default session, and beginning a new session.

* Undo decompositions within the session.

        Once a relation has been decomposed within a given session,
        you can delete all of the derived relations below the active
        relation by selecting "Undo Decomposition" from the Relation
        menu.

        WARNING: Deleting a derived relation which has decomposition
        sessions associated with it results in all the sessions being
        deleted also.

* Hide or unhide attribute lists in the session tree.

        Within the session tree you have the ability to hide and
        unhide the attribute list of any relation.  By double-clicking
        on a relation name you toggle the relation between hiding and
        displaying its attribute lists.  Options also exist in the
        View menu for performing hide/unhide operations over the
        entire tree.

************************************
* NEW TOPIC: Explanation of the window that display the list of
*            violations.
************************************

designview Help: Violation List Window
===================================

This window displays a list of FDs which cause normal form violations
(for either BCNF or 3NF, not both) in a single relation. This window
will appear if you do a normal form test on a relation, and the FD
projection for that relation contains violations of the chosen normal
form. The window gives you three options for what to do next:

        * Dismiss: Do nothing.

        * Decompose: If you highlight one of the FDs and then click on
          the Decompose button, designview will generate a decomposition
          of the relation that removes the highlighted violation. The
          new decompostion will appear in the session window from which you
          initiated the normal form test.

        * Custom Decomposition: This choice allows you to create your
          own custom decomposition of the relation being
          tested. Clicking on this button will cause the Custom
          Decomposition Window to appear, in which you can define the
          new decomposition. See the "Creating a Custom Decomposition"
          help file for more information.


