Как лучше всего представить атрибут, который появляется в основных и подробных записях? - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть простое отношение master-detail, в котором оба объекта имеют общий атрибут (который является временной меткой и не является частью ключа.) Подробные записи ранжируются (некоторым другим атрибутом) сверху вниз , Бизнес-правило таково: (a) Если есть подробные записи, примените временную метку верхней к основной; (б) в противном случае мастер должен иметь временную метку независимо от того; и (c) (редко) разрешать мастеру иметь временную метку, отличающуюся от метки топ-записей. Наиболее распространенным случаем является (а), и я бы хотел избежать дублирования временной метки как в основной, так и в верхней детали. Как бы вы разработали для этой ситуации? Большое спасибо

1 Ответ

1 голос
/ 10 апреля 2019

Простой дизайн состоит в том, чтобы иметь таблицы типа

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 Нормализация заменяет таблицу проекциями на нее, которые естественным образом присоединяются к ней.Переход от единого стола к этим другим уменьшает определенную избыточность, но это не нормализация - очевидно из того, что один не является естественным объединением других.

...