表设计当一个表引用多个表时

时间:2011-04-02 16:50:25

标签: database-design ms-access ms-access-2007 normalization field

我有一个数据库,我正在使用Access 2007进行设计,我想知道完成以下操作的最佳方法是什么。

我有四张桌子:

  1. 损伤
  2. 治疗
  3. 发票
  4. 付款
  5. 我希望每个表条目都有零个,一个或多个Notes条目。

    显然,我可以这样做:

    1. InjuryNotes
    2. TreatmentNotes
    3. InvoiceNotes
    4. PaymentNotes
    5. 但我更愿意这样做:

      1. 备注
      2. 但是我对如何进行引用感到困惑。我需要考虑查找表吗?

        1. 备注
        2. NotesLookup
        3. 所以我可以......

          1. 损伤
            • InjuryID ......
          2. 治疗
            • TreatmentID ...
          3. 发票
            • InvoiceID ...
          4. 付款
            • PaymentID
          5. 备注
            • NotesID
            • 注意
          6. NotesLookup
            • 表名
            • ID
            • NoteID
          7. 这是在Access中执行此操作的最佳方式吗?是否有更好/更自然的方式,尤其是允许我依赖Access可以处理保存/解除反射的内置方式(因此我不必编写VBA解决方案)?

            我想我可以删除NotesLookup表并将TableNameID合并到Notes。在这个阶段,我只是想知道我将如何保存这些信息,以及我将如何取消引用视图。

2 个答案:

答案 0 :(得分:3)

使notes表具有记录类型的第二个字段。如果您想要比DB效率更易读,只需使用INJ,TRT,INV,PAY。不需要查找表。这完全足够了。

答案 1 :(得分:0)

使用4个音符表的“明显”方法:

  1. InjuryNotes
  2. TreatmentNotes
  3. InvoiceNotes
  4. PaymentNotes
  5. 由于这些模型分开实体似乎具有特定含义。也就是说,你不会将伤害记录储存在你正在建模的现实世界中存储治疗笔记的同一个地方,对吗?

    此设计还确保在查询这些内容时,您不必在您建议的备注查找表中使用幻数或额外连接。

    此外,如果需要更改任何注释表(例如,需要使用特定类型的每个注释捕获的其他数据),则更改不会对其他注释类型产生影响。