【问题标题】:Is this a good attempt at database normalization?这是数据库规范化的一次很好的尝试吗?
【发布时间】:2011-06-28 19:25:03
【问题描述】:

我有一个数据库来处理根据分数对不同类型受伤的人进行分类。例如,有如下测试:

承认痛,出院痛,回家痛
承认记忆、出院记忆、归家记忆

这些测试中的每一个都进行 1-7。现在我的表是这样设置的:

主表

first name, last name  
SSN  
address  
etc.  
pain FK (foreign key)  
memory FK (foreign key) 

疼痛表

autonum PK  
admit  
discharge  
home

内存表

autonum PK  
admit  
discharge  
home

这是否正确标准化?或者我应该有这些表格的疼痛和记忆部分的入院、出院和回家表格?

【问题讨论】:

  • 好的,它的格式不像我想要的那样,所以它几乎没有那么容易阅读。如果有人能理解它,那就更感谢了!
  • 你去。一些很好的阅读在这里可以帮助解决这个问题:stackoverflow.com/editing-help
  • 您是否有其他类型的测试可以稍后添加?您可以创建一个包含测试类型(疼痛、记忆等)、测试顺序(入院、出院、回家等)、患者 FK 和分数的测试表。我在你的任何一张桌子上都没有看到分数。您还需要主表的密钥,并且 SSN 不应用作医疗信息的密钥。
  • 是的,实际上除了疼痛和记忆之外还有更多的测试。但我不想让它这么麻烦。有大约 20 种不同的测试。所以我想我明白了。我需要一个测试表(所有测试名称作为字段)测试序列作为字段(录取,出院)和分数?所以我不需要将测试分成单独的表格?我知道不要将 ssn 用作 PK。但你永远不能打败隐私马太多:p
  • 我认为测试可能包含其他信息,例如测量日期/时间以及谁执行了测试?像这样的医学检测数据库变得非常通用,变成了一个实体/属性/值 (EAV) 数据库。

标签: database database-design ms-access


【解决方案1】:

现有结构的问题在于,对于每个患者,您只能在疼痛表中拥有一个条目,而在记忆表中只能拥有一个条目。我的猜测是这些测试将运行多次。或许还有一个允许额外测试的替代结构可能看起来像这样:

主表
自动数PK
名字
姓氏
社保号
地址
等等。

测试结果表
自动数PK
日期
患者 ID(FK 到主表)
测试类型 ID(FK 到测试表)
测试结果

测试表
自动数PK
测试名称

如果您需要每次测试的额外数据,则必须对该设计进行一些修改。但是根据您的问题,这将允许您为每个人存储多个测试和测试结果

【讨论】:

    【解决方案2】:

    Pain 和 Memory 表不是具有记录类型的同一个表吗?

    测试表

    autonum PK  
    typeID  FK       (Pain/memory)
    admit  
    discharge  
    home
    

    测试类型表

    autonum typeID   PK
    description
    

    【讨论】:

    • 我不确定您所说的记录类型是什么意思?是的,除了它们的类型之外,这些表将是相同的。所以我需要一张包含录取、出院、回家和分数的测试表?然后有一个包含所有不同测试类型的表格,对吗?
    猜你喜欢
    • 1970-01-01
    • 2017-01-25
    • 2018-01-27
    • 2020-05-08
    • 2018-07-08
    • 2011-02-06
    • 2011-01-06
    • 1970-01-01
    • 2011-03-05
    相关资源
    最近更新 更多