如何最好地表示主数据和详细记录中出现的属性?

问题描述 投票:-1回答:1

我有一个简单的主 - 细节关系,其中两个实体共享一个属性(恰好是时间戳,而不是键的一部分。)细节记录从上到下排名(通过其他一些属性)。业务规则是:(a)如果有详细记录,则将顶部记录的时间戳应用于主记录; (b)否则,船长必须有时间戳; (c)(很少)允许主人的时间戳与顶部详细记录的时间戳不同。最常见的情况是(a)我想避免重复主要和最高细节中的时间戳。你会如何设计这种情况?非常感谢

database-design rdbms database-normalization
1个回答
1
投票

一个简单的设计是让表格像

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和detail更简单。但不同的权衡。

PS Normalization通过对其进行自然连接的投影来替换表。从单个表转移到其他表会减少某些冗余,但这不是规范化 - 从单个表不是其他的自然连接可以看出。

© www.soinside.com 2019 - 2024. All rights reserved.