代码之家  ›  专栏  ›  技术社区  ›  Ahmed

这应该如何设计?

  •  0
  • Ahmed  · 技术社区  · 15 年前

    我正在做一个项目,让用户选择一些科学作家和专栏作家,并跟踪他们的活动。用户可以通过以下方式跟踪作者的活动:

    1. 明确选择作者,然后跟踪他
    2. 选择一个频道(其他用户跟踪的作者列表)并跟踪整个频道
    3. 下面是DB的模式是什么样子的(仅针对这个特定的用例)

    DB Model http://img526.imageshack.us/img526/7278/dbmodel.png
    这种设计应该是可行的。如果用户点击作者来跟踪,插入会很快进入数据库,并且用户界面会动画(通过jquery使用ajax),指示过程的成功或失败。但是,如果用户选择了一个通道,事情会有所不同。下面是我想到的,当用户选择一个频道时,我从这个频道中提取所有作者,然后在用户的作者表中插入新条目。现在假设通道包含1000个或更多的用户,插入需要一些时间,并且动画图形用户界面的速度不会像预期的那么快。所以,有人会推荐其他方法来改进这个(即使我不得不改变整个设计)。
    谢谢

    4 回复  |  直到 15 年前
        1
  •  4
  •   cletus    15 年前

    你需要问自己的一件事是:

    如果用户选择一个拥有100个作者的频道,而该频道发生了更改,那么这些更改是否应传递给用户?这个问题的答案将在很大程度上决定设计。

    如果需要自动流通,那么在用户选择通道时不要复制作者。设计需要容纳一个频道订阅。

    在OO术语中,用户有零个或多个订阅,这是作者或频道的父类。一个渠道与作者有一对多的关系。实体表示基本相同。您只需要订阅两个实体的父级。

    如果您不想通过更改流,您需要对通道进行版本或执行您正在执行的操作:将作者从通道复制到用户的订阅中。

        2
  •  1
  •   balpha    15 年前

    您可以将频道视为元作者,即订阅频道的操作与订阅作者的操作非常类似。这给了你两个好处:1。当新作者加入频道时,该频道的所有用户都会自动订阅该作者。2。可能用户订阅了Isaac Newton。然后她也订阅了“物理学家”频道,但后来又取消了订阅。从用户那里删除“物理学家”订阅也会删除艾萨克牛顿,这可能是不需要的。

        3
  •  0
  •   Anthony Kong    15 年前

    我建议换一种说法。

    简而言之,您希望管理“订阅”。订阅有两种类型:“个人作者”和“频道”。

    因此,您可以分别定义一个名为subscription的基类和两个子类author和channel。“channel”行应该能够与作者保持1:N的关系。

    然后在前端,所有订阅都将在固定时间内完成。

    此外,当信道中的组成作者发生变化时,该设计还将涉及数据维护问题。

        4
  •  0
  •   kenny    15 年前

    我的方法是让People表同时包含用户和作者,而author表只包含authors的People键。然后,作者将创建一个成员表,该表类似于链接表。