sql - SQL Server中如何实现多重关系?

标签 sql sql-server foreign-keys entity-relationship

我正在尝试设计一个与 ASP.net MVC 应用程序一起使用的数据库。场景如下:有三个实体,用户可以为每个不同的实体发表他们的评论。我只是想知道如何只放置一张评论表并将所有其他实体链接到它。显然,Comments 表需要 3 个对这些表的引用(外键),但正如您所知,这些外键不能为空,并且每行只能填充其中一个。有没有比为每个实体的评论实现三个不同的表格更好的方法?

最佳答案

任一:每个实体类型一个评论表

或者:一个带有子注释和实体类型特定表的主实体表。

  • EntityMaster: EntityID, foo, bar
  • 评论:EntityID、CommentID、UserID、... PK 是(EntityID、CommentID 等)

  • 对于 3 个实体表,PK 是 EntityID
  • EntityOne:EntityID、EntityTypeID(检查约束 = 1)、...
  • EntityTwo:EntityID、EntityTypeID(检查约束 = 2)、...
  • EntityThree:EntityID、EntityTypeID(检查约束 = 3)、...

  • 为 3 个 parent 设置一个评论表没有捷径或优雅:在数据库设计方面是错误的。

    就我个人而言,我可能会选择选项 1...

    编辑,反射(reflection):

    有时您必须查看数据的使用情况。

    如果这 3 个实体单独使用,在不同的屏幕上,不要相互链接,那么它是选项 1。

    如果同时使用和显示 3 个实体,则选项 2 更有意义,因为您可以更轻松地将数据汇总在一起。

    关于sql - SQL Server中如何实现多重关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4536831/

    相关文章:

    php - 规范化的 MySQL 数据透视/行到没有唯一名称的列

    sql - orderBy 几列 - Doctrine QueryBuilder

    sql-server - 将字符串转换为 Datetime2

    sql-server - 为什么我在尝试在 SQL Server 中模拟组连接时会收到此错误?

    sql-server - 内存优化数据库和表变量

    mysql - 外键力独特

    mysql - 1 列有两个外键?

    sql - 获取 Sybase 中本周的开始和结束日期

    mysql - SELECT * 和 SELECT 显式列之间是否存在运行时差异?

    mysql - 如何计算引用 MySql 中外键的行数?