如何最好地表示同时出现在主记录和明细记录中的属性?

How to best represent an attribute that appears in both master and detail records?

我有一个简单的主从关系,其中两个实体共享一个属性(恰好是时间戳,而不是键的一部分。)详细记录从顶部(通过其他一些属性)排名到底部。业务规则是: (a) 如果有 detail 记录,则将最上面的时间戳应用到 master; (b) 否则,master 无论如何都必须有一个时间戳; (c)(很少)允许 master 有一个与顶级详细记录不同的时间戳。 最常见的情况是 (a),我想避免在 master 和 top detail 中重复时间戳。您将如何针对这种情况进行设计? 非常感谢

一个简单的设计是table喜欢

master: [m] is a master & ...
master_dated: master [m] has differing date [d]
detail: "master [m] detail line [l] was on date [d] & ...

然后您可以重新组织这些。例如,用它们的左连接替换前 2 个。像这样的东西应该是你首先想到的设计。如果您现在有一个主从 table,那么大概它是 select 来自后者的 inner/natural 连接,细节和细节的聚合。

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 规范化通过自然连接回它的投影替换了 table。从你的单身 table 转移到这些其他人减少了某些冗余,但这不是规范化——从单身不是其他人的自然加入可以看出。