Sample SQL Server Database Description

From a document presented to a client

Altered to protect confidential information

 


Summary

This document describes the proposed SQL Server database for immediate implementation.  It is intended that this document will change as the database’s tables change. The description includes a chart depicting the basic tables and their relationships followed by a brief description of each table in its most basic form.

For the most part, each table description includes only the fields necessary to represent the purpose of the table and its relationships to other tables.  After the description of the basic tables comes a section that more fully describes the tables with all the fields necessary to implement the Web-based product that also includes the new features being implemented parallel to the development of this database.

Special attention has been paid to flexibility in the design of the tables.  The tables are capable of supporting growth in the product’s capabilities.  Some of the more obvious enhancement possibilities are pointed out in this document.  That they are mentioned in no way implies that these features must or should be implemented.

Table Chart

In general, the tables in the chart show one-to-many relationships flowing from left to right.  One-to-one relationships are portrayed using connectors without arrows.  A few tables implement a many-to-many relationship between two other tables.

One special table, the “Types” table, receives special attention in its own section.  Briefly, this table contains meta-data that enables the creation of data types that are completely analogous to existing data types.  Some fields change meaning (even change record relationships) depending on “type” information.  Fields affected in this way are colored gray.  Dotted lines depict affected relationships.

Fields colored cyan represent hierarchical relationships between records within the same table.

 

 



Basic Table Descriptions

Types

Description

Meta-data used in many tables to differentiate among analogous data types.  For example, it is used to distinguish people from managers in the People table.  For a more complete description including current table entries, see the “Types” section below.

Fields

Index (Number): Used by other tables to reference this record.  Not auto-numbered because of the semantic importance of this field.

Type (Text*50): Brief type description.

Table (Text*50): Name of the table where this type is used.

Projects

Description

Table of Projects that can be used as tasks.  To assign a project to a person, it must first be assigned to an org with a due date via the OrgTasks table, then an entry can be made in the Tasks table.  These records keep track of Projects as a group because more than one version of the same project can exist.  When binding the project to a person record to form an task, the current version is used.  Each project version is stored in the ProjectVersions table.

Fields

Index (AutoNumber): Used by other tables to uniquely reference this record.

CurrentVersion (Number): Index of the latest version available.

ProjectVersions

Description

Table containing each version of a particular project.

Fields

Index (AutoNumber): Used by other tables to uniquely reference this record.

VersionOf (Number): Index of the project represented by this version.

Description (Text*50): Short description of the project.

WeightedItems (Number): Number of weighted items; used for scoring.

Orgs

Description

Table of organizations of or within departments.  The most important organization for task purposes is the team (or variants thereof).  But this table can be used to represent a hierarchy or matrix of organizations within a department or company. 

Though the current product may not support this, the table is designed for extended functionality that could be added in the future.  For example, a company may not call its basic organizational unit a “team”.  It is sufficient to change the corresponding entry in the Types table to effect the nomenclature change.  Also, it can become possible to make tasks across units by associating them with super units such as “Visual Basic Groups” or “All Teams Using Network 7”.

Fields

Index (AutoNumber): Used by other tables to uniquely reference this record.

Name (Text*50): Organization name.

TypeIndex (Number): Corresponds to Types.Index.  Indicates the type of organization.  Should only include values marked “Orgs” in the type table.

Parent (Number): Corresponds to Orgs.Index.  This optional field arranges the organizations in a hierarchy.

Sections

Description

Represents the hierarchical organization of Projects.  The basic unit is the checkpoint.  In conjunction with the Types table, it is possible to conceive of any number of schemes to hierarchically organize a project.  For the present, we will represent the basic organization supported by the current product.

Fields

Index (AutoNumber): Used by other tables to uniquely reference this record.

ProjectIndex (Number): Corresponds to ProjectVersions.Index.  Associates the section to its project.

Number (Number): Absolute number of this section within its project.  One-based.

TypeIndex (Number): Corresponds to Types.Index.  Indicates the type of section.  Should only include values marked “Sections” in the type table except for the special type “Item”.

Parent (Number): Corresponds to Sections.Index.  This optional field arranges the sections in a hierarchy.

People

Description

Comprehensive list of all persons who have access to the data.  Any types of person with various levels of data access can be included.  The kind of person—and the corresponding access privileges—are determined by the associated entry in the Types table.  Note that there is no support here for a hierarchy, instead note that the OrgsPeople table is indirectly hierarchical via the Orgs table.

Fields

Index (AutoNumber): Used by other tables to uniquely reference this record.

Login (Text*50): The login name assigned to the user.

Password (Text*50): Password used to verify login privileges.

Name (Text*50): The person’s name.

