Database Design where there's three parent tables and only 1 child table
Your ResultsForType* and ResultSetFoType* tables are the same, there is no difference between them. Your problem is only about the Type?Tests tables.

Your problem is very common: how to map class inheritance and polimorphism to the ORM level. There are two most common practices to solve it:


What you are currently doing. You could make it redundency-free, on the cost of a much more complicated table structure. In exchange, your database will be pure and perfect, although a little bit overkill.
You can unify the Type?Tests tables, latter I explain, how.
Such a solution, where you get everything without losing anything, does not exist.


The sad truth is that SQL does not know polyporhism, and this is the ultimate cause of your current troubles. But it knows something which can help a lot to achieve some quite similar.

It can nullable values.

In your case, I would simply use instead of the Type?Tests tables this:

+----+------------+-----+-----+------------+------------+
| id | TestTypeId | min | max | daysStored | NoMoreThan |
+----+------------+-----+-----+------------+------------+


The essence is that we use a union of all possible columns in all the used classes, plus yet another column to identify the type.

Use the following constraints:


TestTypeId should be 1, 2 or 3
If TestTypeId=1, daysStored and NoMoreThan should be NULL
If TestTypeId=2, NoMoreThan should be NULL
If TestTypeId=3, daysStored should be NULL


Constraints are very useful - they make things guaranteed.