为三个不同的实体添加基础实体

时间:2018-08-21 15:02:24

标签: sql-server database-design

在这种情况下,我有三个实体Book, Review, comment并具有下表:

  1. 书籍(Id, ReviewCounts)
  2. BookTranslations (BookId, LanguageId, IsDefault, Title, Description)
  3. 评论(Id, BookId, CommentCounts)
  4. 评论翻译(ReviewId, LanguageId, IsDefault, Content)
  5. 评论(Id, ReviewId, Content)

现在,我想在设计中添加另外两个实体VoteReport。投票实体代表用户对前三个实体Book, Comment, Review进行的投票。还有报告,用户应该能够报告伪造的Book,不正确的Review,仇恨和非法的Comment和伪造的User个人资料。
问题是,我现在需要为投票BookVotesCommentVotesReviewVotes添加三个表。以及报告UserProfileReportsBookReportsReviewReportsCommentReports的四个不同表格。


现在,我考虑添加一个可以说的基础表Entities和另一个表EntityTypes,其中EntityTypes包含诸如“ Book,Review,Comment”之类的数据。并且相同的主键将位于EntityReviewEntityBook中,依此类推。这样,我将解决投票问题,但不会解决报告问题,因为用户可以报告作为User实体的用户个人资料。将User实体添加到上述三个实体的列表中并从Entities“基本”表中“派生”它也没有任何意义。
老实说,我也不认为使用一个“基本”表Entities也是有意义的,因为从概念上来说,书,评论和注释是三个完全不同的实体。

因此,我的问题是,应该还是不应该使用“基本”表解决方案,如果可以,那么我应该如何解决报告问题?

1 个答案:

答案 0 :(得分:1)

我不会接受单个“基本”表的想法。由于一次投票只能涉及一本书,评论或评论,而不能涉及多个项目,因此将它们放在单独的表格中对我来说更有意义。报告也一样。

具有很多小表的数据库往往比只有几个大表的数据库具有更好的性能,因此,除非有建模方面的理由来合并实体,否则我不会这么做。