TypeIndex (Number): Corresponds to Types.Index.  Indicates the type of person, specifically the type of access this person is allowed.  Should only include values marked “People” in the type table.

OrgsPeople

Description

Implements a many-to-many relationship between Orgs and People.  Other tables do not reference this auxiliary table.  Instead, this table is used to find all people within a given organization.

Fields

Index (AutoNumber): Used by other tables to uniquely reference this record.

PeopleIndex (Number): Corresponds to People.Index.  Ties the person referenced to the organization referenced.

OrgIndex (Number): Corresponds to Orgs.Index.  Ties the organization referenced to the person referenced.

OrgTasks

Description

Intended to assign a project to a team though, in theory, any organization can receive an task in this fashion.  Implements a many-to-many relationship between Projects and Orgs.  This intermediate table does not represent actual tasks, instead the Tasks table completes the work of turning a project into an task by associating a OrgTask to a person.  The due date can be assigned here but can be overridden in individual person cases.

Fields

Index (AutoNumber): Used by other tables to uniquely reference this record.

ProjectIndex (Number): Corresponds to Projects.Index.  Assigns this project to the organization referenced.

DueDate (Date/Time): Attaches a due date to the task that can be overridden by individual due dates in the Tasks records.

OrgIndex (Number): Corresponds to Orgs.Index.  Assigns the referenced project to this organization.

Items

Description

Represents individual items, such as questions, within a project.  Items are linked indirectly to Projects via their respective pages represented in Sections table.

Fields

Index (AutoNumber): Used by other tables to uniquely reference this record.

TypeIndex (Number): Corresponds to Types.Index.  Indicates the type of item mostly for scoring purposes.  Should only include values marked “Items” in the type table.

SectionIndex (Number): Corresponds to Sections.Index.  Associates this item to its page in the Sections table.

Number (Number): One-based number of the item on its page.

Comments

Description

Allows the association of comments on a given task to individual items or to pages.  In theory, any project section could receive a comment if so implemented.

Fields

Index (AutoNumber): Used by other tables to uniquely reference this record.

TaskIndex (Number): Corresponds to Tasks.Index.  Associates this comment to an task (and thus to a particular person’s work) in the Tasks table.

TypeIndex (Number): Corresponds to Types.Index.  Indicates the type of item being commented on.  Should only include values marked “Sections” in the type table including the special type “Item”.

ItemIndex (Number): Corresponds to Sections.Index or to Items.Index depending on the type.  If the type is “Item”, associates this record to a record in the Items table; otherwise, the comment is associated with a section (a page) in the Sections table.

Comment (Memo): The comment itself.

Tasks

Description

Associates entries in the OrgTasks table with people as entries in the People table.  Each record has a due date that can override the due date found in the OrgTasks record.  Creates a many-to-many relationship between OrgTasks and People.

Fields

Index (AutoNumber): Used by other tables to uniquely reference this record.

OrgTaskIndex (Number): Corresponds to OrgTasks.Index.  Associates this record with an org task.

ProjectVersion: (Number):  Associates the person to a particular version of the project.

PeopleIndex (Number): Corresponds to People.Index.  Associates a person (person) with this record.

DueDate (Date/Time): Copied from OrgTasks.DueDate.   If changed from this default, it should be considered to override the default.

Choices

Description

For project items such as multiple choice or fill in the blank, this tables serves as the possible goals to the question.

Fields

Index (AutoNumber): Used by other tables to uniquely reference this record.

ItemIndex (Number): Corresponds to Items.Index.  Associates the choice to its item (question) within the project.

Number (Number): Absolute number of this choice within its item.  One-based.

GoalsNumerical, GoalsLongText, GoalsShortText

Description

Tables containing the goals (or goal suggestions) for given project items.  The three tables cover three different goal formats: numerical (mostly for indicating the correct choice among several), long text and short text.  How each record is used depends entirely on the type of question (project item) is being scored.

Fields

Index (AutoNumber): Used by other tables to uniquely reference this record.

ItemIndex (Number): Corresponds to Items.Index.  Associates the goal to its item (question) within the project.

Goal (Number or Memo or Text*50): Numerical goals usually will refer to which choice (by index) in the Choices table that is the correct goal.  In the text tables, the text goal is either the (near-) exact or suggested goal (for manual scoring).

Outcomes

Description

Table of records, one for each item in each task that has person outcomes.  Each record has a one-to-one relationship with the actual outcome that is contained in one of three tables depending on the outcome type.  The main outcome records (contained in this table) have a field that indicates whether the outcome was correct.

Fields

Index (AutoNumber): Used by other tables to uniquely reference this record.

TaskIndex (Number): Corresponds to Tasks.Index.  Associates this record with an task.

ItemIndex (Number): Corresponds to Items.Index.  Associates this record with an item in the project corresponding to the task.

