来自域模型的 3NF 规范化表

3NF Normalization tables from Domain Model

希望得到一些关于如何在数据库中表示的帮助table(第三范式)。我觉得我所做的是不正确的。我知道对于一对多关联,“1”table(在本例中为 Alert)的主键应该包含在它的子 classes 中,但是我不确定主键应该是什么用于文本响应和语音响应?

我所拥有的看起来不正确,但我知道每个对象都需要一个 uniqueId。注:ObservationId属性是从1到很多class已被截图

我目前拥有的table是:

警报:AlertId (PK),AlertType,ObservationId

TextResponse:TextResponseId (PK)AlertID (FK)、TextResponse

VoiceResponse:VoiceResponseId (PK)AlertId (FK)、SoundClip

感谢任何帮助。

我可以在这里看到一个可能的依赖项,您可能忽略了它。只有在 AlertId 和 text/sound 内容之间没有关系时,您当前的设计才会被规范化。但是,在实践中,您可能会多次看到相同的警报。在您当前的设计下,您将多次存储相同的 text/voice 内容。要解决此问题,您可以通过将两个响应 tables 更改为纯桥 tables:

来重构
TextAlert:  TextResponseId,  AlertID (primary key is both columns)
VoiceAlert: VoiceResponseId, AlertId (PK both columns)

然后,创建两个新的 table 来存储实际的 text/voice 内容:

TextResponse:  TextResponseId  (PK), TextResponse
VoiceResponse: VoiceResponseId (PK), SoundClip

现在,您的设计对于不止一次出现的相同警告内容是稳健的。

我可以做的另一条评论是,在实践中您可能希望只有一个响应 table,它可以存储文本或声音,也许作为一个 blob。