我可以跨多个表使用“身份”(唯一,非重复)列吗?
例如,假设我有两个表:“书籍”和“作者”。
Authors
AuthorID
AuthorName
Books
BookID
BookTitle
BookID列和AuthorID列是标识列。
我希望身份部分跨越两列。
因此,如果有一个AuthorID值为123,则不能有一个BookID值为123。反之亦然。
我希望这是有道理的。
这可能吗?
谢谢。
我为什么要这样做?我正在编写一个APS.NET MVC应用程序。我正在创建评论部分。作者可以发表评论。书中可以有评论。我希望能够将实体ID(书籍ID或作者ID)传递给操作,并让该操作提取所有相应的注释。该 Action 将不在乎是书籍,作者还是其他。听起来合理吗?
最佳答案
简短的答案是:不,您不能这样做(至少在直到2008年的MS SQL Server中)。
您可以创建一个新表“CommentableEntity”,在其中插入您的标识列,然后在“作者和书籍”中定义外键以将其引用为父表,然后执行多种技巧之一以确保给定的ID值没有同时分配给这两个表...但这不是一个好主意,因为您构建的数据模型将暗示Authors和Books是相关的数据类型,而实际上不是。
您可以有一个单独的表“注释”,在其中具有“标识”列,然后在“作者”和“书”中都放置一个CommentId列。但是,这将使每本书和作者只能发表一个评论。
我,我可能会在Comments表中添加一列“CommentorType”,并在其中放置一个标记,以指示注释来源(作者为“A”,书籍为“B”)。在“CommentorId + CommentorType”上构建一个主键,它应该可以正常工作-随着系统的扩展,添加更多类型的评论者将变得微不足道。
关于sql-server - 我可以使身份字段跨越SQL Server中的多个表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2428262/