【问题标题】:Designing many to many relationship between three entities设计三个实体之间的多对多关系
【发布时间】:2013-08-09 10:44:56
【问题描述】:

我无法模拟这种情况。 我正在设计一个基于位置的优惠券系统。用户可以定义区域和报价,然后将每个报价与多个区域相关联。此外,每个区域可以有多个报价。所以 zone 和 offer 有一个多对多的关系。用户实体拥有这两个实体。仅当同一用户同时拥有区域和优惠时,才能关联区域和优惠。 图表可能会很有帮助。 谢谢。

【问题讨论】:

  • 这个问题似乎是题外话,因为它是关于软件设计而不是开发。

标签: database-design entity-relationship


【解决方案1】:

假设用户可以独立于区域和优惠是否实际连接而拥有自己的区域和优惠,您可以执行以下操作:

这是菱形依赖的经典问题,其中菱形 bottom 必须为 both 菱形 引用相同的菱形 top,这是通过使用识别关系来确保的,因此顶部的 PK 向下传播,然后在底部合并(注意 ZONE_OFFER.USER_ID 前面的 FK1 和 FK2)。

如果有外部原因,您始终可以向此模型添加更多(代理?)键,但此基本结构必须以某种形状或形式存在,以确保只有区域和提供的相同 em> 可以连接用户。

【讨论】:

    【解决方案2】:

    这是您的数据库模型:

    Tbl_Zone
        id_Zone not null
        id_User not null
        zoneDescription not null
        ....
    
    Tbl_Offer
        id_Offer not mull
        id_User not null
        offerDescription not null
        ....
    
    Tbl_ZoneOffer
        id_ZoneOffer
        id_Zone not null
        id_Offer not null
    

    回到您的用户规则,这将成为您业务逻辑的一部分,其中表格将在显示之前进行过滤:

    SELECT * FROM Tbl_Zone WHERE id_User = myUserIdentifier
    SELECT * FROM Tbl_Offer WHERE id_User = myUserIdentifier
    

    并且,对于每个区域可用的优惠列表:

    SELECT zoneDescription, offerDescription FROM Tbl_ZoneOffer 
        INNER JOIN Tbl_Zone on Tbl_ZoneOffer.id_Zone = Tbl_Zone.id_Zone 
        INNER JOIN Tbl_Offer on Tbl_ZoneOffer.id_Offer = Tbl_Offer.id_Offer
        WHERE Tbl_Zone.id_User = myUserIdentifier
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-04
      • 2021-04-14
      • 2017-07-12
      • 2021-05-16
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      相关资源
      最近更新 更多