2

我正在开发一个 Android 应用程序和 JSON Web 服务。Android 应用程序将使用这些 Web 服务。

此外,我将在双方都有一个数据库,服务器端和客户端将具有相同的数据库模式。

我将解释我正在尝试做的事情:

  • 用户创建一个或多个EReport 。
  • 每个EReport都有一个QAPQAP表将是服务器端数据库的副本。
  • 每个QAP都有一个或多个Defect缺陷将是服务器端数据库的副本。
  • 如果需要,用户可以定义缺陷。为此,我添加了EReportDefect表。
  • 一个缺陷可能有一张或多张照片。我创建 EReportDefImg来存储 EReport、EReportDefect 和一个或多个图像之间的关系。

我的问题是:我需要eReportId作为 EReportDefImg 上的 FK

我添加了该列,因为我可以使用它来查找 EReport 的所有缺陷图像。

在此处输入图像描述

4

3 回答 3

1

人的逻辑说,如果有报告缺陷,就必须有报告。所以使用FK。我想这可能会在以后帮助你。

于 2012-09-14T09:45:25.613 回答
1

我需要 eReportId 作为 EReportDefImg 上的 FK 吗?

不。

EReportDefImg.eReportId将允许EReportDefImg一行引用不同于的EReportDefect行。EReportDefect.eReportIdEReportDefImg.eReportId

我添加了该列,因为我可以使用它来查找 EReport 的所有缺陷图像。

您仍然可以EReportDefImg.eReportId通过 JOINing 来做到这一点(没有 )EReportDefImgEReportDefect获得EReportDefect.eReportId.

如果您想避免 JOIN,您可以使用标识关系将 包含eReportIdEReportDefect的 PK 中,然后将其迁移到EReportDefImg.eReportId(然后您可以直接用于过滤,无需 JOIN)。同上defectId

在此处输入图像描述

注意:我添加eReportDefectNo了允许多个s 用于和EReportDefect的相同组合。如果不需要,请删除.EReportDefecteReportDefectNo


顺便说一句,您的模型现在允许单个EReportDefect连接到两个不同QAP的 s(一个通过EReport另一个通过Defect)。这是故意的吗?

于 2012-09-14T10:36:39.040 回答
0

不,你没有,这种设计通常是出于性能原因执行的——省略不必要的连接。如果你没有这样的问题,那就不要这样做。

顺便说一句,您似乎将太多外键放入主键中。这样做是为了帮助保持数据的一致性,但由于性能下降,通常这不是一个好的做法。

顺便提一句。EReportDefect 中的defectId 外键是做什么用的?

于 2012-09-14T14:21:59.707 回答