select dm.name
from data_models dm
join data_model_values qc
on dm.id = qc.model_id
join data_model_values de
on dm.id = de.model_id
join data_model_values coa
on dm.id = coa.model_id
where qc.attr = 'Query complexity'
and qc.val = 'Hideously mind-boggling'
and de.attr = 'Datatype enforcement'
and de.val = 'Non-existent'
and coa.attr = 'Calculation of aggregates'
and coa.val = 'Almost impossible';
NAME
----------------------
ENTITY ATTRIBUTE VALUE
select name
from data_models
where query_complexity =
'Simple and straightforward'
and datatype_enforcement =
'Strong and complete'
and calculation_of_aggregates =
'As easy as group by';
NAME
----------
RELATIONAL
While it's possible to end up with some dodgy queries and datatypes in a "normal" relational model,
it's much easier to fix the problems when compared to EAV. If you've got any other comparisons
between EAV and normal relational models, please add them in the comments!
To be fair, there are (very) few cases where EAV is appropriate. This provides a nice discussion of when you should/shouldn’t use this.

