来自域模型的 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。
希望得到一些关于如何在数据库中表示的帮助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。