sql 1对1关系表设置

时间:2014-10-15 17:27:13

标签: sql

如果我有一个父项报告,称为报告,每个报告都有1个supReportA,subReportB和subReportC。每个子报告只属于1个报告,1对1的关系, 我应该使用

的报告表来设置表格
    Report
    -------
    Id
    subReportAId
    subReportBId
    subReportCId

或者我应该设置每个子报告都有报告ID

的表格
    SubReportA
    -----------
    Id
    ReportId

    SubReportB
    ----------
    Id
    ReportId

    SubReportC
    ----------
    Id
    ReportCId

哪种方式是最佳做法,为什么?感谢您的帮助......

4 个答案:

答案 0 :(得分:1)

由于你有这个角色,一个报告只有一个类型的每个子报告,反之亦然,你的正确模型将是:

表格报告

Report
id PK

表子报告

Subreport
id PK
idReport (FK->report)
idTypeSubReport (FK->typeSubReport)
(add a unique with id,idReport)    

表TypeSubReport

TypeSubReport
id
description

这样您就不会在任何地方重复数据。

希望它有所帮助。

答案 1 :(得分:0)

您可以拥有将父报告映射到子报告的JUNCTION表 主报表可以包含父报表和子报表的条目。

报告

 Id
 subReportAId
 subReportBId
 subReportCId

ReportAssociation

parentReportId  subReportId
Id               subReportIDA
Id               subReportIDB
Id               subReportIDC

答案 2 :(得分:0)

我会创建一个联结表,将所有子报表和主报表放入同一个数据表中。

答案 3 :(得分:0)

有几个因素需要考虑。

  1. 每个subReport类型是否都有与之关联的不同详细信息列,或者他们是否共享这些列?
  2. 您将来会添加新的子报告类型吗?如果它们都在同一个表中,就像添加一行一样简单,如果没有,那么你需要添加新的表/视图。
  3. 您打算如何使用这些数据?它是用于报告,事务处理,您如何访问和更新它?
  4. 我个人的意见是保持简单,即将它们作为子表中的子报表类型对待报表。这意味着一个报告与许多子报告关系。