Part 2 — Things
4. The biggest boxes
Two engineers argued for a week about whether a shipment can be split. They agreed on every fact. They were using the word shipment to mean two different kinds of thing, and neither knew it.
Two engineers spent a week arguing about whether a shipment can be split into two shipments.
One said obviously yes. You unload half the pallets in Lyon and the rest continue to Paris. Two shipments now.
The other said obviously no. It was one shipment. It happened once, on one truck, on one date. You cannot split an event that already happened.
They agreed on every fact about the trucks, the pallets, and the dates. The argument was not about logistics at all.
What an upper ontology is
An upper ontology is a small set of very general categories that any specific thing fits into. It sits above your domain. Freezer, Shipment, and Customer are domain categories. The upper ontology holds the boxes those go inside.
There are a few well-known ones. BFO is the most widely adopted and is published as an international standard, ISO/IEC 21838-2, which makes it the easiest one to point at when somebody asks for a reference. DOLCE and UFO are the other two you will hear named. UFO is the one behind most of the modeling advice in the next few chapters.
You do not need to adopt one. You need to know the main split, because you are already using it by accident.
The split that matters most
A continuant is a thing that persists. It is wholly present at every moment it exists. A freezer, a store, a person, a pallet. Point at it now and you have all of it.
An occurrent is something that happens. It unfolds over time. At any one instant you have only a slice of it, never the whole. A delivery, a breach, a meeting, an employment.
The test is simple. Ask: can I have all of it right now, at this instant?
A freezer, yes. A three-day delivery, no. At 2pm on Tuesday you have some of the delivery, not the delivery.
Sort some real ones
Easy at first. Then it gets interesting.
Is Freezer a thing that persists, or something that happens?
The thing that ended the argument
The two engineers were both right, because English gave them one word for two categories.
"Shipment" as the boxes on the truck is a continuant. It persists, it has a weight, and you can absolutely split it. Take half off in Lyon and you have two collections of boxes.
"Shipment" as the act of shipping is an occurrent. It started Monday, ended Wednesday, and it is over. You cannot split a completed event any more than you can split last Tuesday.
Once somebody says that out loud, the week-long argument takes four minutes. Name them separately, Consignment and ShipmentJourney, and the model stops lying about which one it means.
Check yourself
Your model has one entity called Inspection, with columns: inspector_id, started_at, completed_at, result, and report_pdf_url. Somebody asks whether an inspection can be paused and resumed. What does the upper ontology tell you?
Two smaller boxes worth knowing
Independent versus dependent. A freezer exists on its own. A temperature does not; it is always the temperature of something. Colours, weights, and statuses are all dependent, which is why they belong as properties rather than as entities of their own.
Roles. Some categories only apply while a thing stands in a relation to something else. Customer, employee, supplier. These get a whole chapter shortly, because they cause more damage than anything else in this part of the book.
One box for everything
Fabric IQ gives you a single kind of container: the entity type. There is no separate category for things that persist and things that happen. There is no place to declare which one you mean.
So Freezer and TemperatureBreach are both entity types, declared the same way, and the tool treats them identically.
That is a reasonable engineering choice, and it means the discipline is entirely yours. Nothing will stop you creating one entity type that mixes both, and nothing will warn you later.
Two habits that help:
Name happenings so they read as happenings. TemperatureBreach, DeliveryCompleted, InspectionRun. If the name is a noun that could be a thing, add the verb back: ShipmentJourney rather than Shipment.
Watch where the data lives. In Fabric, persisting things usually bind to lakehouse tables, and happenings usually arrive as a stream and land in an eventhouse. If an entity type wants to bind to both at once, that is a strong hint you have merged a thing and a happening.
The one trap
When a modeling argument runs longer than an hour and both sides keep saying true things, stop arguing about the domain. Ask whether the disputed word names a thing or a happening. In our experience that is the cause more often than any genuine disagreement about the business.
Next, chapter 5. You can now sort things into the biggest boxes. Chapter 5 goes one level finer and gives you four questions to ask about any category you have named. They are the questions that separate a category you can build on from one that will quietly break your model.
Do it yourself
Build this step in the interactive Ontology Lab.
Open the lab →Milestone
Finished this concept? Mark it learned to track your progress.