【问题标题】:"Rebuttals" and "Comments" - Two DB-Tables or One?“反驳”和“评论”——两个 DB 表还是一个?
【发布时间】:2010-11-06 10:39:41
【问题描述】:

我正在为一个朋友做一个项目,但我遇到了一个艰难的决定。该项目由论文组成,每篇论文都可以提出质疑,也可以发表评论。事情是这样的,只有一个人能够挑战文章,然后其他人都被锁定,只能发表评论。

反驳只能是两个深度的回应,第一个 2,000 字,第二个 500 字。到那时,没有更多的反驳 - 如果观众觉得话题没有用尽,剩下的讨论将在 cmets 中进行(n 个字符的固定长度,与反驳不同)。

所以我最初认为反驳和 cmets 在结构上是相同的,我只会在我的 cmets 表中添加一个布尔字段来指示评论是否是_rebuttal。但我对这个方向有点不确定。

你会建议什么集体?每篇文章只能在两个人之间进行讨论,并且两个人只能发言 2 次。与 cmets 非常相似,但是是分开的。

【问题讨论】:

  • 所以它像对话吗? A写东西,B不同意,然后A可以回复B,B可以回复A的回复,之后任何人说的都是评论?
  • 正确,尼拉莫。 A 人发表了一篇文章。 B 对某些事实提出质疑,然后辩论开始。此后每次发表两篇文章后,它就“筋疲力尽”了,唯一允许的交流是通过与辩论本身不同的“cmets”进行的。
  • 所以cmets可以在文章发布后的时间输入,对吗?是否输入反驳无关紧要?
  • 可以在发表反驳之前和之后发表评论。只有当用户在其他任何人之前选择“Dispute this Essay”时,评论才会被视为反驳。

标签: database-design theory normalization table-structure


【解决方案1】:

所以我可能有一个“对话”表,其中包含文章发布者的用户 ID、单个响应者(最初为 NULL)以及可能的标题或摘要的字段。另一个表将包含“essays”,其中包含文章或反驳者的用户 ID、conversationID、帖子正文和帖子计数的字段,以将它们按顺序排列。最后,我会有一个“cmets”表,其中包含评论海报用户 ID、将它们链接到论文帖子的文章 ID、将它们置于线程模式(如果合适的话)的评论 ID,当然还有评论正文。

【讨论】:

  • +1 我喜欢单独的元对话表的想法,它能够为相关辩论命名。我也喜欢你回答的按位方面:1 个表还是 2 个表? 3 张桌子。
  • 我经常这样想。通常,对每个“事物”进行建模是一件简单的事情,如果事物属于某种组,那么您也需要对它们进行建模。
【解决方案2】:

好吧,如果不了解系统的更多信息,很难说。但我想说,从你写的内容来看,是的,rebuttals 和 cmets 是相似的,应该放在一个表中。

我的座右铭始终是:如有疑问,请使用最简单的方法。这显然是一个表。

如果后来发现单独的表更有用,您可以随时重构。

【讨论】:

  • 因此识别“反驳 B”将是检查 Is_Rebuttal、Comment_ID、Comment_DateTime 和 Comment_Author_ID 的问题?
【解决方案3】:

如果 cmets 和 rebuttals 有不同的最大长度,并且对每篇文章的数量有不同的限制,那么在我看来,它们听起来是非常不同的事情。如果您为具有不同限制的实体创建两个表,并建立不同的列和引用约束,您的架构会更清晰。

【讨论】:

  • 他们确实有不同,是的。我想我应该更彻底地比较相似之处/不同之处。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-09
  • 2011-08-03
  • 1970-01-01
  • 2010-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多