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

时间:2013-08-09 10:44:57

标签: database-design entity-relationship

我无法模拟这种情况。 我正在设计一个基于位置的优惠券系统。用户可以定义区域和要约,然后将每个要约关联到多个区域。每个区域也可以有多个优惠。因此区域和提供有多对多的关系。用户实体拥有两个实体。只有当同一用户拥有这两者时,才能关联区域和要约。 图表非常有用。 谢谢。

2 个答案:

答案 0 :(得分:2)

假设用户可以拥有自己的区域并独立提供区域和商品是否实际连接,您可以这样做:

enter image description here

这是钻石形状依赖的典型问题,其中钻石底部必须为两者钻石引用相同的钻石顶部通过使用识别关系来确保这一点,以便顶部PK向下传播,然后在底部合并(注意ZONE_OFFER.USER_ID前面的FK1和FK2)。

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

答案 1 :(得分:0)

这是您的数据库模型:

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