【问题标题】:Adding a base entity for three different entities为三个不同的实体添加一个基础实体
【发布时间】:2018-08-21 15:02:23
【问题描述】:

我有这种情况,我有三个实体 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)

现在,我想在设计中添加另外两个实体,VoteReport。投票实体代表用户对前三个实体Book, Comment, Review 所做的投票。还有报告,用户应该能够报告虚假的Books、不准确的Reviews、仇恨和非法的Comments 和虚假的User 个人资料。
问题是,我现在需要为投票添加三个表格BookVotesCommentVotesReviewVotes。报告有四个不同的表格UserProfileReportsBookReportsReviewReportsCommentReports


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

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

【问题讨论】:

  • 基础实体自然地引入类和子类。这会导致类表继承。
  • @WalterMitty 换句话说,如果实体在继承关系中在概念上不相关,我们不应该使用基础实体,对吧?
  • 这不是我想说的。但如果有意义的话,你可以这样看。

标签: sql-server database-design


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 2012-04-28
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    相关资源
    最近更新 更多