database-design - 添加(或不添加)FK 以使 SELECT 更简单

标签 database-design foreign-key-relationship

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

此外,我将在两侧都有一个数据库,并且服务器端和客户端将具有相同的数据库架构。

我将解释我想要做什么:

  • 用户创建一个或多个电子报告
  • 每个电子报告都有一个QAPQAP 表将是以下内容的副本 服务器端数据库。
  • 每个QAP都有一个或多个缺陷缺陷将是副本 服务器端数据库。
  • 用户可以根据需要定义缺陷。为了做到这一点,我有 添加了 EReportDefect 表。
  • 缺陷可能包含一张或多张照片。我创造 EReportDefImg 用于存储 EReport、EReportDefect 与一张或多张图像之间的关系。

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

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

enter image description here

最佳答案

Do I need eReportId as FK on EReportDefImg?

没有。

EReportDefImg.eReportId 将允许 EReportDefImg 行引用 EReportDefect 行,以便 EReportDefect.eReportIdEReportDefImg.eReportId 不同。

I've added that column because I could use to find all defect's images for an EReport.

您仍然可以通过连接 EReportDefImgEReportDefect 来获取 EReportDefect.eReportId.

如果您想避免 JOIN,可以使用标识关系将 eReportId 包含在 EReportDefect 的 PK 中,这样也会将其迁移到 EReportDefImg.eReportId (然后您可以直接使用它进行过滤,无需 JOIN)。 defectId 也是如此。

enter image description here

注意:我添加了 eReportDefectNo,以允许 EReportDefect 的同一组合有多个 EReportDefect。如果不需要,请删除 eReportDefectNo


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

关于database-design - 添加(或不添加)FK 以使 SELECT 更简单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12421939/

相关文章:

MySQL - 自动增量 + 复合主键 - 性能和完整性

mysql - 将自引用数据插入复制表

database - 必要的可空外键的任何示例?

database - 我应该创建一个可以为空的外键还是创建一个新表?

postgresql - 存储过程中的业务逻辑与中间层

sql - 使用一张表和分开多表各有优缺点吗?

sql - 在 MySQL 中使用外键时出现问题

sql-server - SQLXML 是否破坏了 1NF?

sql - 关系和多列/复合唯一键

python - SqlAlchemy 与特定列的关系