按主键限制表条目

时间:2014-08-10 07:31:32

标签: sql asp.net sql-server

在SQL Server表中,我希望在主键可以在该表中拥有的最大条目数上设置排序约束。此类场景的潜在用例可能是,例如,您希望限制用户可以存储的最大图片数量。

据推测,您有一张名为Users_With_Pictures的表格或类似的表格,每个用户只能有10张图片。我怎么能限制该用户只有表中的10个条目?最好是在表示层上完成,而不对数据库设置控件吗?

1 个答案:

答案 0 :(得分:2)

你可以,例如在PictureNo链接表中添加Users_With_Pictures列,该表将是每个用户的计数器,并向该列添加CHECK约束以将其限制为10。

CREATE TABLE dbo.Users_with_Pictures
(
   ... your other columns ...
   PictureNo INT NOT NULL 
      CONSTRAINT CK_PictureNo CHECK(PictureNo > 0 AND PictureNo <= 10)
)

因此,当您向Users_with_Pictures插入新行并为每张图片将PictureNo增加1时,一旦达到10张图片,下一次PictureNo = 11插入将失败有约束违规例外。

但当然 - 如果你能在前端处理这个问题,那就更好了!您仍然可以保留CHECK约束 - 只是为了确保它会被强制执行,即使有人设法以某种方式绕过您在前端的检查(例如,通过在浏览器中为Web应用程序禁用Javascript)