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

Database design 如何最好地表示同时出现在主记录和详细记录中的属性?,database-design,rdbms,database-normalization,Database Design,Rdbms,Database Normalization,我有一个简单的master-detail关系,其中两个实体共享一个属性,该属性恰好是一个时间戳,并且不是键的一部分。详细记录按其他属性从上到下排列。业务规则是:a如果有详细记录,则将顶部记录的时间戳应用于主记录;b否则,主机必须具有时间戳;c很少允许主记录有不同于顶部细节记录的时间戳。 最常见的情况是a,我希望避免在主细节和顶部细节中重复时间戳。您将如何设计这种情况? 非常感谢一个简单的设计就是有这样的表格 master: [m] is a master & ... master_dat

我有一个简单的master-detail关系,其中两个实体共享一个属性,该属性恰好是一个时间戳,并且不是键的一部分。详细记录按其他属性从上到下排列。业务规则是:a如果有详细记录,则将顶部记录的时间戳应用于主记录;b否则,主机必须具有时间戳;c很少允许主记录有不同于顶部细节记录的时间戳。 最常见的情况是a,我希望避免在主细节和顶部细节中重复时间戳。您将如何设计这种情况?
非常感谢

一个简单的设计就是有这样的表格

master: [m] is a master & ...
master_dated: master [m] has differing date [d]
detail: "master [m] detail line [l] was on date [d] & ...
然后可以重新组织这些。用它们的左连接代替前两个。像这样的东西应该是你首先想到的设计。如果您现在有一个主细节表,那么它可能是从后者的内部/自然连接中选择的,detail&一个细节的聚合

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:有了主日期、主日期和细节,事情就更简单了。但是不同的权衡


PS规范化通过表的投影替换表,该投影自然地连接回表。从单个表移动到这些其他表可以减少某些冗余,但这并不明显,因为单个表不是其他表的自然连接。

Hi。请查看如何提问,点击谷歌的“stackexchange作业”和投票箭头鼠标悬停文本。这是模糊的。请给出一个尽可能多的设计DDL,我们可以详细讨论。PS在给出表格时准确地说明了当一行在表格中时,该行在其列值方面对业务情况的描述。基数、约束和if-then-else结果没有帮助。Master和Detail不共享一个属性。Master和Detail都有一个timestamp类型的属性,在某些情况下其值可能相同。至于我如何处理这个问题,我先忽略这一部分:我希望避免在主控和顶级细节中重复时间戳。感谢这个提示,很有意义。谢谢,非常有帮助。很抱歉提交的内容不符合标准,事情会有所改善。您可以随时编辑您的问题以改进它。但请不要否定任何合理的答案。你提高了投赞成票的机会,减少了投反对票的机会&可能会使投反对票的机会逆转。您是否理解通过单击复选标记接受对您的问题最有帮助的答案?询问者和回答者享有声誉。当你有足够的声望时,你可以投赞成票和反对票,等等。