Sql server 设置两个主键,但为每个第一个主键值重置第二个主键-SQL Server

Sql server 设置两个主键,但为每个第一个主键值重置第二个主键-SQL Server,sql-server,sql-server-2017,sql-server-2017-express,Sql Server,Sql Server 2017,Sql Server 2017 Express,我试图为产品做一个评论部分。我正在为Comments表设置两个主键,CommentID和ProductID。但是我想对主键做的是:对于每个ProductID,CommentID应该从一开始就开始计数。因此,对于ProductID=1,CommentID应该从1开始递增,对于ProductID=2,CommentID也应该从1开始递增,依此类推。同时,ProductID是指向产品表的外键 有人能指导我如何归档吗?除了制作两个主键之外,这是一种好的做法还是有更好的解决方法 谢谢大家! 我会使用IDE

我试图为产品做一个评论部分。我正在为
Comments
表设置两个主键,
CommentID
ProductID
。但是我想对主键做的是:对于每个
ProductID
CommentID
应该从一开始就开始计数。因此,对于
ProductID=1
CommentID
应该从1开始递增,对于
ProductID=2
CommentID
也应该从1开始递增,依此类推。同时,
ProductID
是指向产品表的外键

有人能指导我如何归档吗?除了制作两个主键之外,这是一种好的做法还是有更好的解决方法


谢谢大家!

我会使用
IDENTITY
列/序列(单峰):

并选择:

SELECT *,
   ROW_NUMBER() OVER(ORDER BY comment_id) AS rn 
  -- if you really need consecutive numbers
FROM comments
WHERE product_id = ?

我会使用
IDENTITY
列/序列(单键):

并选择:

SELECT *,
   ROW_NUMBER() OVER(ORDER BY comment_id) AS rn 
  -- if you really need consecutive numbers
FROM comments
WHERE product_id = ?

在你(错误地)使用术语之前,你应该了解术语的含义。一个表只能有一个主键。在你(错误地)使用术语之前,你应该了解术语的含义。一个表只能有一个主键。一个愚蠢的问题。在这种情况下如何插入?我的意思是,每次插入时是否必须指定PRoductID!参考文献有什么作用?它与外键有何不同?@Tinaira Yesm您必须指定ProductId<代码>引用是外键的内联版本。确定。但正如我所看到的,CommentID将独立于ProductID增加。因此,当我选择一个不同的产品来评论我现在理解你的代码时,它不会重新开始。您在select语句中添加的列只是与productid相关的最高commentid编号。起初有点让人困惑,因为我期待着其他的东西,但现在这让一个愚蠢的问题变得有意义。在这种情况下如何插入?我的意思是,每次插入时是否必须指定PRoductID!参考文献有什么作用?它与外键有何不同?@Tinaira Yesm您必须指定ProductId<代码>引用是外键的内联版本。确定。但正如我所看到的,CommentID将独立于ProductID增加。因此,当我选择一个不同的产品来评论我现在理解你的代码时,它不会重新开始。您在select语句中添加的列只是与productid相关的最高commentid编号。起初有点让人困惑,因为我期待着其他的东西,但现在它有了意义