Overview
The schema for the entities that actually collect, store and retrieve
Assesment data parallels the hierarchical structure of the Metadata Data Model. In the antecedent
"complex survey" and "questionnaire" systems, this schema was simple
two-level structure:
- survey_responses which capture information about which
survey was completed, by whom, when, etc
- survey_question_responses which capture the actual user
data in a "long skinny table" mechanism
This suffices for one-shot surveys but doesn't support the fine
granularity of user-action tracking, "save&resume" capabilities,
and other requirements identified for the enhanced Assessment package.
Consequently, we use a more extended hierarchy:
- Assessment Session which captures information about
which Assessment, which Subject, when, etc
- Section Data which holds information about the status of
each Section
- Item Data which holds the actual data extracted from the
Assessment's html forms; this is the "long skinny table"
To support user modification of submitted data (of which
"store&resume" is a special case), we base all these entities in
the CR. In fact, we use both cr_items and cr_revisions in our schema,
since for any given user's Assessment submission, there indeed is a
"final" or "live" version. (In contrast, recall that for any Assessment
itself, different authors may be using different versions of the
Assessment. While this situation may be unusual, the fact that it must
be supported means that the semantics of cr_items don't fit the
Assessment itself. They do fit the semantics of a given user's
Assessment "session" however.)
We distinguish here between "subjects" which are users whose
information is the primary source of the Assessment's responses, and
"users" which are real OpenACS users who can log into the system.
Subjects may be completing the Assessment themselves or may have
completed some paper form that is being transcribed by staff people who
are users. We thus account for both the "real" and one or more "proxy"
respondents via this mechanism. To make live not too complicated we
will assume that all subjects have a user_id in OpenACS.
Note that we assume that there is only one "real"
respondent. Only one student can take a test for a grade. Even if
multiple clinical staff enter data about a patient, all those values
still pertain to that single patient.
Synopsis of Data-Collection Datamodel
Here's the schema for this subsystem:
Specific Entities
This section addresses the attributes the most important entities
have in the data-collection data model -- principally the various
design issues and choices we've made. We omit here literal SQL snippets
since that's what the web interface to CVS is for. ;-)
- Assessment Sessions (as_sessions) are the top of the
data-collection entity hierarchy. They provide the central definition
of a given subject's performance of an Assessment. Attributes include:
- session_id
- cr::name - Identifier, format "$session_id-$last_mod_datetime"
- assessment_id (note that this is actually a revision_id)
- subject_id - references a Subjects entity that we don't
define in this package. Should reference the users table as there is no
concept of storing persons in OpenACS in general (yet)
- staff_id - references Users if someone is doing the
Assessment as a proxy for the real subject
- target_datetime - when the subject should do the Assessment
- creation_datetime - when the subject initiated the
Assessment
- first_mod_datetime - when the subject first sent something
back in
- last_mod_datetime - the most recent submission
- completed_datetime - when the final submission produced a
complete Assessment
- session_status - Status of the session (and therefore of the
assessment with regards to the subject)
- ip_address - IP Address of the entry
- percent_score - Current percentage of the subject achieved so
far
- Assessment Section Data (as_section_data) tracks the
state of each Section in the Assessment. Attributes include:
- section_data_id
- cr::name - Identifier, format "$session_id-$last_mod_datetime"
- session_id
- section_id
- section_status
- Assessment Item Data (as_item_data) is the heart
of the data collection piece. This is the "long skinny table" where all
the primary data go -- everything other than "scale" data ie calculated
scoring results derived from these primary responses from subjects.
Attributes include:
- item_data_id
- session_id
- cr::name - identifier in the format "$item_id-$subject_id"
- subject_id
- staff_id
- item_id
- choice_id_answer - references as_item_choices
- boolean_answer
- clob_answer
- numeric_answer
- integer_answer
- varchar_answer
- text_answer
- timestamp_answer
- content_answer - references cr_revisions
- Possible Extension: item_status - Status of the answer. This
might be
"unanswered, delayed, answered, final". This can be put together with is_unknown_p - defaults to "f" -
important to clearly
distinguish an Item value that is unanswered from a value that means
"We've looked for this answer and it doesn't exist" or "I don't know
the answer to this". Put another way, if none of the other "value"
attributes in this table have values, did the subject just decline to
answer it? Or is the "answer" actually this: "there is no answer". This
attribute toggles that clearly when set to "t".
- Assessment Scales will for the time being be handled by
an external grading / evaluation package. Assessment will only work
with percentages internally. It might be necessary to add scales into
assessment as well, but we will think about this once the time arrives.
- Assessment Annotations provides a
flexible way to handle a variety of ways that we need to be able to
"mark up" an Assessment. Subjects may modify a response they've already
made and need to provide a reason for making that change. Teachers may
want to attach a reply to a student's answer to a specific Item or make
a global comment about the entire Assessment. This will be achieved by
using the General Comments System of OpenACS
- Signing of content allows
to verify that the data submitted is actually from the person it is
pretended to be from. This assumes an public key environment where the
public key is stored along with the user information (e.g. with the
users table) and the data stored in as_item_data is additionally stored
in a signed version (signed with the secret key of the user). To verify
if the data in as_item_data is actually verified the system only has to
check the signed_data with the public key and see if it matches the
data.