Most people would agree that metadata-driven systems are more flexible than traditional designs, as the case study shows. Flexibility is generally a desirable trait, but there are a few issues to address.
Clearly, there can be performance penalties with this approach, and they should be considered. However, don't reject the idea on performance grounds before you've investigated it; in many cases the performance penalty is not that severe. Another consideration is knowing where you need flexibility. If you build flexibility in where it isn't needed, it won't improve the system.
Issues that come up with metadata designs include the following: Where should we be looking for abstractions? What does it mean to mix and match instances and schema? How does this work with tagged languages?
What makes this pattern possible are two semantic manipulations:
Shifting the schema to a more abstract definition
Allowing instance data to be used as if it were schema
What was a specific definition of a particular test (alpha time) was replaced by a generic term (test value). Once you've looked at it this way it's hard to go back to the old way of looking at it and believe that alpha time really was metadata, but it certainly was; there could have been hundreds of thousands of rows in this database conforming to this metadata.
The other shift consisted of allowing instance data (rows) to be treated as if they were schema. This is anathema to most DBAs, largely because the separation of DDL from DML causes them to categorize schema and data differently. On the other hand, ontologists mix and match categories and instances so freely, they may not even realize they are doing it.
As we saw in this example, shifting the metadata from the database schema provided us a means to provide additional semantics (in this case the range checks and the inclusion of tests to sample types). Once you begin looking for these opportunities, they show up frequently.
These techniques of applying meta thinking also apply to tagged languages such as XML. Later chapters describe how the level of definition in XML schemas has the same profound effect on the robustness of design as this example.