ItemScore (Number): If scored, indicates the items weighted score.

OutcomesNumerical, OutcomesLongText, OutcomesShortText

Description

The actual outcomes in correspondence with the main outcome records found in the Outcomes table.  Outcomes are stored in one of these three tables depending on the project item type.  For the most part, numerical outcomes indicate which choice out of a number of (choice) choices has been made.

Fields

Index (AutoNumber): Used by other tables to uniquely reference this record.

OutcomeIndex (Number): Corresponds to  Outcomes.Index.  Forms a one-to-one correspondence between this record and its base record in the Outcomes table.

Outcome (Number or Memo or Text*50): Numerical outcomes usually will refer to which choice (by index) in the Choices table was chosen.  Text outcomes are stored in the text tables depending on whether the outcome is expected to be long or short.


Types Table

The Types table contains meta-data used to determine semantic information in other tables.  By adding a new type for an already defined table, data analogous to the data already in the table can be entered in the database without defining a new table.

For example, in the People table, entries can be made for both programmers and managers.  The TypeIndex field that refers to the Types table records for “Programmer” and “Manager” differentiates them.  It is possible to give different names to these entities by replacing the Types table entry.  So, if it is preferable to call managers “team leaders”, the Types table entry can be changed to use the term “Team Leader”.  There is no need to define separate tables for programmers and managers because the data for both kinds of people is analogous and uses exactly the same table structure.

The key is that the software knows about pre-determined Index numbers in the Types table.  Again, using the People table for an example, the software will treat managers differently than programmers because their People records have different TypeIndex values.  Programmers would be granted different logon privileges than managers, for instance.

This means that the Types table must contain pre-defined entries whenever a fresh database is created.  The table shown on the next page is an example of what would be the typical contents of the Types table.  Starred (*) items are those that must be present to support the current web-based product.

The Types table also allows the software to create and manage new types on the fly.  The table includes a field that indicates in which table the entry is used.  Thus, it could be possible to divide Projects in various ways rather than in pre-defined ways.  One project could consist only of pages, another of sections with pages or chapters with sub-chapters each with pages.  The software would enforce the page as the basic unit and allow project sections to be built using new entries in the Types table with unique Index values.


 

*

Index

Type

Table

*

1

Manager

People

*

2

Programmer

People

 

3

Administrator

People

 

4

Publisher

People

*

5

Team

Orgs

 

6

Section

Orgs

 

7

Division

Orgs

 

8

Company

Orgs

 

9

Area

Orgs

 

10

Department

Orgs

*

11

Multiple Choice

Items

 

12

Fill in Circle

Items

 

13

Draw a Mark

Items

 

14

Connect a Line

Items

 

15

Drag and Drop

Items

^

16

Fill in the Blank

Items

*

17

Essay (Short Goal)

Items

 

18

Budget Authorization

Sections

 

19

Project

Sections

 

20

Subproject

Sections

^

21

Checkpoint

Sections

^

22

Item

Sections


 

Full Table Descriptions

Types

 

Meta-data used in many tables to differentiate among analogous data types.

Index

 

Number

Used by other tables to reference this record.  Not auto-numbered because of the semantic importance of this field.

Type

Text*50

Brief type description.

Table

Text*50

Name of the table where this type is used.

 

Projects

 

Table of Projects that can be used as tasks.

Index

AutoNumber

Used by other tables to uniquely reference this record.

CurrentVersion

Number

Identifies the latest version.  Used to bind current version to task.

 

ActivitieVersions

 

Table of Projects that can be used as tasks.

Index

AutoNumber

Used by other tables to uniquely reference this record.

VersionOf

Number

Index of the project represented by this version.

Description

Text*50

Short description of the project.

WeightedItems

Number

Number of weighted items; used for scoring.

 

Orgs

 

Table of organizations of or within departments.

Index

AutoNumber

Used by other tables to uniquely reference this record.

Name

Text*50

Organization name.

TypeIndex

Number

Corresponds to Types.Index.  Indicates the type of organization.  Should only include values marked “Orgs” in the type table.

Parent

Number

Corresponds to Sections.Index.  This optional field arranges the sections in a hierarchy.

 

Sections

 

Represents the hierarchical organization of Projects.

Index

AutoNumber

Used by other tables to uniquely reference this record.

ProjectIndex

Number

Corresponds to ProjectVersions.Index.  Associates the section to its project.

Number

Number

Absolute number of this section within its project.  One-based.

TypeIndex

Number

Corresponds to Types.Index.  Indicates the type of section.  Should only include values marked “Sections” in the type table except for the special type “Item”.

Parent

Number

Corresponds to Sections.Index.  This optional field arranges the sections in a hierarchy.

FilePath

Text*35

