首页 > 解决方案 > 为三个不同的实体添加一个基础实体

问题描述

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

  1. 图书(Id, ReviewCounts)
  2. 图书翻译(BookId, LanguageId, IsDefault, Title, Description)
  3. 评论(Id, BookId, CommentCounts)
  4. 审阅翻译(ReviewId, LanguageId, IsDefault, Content)
  5. 注释(Id, ReviewId, Content)

现在,我想在设计中添加另外两个实体,Vote并且Report. 投票实体代表用户对前三个实体的投票Book, Comment, Review。和报告,用户应该能够报告虚假Book的、不准确Review的、仇恨和非法Comment的以及虚假的User个人资料。
问题是,我现在需要为 vote 添加三个表BookVotesCommentVotesReviewVotesUserProfileReports以及报告的四个不同的表格BookReports,,,,。 ReviewReportsCommentReports


现在,我考虑添加一个基表,可以这么说,称为Entities,和另一个表EntityTypes,其中EntityTypes包含诸如“Book,Review,Comment”之类的数据。并且相同的主键将在Entityand RevieworEntityBook​​等。这样我将解决投票问题,但不是报告,因为用户可以报告作为User实体的用户配置文件。User将实体添加到上述三个实体的列表中并从Entities“基本”表中“派生”它是没有任何意义的。
老实说,我认为使用一个“基本”表也没有Entities任何意义,因为从概念上讲,书、评论和评论是三个完全不同的实体。

所以,我的问题是,我应该或不应该使用“基本”表解决方案,如果是,我应该如何解决报告问题?

标签: sql-serverdatabase-design

解决方案


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

有很多小表的数据库往往比只有几个大表的数据库性能更好,所以除非有建模原因来组合实体,否则我不会这样做。


推荐阅读