sql 1对1关系表设置

sql 1对1关系表设置,sql,Sql,如果我有一个父项报表,称为Report,每个报表有一个superporta、subReportB和subReportC。每个子报表只属于一个报表,一对一的关系, 我是否应该设置具有报表的表 Report ------- Id subReportAId subReportBId subReportCId 或者我应该设置每个子报表都有报表Id的表吗 SubReportA ----------- Id ReportId

如果我有一个父项报表,称为Report,每个报表有一个superporta、subReportB和subReportC。每个子报表只属于一个报表,一对一的关系, 我是否应该设置具有报表的表

    Report
    -------
    Id
    subReportAId
    subReportBId
    subReportCId
或者我应该设置每个子报表都有报表Id的表吗

    SubReportA
    -----------
    Id
    ReportId

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

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

哪种方式是最佳实践,为什么?提前感谢您的帮助……

您可以使用连接表将父报表映射到子报表 主报表表可以有父报表和子报表的条目

报告 报告协会
< >我会创建一个连接表,把所有的子报表和主报表都放在同一数据表中。

有几个因素需要考虑。

  • 每个子报表类型是否都有与之关联的不同详细信息列,或者它们是否共享这些详细信息列
  • 将来是否要添加新的子报表类型?如果它们都在同一个表中,则只需添加一行即可,否则需要添加新的表/视图
  • 你将如何使用这些数据?它是否用于报告、事务处理,您需要如何访问和更新它

  • 我个人的观点是保持简单,即将它们作为子表中的子报表类型处理到报表表中。这意味着一个报表与多个子报表的关系。

    由于您有此角色,一个报表只有一种类型的每个子报表,反之亦然,正确的模型是:

    表格报告

    Report
    id PK
    
    表子报表

    Subreport
    id PK
    idReport (FK->report)
    idTypeSubReport (FK->typeSubReport)
    (add a unique with id,idReport)    
    
    和表类型子报表

    TypeSubReport
    id
    description
    
    这样,您就不会在任何地方有重复的数据


    希望有帮助。

    连接表不是适合多对多的吗?这似乎没有必要。我可以用我提供的两种方案中的任何一种来完成这项工作,如果我不需要,我真的不想再添加一个表。@user1220099,您如何通过使用ID指示子报表a、b、c用于报表1,子报表d、e、f用于报表2。因此,要么报表1为每个子报表都有一个id,要么每个子报表都为报表有一个id。我只是想找出最佳实践。@user1220099,连接表将告诉您这种关系。主表可以配置每个报表,而不需要知道是子报表还是主报表。这不适合多对多设置吗?每个报表只有每个子报表中的一个,每个子报表有一个报表,所以它们都是1对1…那么您是将子报表的Id放在报表表中还是将报表的Id放在每个子报表表中?这就是我想弄明白的…因为一个报表可以有许多子报表,所以不能将其放入报表表中,因为这会导致重复的报表ID。您可以将报表id放入子报表表中,因为每个子报表id只能有一个父报表id。如果您需要子报表类型维度,这是合适的模型。
    Subreport
    id PK
    idReport (FK->report)
    idTypeSubReport (FK->typeSubReport)
    (add a unique with id,idReport)    
    
    TypeSubReport
    id
    description