For pages; the path (within a known directory) to the page graphic.

WavePath

Text*35

For pages; the path (within a known directory) to the wave file.

 

People

 

Comprehensive list of all persons who have access to the data.

Index

AutoNumber

Used by other tables to uniquely reference this record.

Login

Text*50

The login name assigned to the user.

Password

Text*50

Password used to verify login privileges.

Name

Text*50

The person’s name.

TypeIndex

Number

Corresponds to Types.Index.  Indicates the type of person, specifically the type of access this person is allowed.  Should only include values marked “People” in the type table.

 

OrgsPeople

 

Implements a many-to-many relationship between Orgs and People

Index

AutoNumber

Used by other tables to uniquely reference this record.

PeopleIndex

Number

Corresponds to People.Index.  Ties the person referenced to the organization referenced.

OrgIndex

Number

Corresponds to Orgs.Index.  Ties the organization referenced to the person referenced.

 


 

OrgTasks

 

Assigns a project to an orgroom (or other organization).

Index

AutoNumber

Used by other tables to uniquely reference this record.

ProjectIndex

Number

Corresponds to Projects.Index.  Assigns this project to the organization referenced.

DueDate

Date/Time

Attaches a due date to the task that can be overridden by individual due dates in the Tasks records.

OrgIndex

Number

Corresponds to Orgs.Index.  Assigns the referenced project to this organization.

TimeLimit

Number

Time limit for the person to do the task in minutes.

StartDate

Date/Time

Attaches an effective date for the task that can be overridden by individual start dates in the Tasks records.

 

Items

 

Represents individual items, such as questions, within a project

Index

AutoNumber

Used by other tables to uniquely reference this record.

TypeIndex

Number

Corresponds to Types.Index.  Indicates the type of item mostly for scoring purposes.  Should only include values marked “Items” in the type table.

SectiionIndex

Number

Corresponds to Sections.Index.  Associates this item to its page in the Sections table.

Number

Number

One-based number of the item on its page.

XSound

Number

X position of any sound icon.

YSound

Number

Y position of any sound icon.

WavePath

Text*35

Path (in known directory) to any associated sound file.

ScoringWeight

Number

Used to weight the item for scoring.

Sample

Yes/No

Marks sample item not included in scoring.  NOTE: These Yes/No fields are mutually exclusive.

Ignore

Yes/No

Marks item to be ignored in scoring.

Credit

Yes/No

Marks item given automatic credit in scoring.

Bonus

Yes/No

Marks a bonus item for scoring.

 

Comments

 

Allows the association of comments on a given task to individual items or to pages (or other project sections).

Index

AutoNumber

Used by other tables to uniquely reference this record.

TaskIndex

Number

Corresponds to Tasks.Index.  Associates this comment to an task (and thus to a particular person’s work) in the Tasks table.

TypeIndex

Number

Corresponds to Types.Index.  Indicates the type of item being commented on.  Should only include values marked “Sections” in the type table including the special type “Item”.

ItemIndex

Number

Corresponds to Sections.Index or to Items.Index depending on the type.  If the type is “Item”, associates this record to a record in the Items table; otherwise, the comment is associated with a section (a page) in the Sections table.

Comment

Memo

The comment itself.

 


 

Tasks

 

Associates entries in the OrgTasks table with people as entries in the People table.

Index

AutoNumber

Used by other tables to uniquely reference this record.

OrgTaskIndex

Number

Corresponds to OrgTasks.Index.  Associates this record with an org task.

ProjectVersion

Number

Associates the person with a particular version of the project.

PeopleIndex

Number

Corresponds to People.Index.  Associates a person (person) with this record.

DueDate

Date/Time

Copied from OrgTasks.DueDate.   If changed from this default, it should be considered to override the default.

StartDate

Date/Time

Copied from OrgTasks.StartDate.   If changed from this default, it should be considered to override the default.

ScoredItemCount

Number

The number of items included in the scoring.

NumberRight

Number

The number of items counted as correct.

TaskScore

Number

The computed score in percent.

TaskTimeElapsed

Number

If task is incomplete, indicates the number of seconds (?) that the person has spent so far.

TaskDate

Date/Time

The date the task was completed.

TaskStatus

Text*1

“C” for complete, “I” for incomplete.

 

Choices

 

For project items such as multiple choice or fill in the blank, this tables serves as the possible goals to the question.

Index

AutoNumber

Used by other tables to uniquely reference this record.

ItemIndex

Number

Corresponds to Items.Index.  Associates the choice to its item (question) within the project

Number

Number

Absolute number of this choice within its item.  One-based.

Left

Number

Location of the choice on the page.

Top

Number

Location of the choice on the page.

Right

Number

Location of the choice on the page.

Bottom

Number

Location of the choice on the page.