确保只有一个值设置为1的最佳方法,其他值在列SQL中自动设置为0

时间:2014-03-21 09:40:08

标签: sql-server entity-framework

我正在设计一个简单的图片库,用户可以设置相册主图片,让我们说类似于Facebook,用户可以从图片中选择相册的封面。

我相信为了达到这个目的,我需要在Images表中添加另一个bool列来称之为IsCoverPicture。然后我将特定图像的此值设置为true。但后来如果他们想改变封面图片呢?

我这样做的方法是先将所有值设置为false,然后将新选中的值设置为true。

在这里,我只是想知道这是否是正确的方法,或者是否有任何特定的存储过程或任何使用实体框架,当我为新的封面图片设置新的真实值时会自动处理这个为我照顾好剩下的事情然后把剩下的都弄错了?

2 个答案:

答案 0 :(得分:1)

第一种解决方案:更改相册表格以包含图片和封面。这样,只有一张图片可以设置为专辑的封面。

另一个想法是在专辑列和新布尔列上添加唯一约束。您的图像表至少包含以下两列:AlbumId和IsCover。只需在这两列上添加唯一约束: Unique constraint on multiple columns

答案 1 :(得分:0)

我建议您规范化架构。你需要一个表格CoverId和AlbumId这样的表格。

CREATE TABLE Cover (
  AlbumId INT,
  PictureId INT, 
  PRIMARY KEY (AlbumId,PictureId)
)

使用您当前的架构,要更改封面图像,您需要更新两行,而单个删除可能会使您没有封面图像。使用规范化架构更新时,不会发生异常。

如果声明外键约束,那么您也将受到保护,免受删除问题的影响。