Database 来自域模型的3NF规范化表
希望得到一些关于如何在数据库表中表示这一点的帮助(第三种标准形式)。我觉得我所做的是不正确的。我知道,对于一对多关联,“1”表中的主键(在本例中为警报)应包含在其子类中,但是我不确定文本响应和语音响应的主键应该是什么 我所拥有的看起来并不正确,但我知道每个对象都需要一个唯一的ID。注意:ObservationId属性是从pic中删除的从1到多的类 到目前为止,我掌握的表格有: 警报:警报ID(主键),警报类型,观察ID TextResponse:TextResponseId(主键),AlertID(FK),TextResponse 语音应答:语音应答ID(PK)、警报ID(FK)、声音剪辑Database 来自域模型的3NF规范化表,database,database-design,database-normalization,3nf,Database,Database Design,Database Normalization,3nf,希望得到一些关于如何在数据库表中表示这一点的帮助(第三种标准形式)。我觉得我所做的是不正确的。我知道,对于一对多关联,“1”表中的主键(在本例中为警报)应包含在其子类中,但是我不确定文本响应和语音响应的主键应该是什么 我所拥有的看起来并不正确,但我知道每个对象都需要一个唯一的ID。注意:ObservationId属性是从pic中删除的从1到多的类 到目前为止,我掌握的表格有: 警报:警报ID(主键),警报类型,观察ID TextResponse:TextResponseId(主键),AlertI
非常感谢您的帮助。我可以看到您可能忽略了一个可能的依赖关系。只有当
AlertId
与文本/声音内容之间没有关系时,您当前的设计才会标准化。但是,在实践中,您可能会多次看到相同的警报。在当前的设计中,您将多次存储相同的文本/语音内容。要解决此问题,可以通过将两个响应表更改为纯桥接表来重构:
TextAlert: TextResponseId, AlertID (primary key is both columns)
VoiceAlert: VoiceResponseId, AlertId (PK both columns)
然后,创建两个新表来存储实际的文本/语音内容:
TextResponse: TextResponseId (PK), TextResponse
VoiceResponse: VoiceResponseId (PK), SoundClip
现在,对于多次出现的相同警报内容,您的设计非常健壮
我可以提出的另一个意见是,实际上,您可能只需要一个响应表,它可以存储文本或声音,可能是一个blob。两个响应表中的外键是什么?这对我来说并不清楚。AlertId用于我想象的两个方面——我正在使用的教科书说明了“一对多关联”——将“一”类的主键属性添加到表示“多”的表中“上课。在这种情况下,我想问一下,您是否需要为语音和文本响应设置单独的表格?您好。请阅读我对你最近的另一个问题的评论。你怎么能问规范化问题却不给出FDs?你的教科书会告诉你如何将模型映射到表格,你被困在哪里了?(什么是您的教科书?)您的教科书是否涉及建模子类型?PS请通过编辑澄清,而不是评论。重新评论你(现在已删除)最近的其他问题,也与此相关:奇怪的是,你称“请谷歌‘stackexchange作业’&展示你的工作理由”和“帖子应该告诉我们发生了什么”不是“建设性反馈”。你也不会按照我的意见行事。照目前的情况,你的问题需要(好的)答案才能从头开始复制和应用你的教科书。你的短信说你要做什么&你被困在哪里了?PS无论是你的帖子还是被接受的答案都没有显示出对“正常化”的理解。非常感谢Tim,这是非常重要的helpful@LukeJ他们可能还想让你找到其他的问题,但我只是想指出对我来说是显而易见的。可能会盯着实际数据看一会儿,然后尝试寻找其他东西。