Index: openacs-4/packages/acs-core-docs/www/object-system-requirements.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/object-system-requirements.html,v diff -u -r1.34.2.3 -r1.34.2.4 --- openacs-4/packages/acs-core-docs/www/object-system-requirements.html 19 Nov 2016 09:21:54 -0000 1.34.2.3 +++ openacs-4/packages/acs-core-docs/www/object-system-requirements.html 6 Jan 2017 09:18:42 -0000 1.34.2.4 @@ -18,7 +18,7 @@ concerned primarily with the storage and management of metadata, on any object within a given instance of OpenACS 4. The term "metadata" refers to any extra data the OM stores on behalf of the application - outside -of the application's data model - in order to enable certain generic +of the application's data model - in order to enable certain generic services. The term "object" refers to any entity being represented within the OpenACS, and typically corresponds to a single row within the relational database.

Vision Statement

The OpenACS 4 Object Model must address five high-level requirements that @@ -52,7 +52,7 @@ model.

"Scope" is a term best explained by example. Consider some hypothetical rows in the address_book table:

...scopeuser_idgroup_id...
...user123 ...
...group 456...
...public ...

The first row represents an entry in User 123's personal address book, the second row represents an entry in User Group 456's shared address -book, and the third row represents an entry in the site's public address +book, and the third row represents an entry in the site's public address book.

In this way, the scoping columns identify the security context in which a given object belongs, where each context is either a person or a group of people or the general public (itself a group @@ -68,7 +68,7 @@ tables in the system became bloated as they were extended to support an increasing number of modules. The users table is the best case in point: it became full of columns that exist for various special -applications (e.g. user portraits), but that aren't really related to +applications (e.g. user portraits), but that aren't really related to each other in any way except that they store information on users, i.e. the table became grossly denormalized. Normalizing (breaking-down) this table into several pieces, each of which is specific to a particular application, @@ -82,13 +82,13 @@ custom extensions to the existing data models, and the OM does the bookkeeping necessary to make this easier, providing a generic API for object creation that automatically keeps track of the location and relationships -between data.

Design Note: While this doesn't really belong in a +between data.

Design Note: While this doesn't really belong in a requirements document, the fact that we are constrained to using relational databases means that certain constraints on the overall design of the object data model exist, which you can read about in Summary and Design Considerations.

Modifiable Data Models

Another recurring applications problem is how to store a modifiable data model, or how to store information that may change extensively between releases or in different client installations. Furthermore, we want to avoid -changes to an application's database queries in the face of any custom +changes to an application's database queries in the face of any custom extensions, since such changes are difficult or dangerous to make at runtime, and can make updating the system difficult. Some example applications in OpenACS 3.x with modifiable data models include:

Revision History

Document Revision #Action Taken, NotesWhen?By Whom?
0.1Creation08/10/2000Bryan Quinn
0.2Major re-write08/11/2000Pete Su
0.3Draft completed after initial reviews08/22/2000Pete Su
0.4Edited, updated to conform to requirements template, pending freeze08/23/2000Kai Wu
Final edits before freeze08/24/2000Pete Su
0.5Edited for consistency08/27/2000Kai Wu
0.6Put Object ID stuff first, because it makes more sense08/28/2000Pete Su
0.7Added requirement that knowledge-level objects must be moveable between