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

Database design 设计三个实体之间的多对多关系,database-design,entity-relationship,Database Design,Entity Relationship,我很难模拟这种情况。 我正在设计一个基于位置的优惠券系统。用户可以定义区域和优惠,然后将每个优惠关联到多个区域。此外,每个区域可以有多个报价。因此,区域和报价之间存在多对多关系。用户实体拥有这两个实体。仅当同一用户同时拥有区域和优惠时,才能将其关联。 图表可能非常有用。 谢谢 以下是您的数据库模型: Tbl_Zone id_Zone not null id_User not null zoneDescription not null .... Tbl_Offer

我很难模拟这种情况。 我正在设计一个基于位置的优惠券系统。用户可以定义区域和优惠,然后将每个优惠关联到多个区域。此外,每个区域可以有多个报价。因此,区域和报价之间存在多对多关系。用户实体拥有这两个实体。仅当同一用户同时拥有区域和优惠时,才能将其关联。 图表可能非常有用。
谢谢

以下是您的数据库模型:

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

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

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


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

此问题似乎与主题无关,因为它与软件设计而非开发有关。