将类似的数据对象合并成单个 table 是否有效?

Is it eficient to merge similar data objects into single table?

我需要存储大量关于我的问题和答案系统的类似数据,例如投票、关注、书签等。

在投票示例中,存储问题、答案和 post 投票的最佳 table 布局是什么?

  1. 分别存储投票,即得到3个table:UserQuestionVotes、UserAnswerVotes和UserPostVotes

  2. 将选票存储在一个 table: UserVotes (id, user_id, item_id, item_type, 投票), while: item_id 和 item_type 是问题的id和类型,答案或 post, vote = -1/1

如果我走第一条路,我至少会有 9 tables。 而如果我走第二种方式,即所有的数据都放在一个堆里,那么以后在填写table的时候,会比较慢

在我的情况下哪种方式有效?

如果您正在寻找我的意见,我会选择 1 号门。问题、答案和帖子都是独立的,尽管它们是相关的,"things." 而且,这些 "things" 中的每一个恰好也有 "votes" 与之关联......但是,实际上,"vote" 不是 "thing."

A "vote for a question" 与 "the question." "A vote for ..." 紧密相关,其他都一样。所以现在我开始考虑我最有可能实际编写的查询。我最有可能想要编写查询,比如说,计算一个特定问题有多少票......我真的不想混淆那个查询并使其成为 "hard to write" 或不得不查看一堆不 "votes for questions." 的记录,其他类型的投票不相关,我宁愿不必过滤掉它们。 (如果我需要写一个查询来计算 "how many votes for anything has this user cast?",无论如何我都可以很容易地写出来。)

这是我的 意见。(数据库管理器可以自己处理 "efficiency"。设计您的数据库,以便您需要编写的查询简单且清除写入。)