提问者:小点点

设计三个实体之间的多对多关系


我很难模拟这种情况。我在设计一个基于位置的优惠券系统。用户可以定义区域和优惠,然后将每个优惠关联到多个区域。此外,每个区域可以有多个优惠。所以zone和offer有很多对很多的关系。用户实体拥有这两个实体。只有在同一用户拥有区域和优惠的情况下,才能将它们关联起来。图表会很有帮助。多谢了。


共2个答案

匿名用户

假设用户可以独立于区域和提供是否实际连接而拥有自己的区域和提供,那么您可以做如下操作:

这是一个典型的菱形依赖问题,其中菱形底部必须为两个菱形边引用相同的菱形顶部,这通过使用标识关系来确保,因此顶部PK向两边传播,然后在底部合并(注意zone_offer.user_id前面的FK1和FK2)。

您总是可以添加更多(代理?)如果有外部原因可以这样做,则此模型的关键字,但此基本结构必须以某种形状或形式存在,以确保只能连接同一用户的区域和提供。

匿名用户

以下是您的数据库模型:

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