The ]po[ data-model consists of about:
Due to ]po['s modular architecture, you only need to understand a small part of this data-model in order to access data or to produce custom reports. In addition, we have put great effort in providing you with tools to access the data-model in an easy way:
The clickable map below provides a schematic overview over some core parts of the ]po[ data-model.
Company -> im_companies Office -> im_offices Project -> im_projects
Timesheet Tasks (]project-open[) -> im_timesheet_tasks Party (OpenACS) -> parties Object (OpenACS) -> acs_objects
im_projects -> project_id groups -> group_id
Example Attribute from im_costs variable_cost_p bpchar
Example Attributes from im_tickets ticket_status_id int4 ticket_type_id int4
The root table for the acs object hierarchy. It all starts here folks.
Most data and the most important objects in the ]project-open[ data model are derived from and structured as "Business Objects". A business object is just a database table which adheres to the following conventions.
Business Object Sub Classes:
Represents physical office locations and their data attributes.
Represents commercial organizations, what their relation is to your company, contact info, their industry, etc.
The "project" concept and running a business using project-management principles is a fundamental to ]project-open[ and it's construction and operation. The majority of actions and activities in ]project-open[ center around project objects, which store data about projects, like creation date, final customer destination, manager, etc.
Category Listing - see all the available ]project-open[ category types and their descriptions
Conventional/traditional database design normally includes many foreign key tables defining the type and status of an object. For example, to capture all the different stati and types of "im_projects" we should create two new tables "im_projects_status" and "im_projects_type". As a result, for every new table x we would like to introduce there is at a minimum 2x more tables to create to track their type and status, possibly more for a complex object.
]project-open[ has taken a different route in our database design model. In order to save space and maintenance efforts, all object type and status id's are stored in one single table, "im_categories" the look-up table for all individual object's to consult. We believe this design offers the following advantages over the classical model:
We do acknowledge that it is possible to assign the wrong category to a field, however this mistake has not happened before by any programmer and it is a relatively easy error to detect.
Within the context of ]project-open[ "Categories" are a general concept being used throughout the system for several different purposes.
Categories can be ordered hierarchically using an "is-a" relationship. This lets you define category-subcategory relationships.
The "is-a" relationship represents a "transitive closure" of a "parent-child" relationship. "Transitive closure" means that all parents of a category need to be entered in an "is-a" field, not just as the "direct parent". This way of defining the category hierarchy has several advantages such as:
However, there are also several disadvantages:
Please make sure you understand the concept of a "transitive closure" before modifying categories yourself.
Category Example - Company Type - company_type_id
The table below shows an example of the âCompany Typeâ category. This category is supposed to be editable by a sysadmin and shows the general structure and function a âcategoryâ.
|ID||Category|| Is - A
|51||Unknown||Use this if the type of the company is not yet clear (to be clarified later).|
|52||Other||Use this for strange cases where you really donât know.|
|53||Internal||Customer||Use this type to denote your own company or companies belonging to your group or holding.|
|54|| MLV Translation Agency Company
||Customer||A âMulti-Language Vendorâ translation agency.|
|55|| Software Company
||Customer||A software company as a customer.|
|56||Provider||Super class of all providers.|
|57||Customer||Super class of all customers.|
|58|| Freelance Provider
||Provider||A provider that consists of a single freelancer.|
||Office Equipment Provider
||A provider for furniture and other office equipment.
Categories consist of the following fields:
The âCompany Typeâ category is designed to be extended by âknowledgeable usersâ, so that new types of customers can be added during the lifetime of the system. However, such a âknowledgeable userâ would need to know that he or she couldnât touch the âInternalâ, âProviderâ or âCustomerâ fields, because their IDs are referenced as constants internally in the system.
For instructions on how to access the administration menu to view/modify/add categories in ]project-open[ consult below.
OpenACS provides an administration tool that compiles an automatic map of all the object-types and their hierarchical relation. However, it is not perfect and some database objects are hidden. Most notably you will see that "im_categories" does not appear. Unfortunately we cannot provide a link to see this in real time on the demo server, because you need "SysAdmin" priveleges to see this. Here are the instructions on how to access the Object-Type Map from your own ]project-open[ installation. You must have Admin privileges.
1. The OpenACS Admin Menu is slightly hidden, there is no direct access from internal ]project-open[ screen, you must type the address "myserver/admin" to see the following screen.
2. Click on the "Object-Type" Link and you will be directed to listing of object-types. Clicking on each individual object will display all of it's variable attributes and inheritance.
From the ]project-open[ admin home page you will find a link to the category manager. You must have admin privileges to view and manipulate the categories. Please do not attempt to change/add categories unless you fully understand first and have read the PO-Configuration Guide, specifically the section on Categories, or have read the relevant wiki entries about categories on this page, or the Category page. Some category types are mandatory and should not be edited.
1. From the ]project-open[ Admin Menu click on "Categories" or proceed directly to the menu screen with the URL "myserver/intratnet/admin/categories"
2. Use the filters to search for category types and view their corresponding categories. The "category" vs. "category type" distinction is:
3. Please note: Categories are frequently cached for performance reasons. You may have to restart the server after adding or modifying a category in order for the changes to take effect. Or you could flush the memory cache.