Relationship between OpenMRS objects

Considering each encounter type as a type of service provided to patient. It is possible that more such relationships would be required. Since the data volume is less should we model this in a single table instead of separate table for each type of relationship. There should services around this data which can answer questions like as provided in the description below.

LocationProgram (m)Program DepartmentsOn user login to a location, narrow down the programs which are serviced from that location
ProgramEncounter Type (m)Program ServicesEach program could have a list of encounter types and when saving an encounter the type is derived from it
LocationEncounter Type (m)Department ServicesEach location could have a list of encounter types, if no program is used then encounter type is picked based on the location
ProgramForm (m)Program Forms

In the context of a program, provide only the choice of forms associated to it.
If it is less that 7 forms then we can display all of them instead of expecting user to favourite it

LocationOrder Type (m)Order Points

Each location may be responsible for fulfilling certain orders.
On login to a location, order fulfilment application should be presented to the user.

Location, Program, ET, VT, Obs Forms, Order Type, Order Class, Provider