1

我正在尝试向应用程序添加功能,用户可以在其中订阅所做的更改:

  • 到另一个实体(由任何用户)
  • 由另一个用户(对任何其他实体)
  • 两者的组合(最后一个是可选的,但使问题更具挑战性)

我想知道如何最好地将这些规则保存到数据库中。

我自然倾向于每个给定的实体(包括用户本身),我添加了一个额外的 UserSubscription 表/实体(例如,PublisherUserSubscription、BookUserSubscription、UserUserSubscription)

这意味着订阅将保持完整性并强制执行。但是,如果我以后更改订阅模型,这似乎会迅速增加我需要的表数量,并且可能导致非常脆弱的设计。(可能需要更新每个现有表)。

鉴于这是一个相当普遍的现实世界场景,我预计会有一些模式。谁能推荐一些?

4

1 回答 1

1

我讨厌建议实体/属性/值模式,但为什么不使用一个简单的表格,例如:

rulename    Observer   ObjectClass  ObjectId
========    ========   ===========  ========

每个场景 ObjectToUser/UserToObject 一个表?

如果您想观察特定实体,例如特定书籍,请将对象的主键添加到 EAV 模式中。

然后,如果您需要检查是否触发了规则,您可以从表中的“ObjectClass”查询“ObjectId”并触发列出的任何规则。

于 2009-09-24T22:43:36.543 回答