2010-06-21 114 views
2

我有一张用户表和一张问题表。问题表将包含代表问题或答案的“问题”,“答案”和“评论”的记录。我想为每个用户创建一个仪表板,以便可以查看与问题和答案相关的活动。例如,如果用户A创建问题,用户B回答答案,并且用户C对用户B的答案发表评论,则用户A和B能够在他们的仪表板中看到所有活动。创建饲料墙

这与Facebook主页的工作方式类似,如果我放置视频,我可以在视频上看到人们的评论。

任何人都可以提出一个简单的方法来建模在数据库中吗?

+1

你有没有试图自己建模呢?你更有可能得到建设性的答案,如果你要求帮助解决某个具体问题,而不是要求一群陌生人为你设计你的系统...... – 2010-06-21 15:02:48

回答

2

我相信Facebook等。人。通过拥有一个单独的通用“更新”记录数据库来处理这个问题,该记录对所采取的行动有一个简短的描述。每当有人在网站上显示应该在Wall中显示的操作时,还会在更新数据库中插入一条记录。

+0

我尝试了一些与你的建议非常相似的建议一张更新表。每行都与用户(其行为导致在更新表中创建记录的人)以及操作的描述相关联。当我想查找由我关注的人所采取的操作时,这很有效,因为我可以通过他们的ID进行查询。但是我无法找到一种干净的方式来检索用户可能采取的相关操作,我不遵循这些操作。我试图尽可能保持简单,以避免与其他表连接或执行多个查询。任何想法将有助于:) – Roman 2010-06-21 14:53:47

0

好的,这里是你可以尝试的..你不能在同一个表中混淆问题,答案和他们的意见。一个问题可以有很多答案和不同的答案可以有不同的评论。将它们全部保存在同一个表中将会非常混乱并且不被推荐(违反RDBMS的规则)。为问题制作三个单独的表格,一个用于答案,另一个用于评论。根据主键和外键定义它们之间的关系。因此,在任何时候问题表中,您都有所有用户提出的问题。答案表中将发布与该特定问题相对应的所有答案,评论表将对相应答案进行评论。在所有表格中维护适当的支持列,您可以轻松管理您想要的内容。在任何时间点,您都可以通过加入问答表查看与特定问题相关的所有答案,您也可以通过加入答案和评论表来查看对特定答案所做的所有评论。

希望这给出你一个想法..

+0

我知道教科书的模式设计技术,但是性能一直是一个严肃的考虑因素。使用我目前的系统,我可以使用单个无连接查询列出问题及其答案和评论。国际海事组织从传统的模式设计角度来看,您的建议很好,但在现实生活中,有时像我描述的那样优化会带来巨大的收益。 – Roman 2010-06-21 15:08:08

+0

是真实的,但管理在一张桌子将完美的测试数据..但什么时候数据的频率是相当高的......这一切都取决于你的数据分析频率.. – 2010-06-21 15:27:39

0

如果你要使用一个表,你可能想尝试这样的事情。

表{ ID, PARENTID, 用户名, 类型, 文本, PostDtm }

这给你一个表中的基本树结构。

折衷是你可能有更复杂的查询,并且可能有更多的查询需要达到你想要的。

确保您至少在ID列上有索引。

我还不确定您需要多少性能。像Facebook这样的网站不得不考虑比表级优化。对于大多数网站,可以比这个模型更高效地查询教科书关系模型。你的绩效目标是什么?

+0

那么,要击败Facebook的流量你必须真的很大,更好。我不是在谈论那种流量,但我正在考虑高于一般网站的流量。 “对于大多数网站来说,教科书关系模型可以比这个模型更有效地被查询。”我不确定你是如何设想的,而且我可能是错的,但我有强烈的感觉,认为加入操作比在一张桌子上进行基本查询更重要。无论哪种方式,我测试了这个模型,似乎过去工作得很好。 – Roman 2010-06-21 16:51:42

0

enter code here @Am,我的想法是咬住子弹,如果使用MySQL,则使用关系或移动到不同类型的数据库,如果你想完全摆脱关系表。您希望RDB模型的非典型“清洁”实现。对于RDB,我建议你使用四个表格:用户,user_map,问题,回复。响应是分类的(例如,对于问题或答案),所以跟踪哪种类型,它是任何表中唯一的外键是question.id和user.id的地方。

Users: id, name 
User_map (can be used with Questions and/or Responses to join the data): u_id, q_id 
Questions: id, text_value 
Responses: id, q_id, text_value, category 

您是否真的认定关系是您需要优化或正在分析的东西?如果您需要远离基于关系的数据库,那么我会建议您研究为其构建的技术。

+0

当所有问题,答案和评论都是基本相同的东西时,创建额外的表格没有任何优势。我在这里看到很多答案,告诉我我必须打破我的桌子。我的问题与一桌和三桌无关。除了@ceejayoz,每个人都在暗示的是101 DB设计,即使我分解了我目前的设计,并且做了一些事情,因为您建议我的原始问题不会得到回答!我也知道漂亮的设计是什么样子,但我真的很想学习一种优化的饲料墙的方法。 – Roman 2010-06-21 19:25:33