例如,用例
推广可以适用于所有渠道,也可以是几个渠道,
关系
多对多
问题
关系A promotion can be applied to all channels
的建模
我的思想
如果我们没有太多的通道,我们可以将每个通道添加到它们的关系表中,如果我们有上千个通道,那么处理这种情况的最佳实践是什么呢?
发布于 2020-05-05 15:34:03
-- channel CHN exists.
--
channel {CHN}
PK {CHN}
-- Promotion PRO exists.
--
promotion {PRO}
PK {PRO}
-- Promotion PRO is a global promotion.
-- (applied to all channels)
--
glob_pro {PRO}
PK {PRO}
FK {PRO} REFERENCES promotion {PRO}
-- Promotion PRO applies to channel CHN.
--
chn_pro {CHN, PRO}
PK {CHN, PRO}
FK1 {CHN} REFERENCES channel {CHN}
FK2 {PRO} REFERENCES promotion {PRO}
这可能是一种情况,一个推广只适用于少数几个渠道,后来的推广被宣布为全球,这是可以的。
例如:
{C1..C100}
.
{P1 .. P10}
,100个频道通过在chn_pro
.(C3, P7)
和(C5, P7)
来向C3
和C5
频道应用促销P7
,您决定通过将(P7)
插入glob_pro
使促销P7
成为全局的,现在它适用于所有channels.glob_pro
中的(P7)
,它仅再次应用于C3
和d26。H 227G 228
若要列出所有渠道的所有促销活动,请使用视图。
-- Promotion PRO applies to channel CHN.
--
CREATE VIEW all_channel_promotions
AS
SELECT CHN, PRO FROM chn_pro
UNION
SELECT CHN, PRO
FROM channel
JOIN glob_pro on True ;
注意:
All attributes (columns) NOT NULL
PK = Primary Key
FK = Foreign Key
发布于 2020-05-05 13:54:12
您应该有一个promotion_channels
表(我认为您正在调用"relations“,但这个名称很模糊),并将任何匹配的通道添加到表中。对于影响所有渠道的促销活动,应增加所有渠道。
为什么?因为你可能会随着时间的推移而增加频道。你不希望旧的晋升申请到新的渠道。
当然,您也可以有一个“特殊”通道,它意味着所有的通道--也许使用channel_id
Of 0
。然后,任何寻找通道的代码都可以考虑到这一点。这有点复杂,容易出错,但其中大部分可能隐藏在视图和其他构造中。
但是,由于频道可能会随着时间的推移而改变,我不建议采用这种方法。
https://stackoverflow.com/questions/61614754
复制相似问题