Before moving on, we will introduce some terms, used in Universal Data Model [UDM].

The record structure of a table or the "record structure" of a view, is called an entity.

A Product, a Party and a VAT Category are all entities.

VAT Category is a simple entity, because it is represented by only one table in theu data model.

On the contrary, a Party is a complex entity, because it is represented by many tables (or a view) in the data models.


Tables in the data models are divided into 4 categories:

  • Base tables - like Customers, Products and Contacts
  • Document tables - like Invoices, Orders and Shipments
  • Dimension tables - like VAT Categories, Colors and Payment terms
  • Transaction tables - like Inventory, AR, AP and Accounting transactions


Base and Document tables are usually complex entities and Dimension and Transaction tables are simple tables.

Primary Key (PK) is a field in a table which uniquely identifies each row (or record) in the table.

All PKs in the data models are GUIDs - universally unique Unicode strings - with a few exceptions.

Every row (or record) must have a PK, although sometimes it may look "strange" to add one.

Foreign Key (FK) is a field (or a collection of fields) in one table that uniquely identifies a row of another table. They are used to "connect" records from one table, with records of another "related" table. They are also Unicode strings.

Transaction is a set of operations - inserts, updates and/or deletions of records in one or more tables.

Either ALL of these operations must be performed successfully or NONE.


The classic example is a banking application where we transfer money from one account to another.

Here we actually have 2 operations:

  • Reduce the money in one account
  • and Increase the money in another account

To ensure integrity, both the operations - or the set of operations - must be performed, otherwise NONE should be performed.


An important issue with Transactions is the Isolation Mode of your RDBMs. This is available in C/S RDBMs (HFSQL C/S, SQL Server etc) but not in Classic HFSQL.