Ensemble Dinner

Ensemble modeling is a family of data modeling approaches optimized for data warehouse. Its basic idea is to break things into parts to increase flexibility and to change them independently. A group of people met in Stockholm to find the least common denominator of several ensemble modeling approaches. I had the luck to be invited to this “ensemble dinner”.

Because I attended one of his Data Vault courses in Stockholm this week, Hans Hultgren had the idea to introduce me to a group of Swedish data modeling experts involved in different types of Ensemble modeling. He organized an “Ensemble Dinner” and invited “the key people behind Anchor Modeling, Focal Point Modeling and Hyper Agility Modeling to join as we have the man behind Head & Version here in Stockholm“. The “man behind Head & Version” was me 😉

Ensemble groupPoe Eriksson, Dani Schnider, Lars Boström, Hans Hultgren, Lars RönnbÀck, Patrik Lager

The “dinner” was more a kind of a very agile workshop with hot pizza, bad beer, good white wine and great conversations about the different flavors of ensemble modeling techniques. I had the pleasure to meet Lars RönnbĂ€ck (“the man behind Anchor Modeling“), Patrik Lager and Poe Eriksson (“the men behind Focal Point Modeling“), Lars Boström (“the man behind Hyper Agility“) and of course Hans Hultgren (“one of the men behind Data Vault Modeling“).

All of us have the same issues in modeling Data Warehouses and solve them with different, but in some ways similar approaches: Each entity is decomposed into different component parts that can be changed independently. The whole set of components of an entity is an ensemble. Therefore all these modeling approaches can be defined as different styles of ensemble modeling.

Head version notes

I had the chance to present a short overview of the Head & Version modeling method that Trivadis uses in several data warehouse projects. Although I explained this approach quite often in customer projects and data warehouse courses, I never before had an audience with so many good, but also critical questions. But I survived – and the Head & Version method, too…

Our Head & Version method is a weak form of ensemble modeling: We split the data into static data (stored in the head table) and dynamic data (stored in the version table). Relationships are not separated, i.e. the foreign keys are stored like any other attributes either in the head or the version table, depending on whether they can be changed during the lifecycle or not. Data Vault Modeling separates the business key (stored in a Hub) from all attributes (stored in Satellites). Relationships are separated and stored in Links. Anchor Modeling goes even further and stores each attribute and relationship in a separate table and connects them to the business key (the Anchor). Focal Point Modeling and Hyper Agility Modeling use a more generic approach and store the attributes as pairs of names and values.

It is easy to find information about Data Vault and Anchor Modeling on the internet. But the other modeling techniques are not very well known. Although the Head & Version method is explained in our book Data Warehousing mit Oracle (unfortunately only available in German), the only public documents on the internet that mention this approach are the Trivadis white paper Comparison of Data Modeling Methods for a Core Data Warehouse and a short blog post of Hans Hultgren. Patrik Lager asked me for more information, and we made the following deal: He will publish a white paper about Focal Point modeling, and I try to do the same about Head & Version modeling. Let’s see who is first 🙂

More impressions of the Ensemble dinner can be found on Lars RönnbĂ€ck’s blog post Great Minds Think Alike.

Ensemble pizza

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s