In a data modeling discussion forum, a practitioner recently asked:
Has anyone seen an object super-type used to encompass both Party and System Component?
Examples of Parties: people, organizations
Examples of System Components: projects, proposals, computer systems
In over a dozen responses, not one person asked for a definition!
I’m surprised … no amazed … no horrified … by this discussion. It pretty well illustrates my frustration with data modeling.
I should simply point out that in the real world, projects and proposal are not system components in the sense probably meant, then stop right there. Clearly the question mixes apples and oranges. But let’s work it through a bit more.
What is the thing that that the proposed supertype (more general concept) would represent? … Which is to say, how would you define the notion in your head when you say the corresponding thing exists in the real world?
If you can’t define the concept in any coherent way, that should be the end of the discussion. This is why I recommend starting with concept models, instead of data models.
Since I’ve done a few data models in my time, I’ll jump to the other side of the fence and propose a definition for the sake of discussion.
more general concept x: an agent that can make and respond to requests
Systems, people, and organizations can all do those things. However, proposals can’t … unless you are talking about a software object representing a proposal. So here’s a revised definition …
more general concept x: a software agent that can make and respond to requests
But any software object can basically do that. Is that what is meant? Are we talking about (a) things that exist (can be jointly classified) in the real world, or (b) things that exist in software representations of the real world?
My fear is that concept x is simply a design artifact that doesn’t really correspond to anything. It’s just an optimization for technology’s sake. Do we really want to go there?!