Простой дизайн состоит в том, чтобы иметь таблицы типа
master: [m] is a master & ...
master_dated: master [m] has differing date [d]
detail: "master [m] detail line [l] was on date [d] & ...
Затем вы можете реорганизовать их.Например, замените первые 2 левым соединением из них.Нечто подобное должно быть дизайном, который вы придумали в первую очередь.Если у вас теперь есть одна таблица основных данных, то, вероятно, это выбор из внутреннего / естественного объединения последних, подробностей и совокупности деталей.
master-detail:
( master [m] has differing date [d]
OR master [m] has no differing date
AND [d] = SELECT MAX(d) FROM detail WHERE [m]=m
)
AND [m] is a master & ...
AND master [m] detail line [l] was on date [d] & ...
PS С master_undated, master_dated все еще проще& подробно.Но разные компромиссы.
PS Нормализация заменяет таблицу проекциями на нее, которые естественным образом присоединяются к ней.Переход от единого стола к этим другим уменьшает определенную избыточность, но это не нормализация - очевидно из того, что один не является естественным объединением других.