Sql server 对1:M关系强制执行数据驱动的1:1约束

Sql server 对1:M关系强制执行数据驱动的1:1约束,sql-server,tsql,database-design,Sql Server,Tsql,Database Design,使用SQLServer2K8R2,我有两个相关的表-成员表和调查问卷表。每个表都有一个名为ID的BigInt PK。调查问卷的MemberID与正在填写表单的成员相关随着时间的推移,会员可能会多次填写问卷。业务要求是每个成员每年最多填写一次调查问卷。恐怕这不能用简单的检查约束来解决 有没有“干净”的方法可以做到这一点?我希望避免做以下事情: CREATE TRIGGER tr_Questionnaire_Insert ON Questionnaire INSTEAD OF INSERT

使用SQLServer2K8R2,我有两个相关的表-成员表和调查问卷表。每个表都有一个名为ID的BigInt PK。调查问卷的MemberID与正在填写表单的成员相关随着时间的推移,会员可能会多次填写问卷。业务要求是每个成员每年最多填写一次调查问卷。恐怕这不能用简单的
检查约束来解决

有没有“干净”的方法可以做到这一点?我希望避免做以下事情:

CREATE TRIGGER tr_Questionnaire_Insert
  ON Questionnaire
  INSTEAD OF INSERT
AS BEGIN
  -- Check for a violation of once questionnaire per calendar year and if found, call RAISERROR

  -- Otherwise continue with INSERT
END;

我不想使用此方法的原因主要是因为它需要我(或长期维护此解决方案的人)要记住在问卷架构发生更改时维护触发器。

只需在问卷表上创建一个包含MemberId和年份的唯一索引。

只需在问卷表上创建一个包含MemberId和年份的唯一索引。

哈哈哈!!我可以踢自己。看看当你离问题太近时会发生什么?今天从树上看不见森林。太好了!哈哈哈!!我可以踢自己。看看当你离问题太近时会发生什么?今天从树上看不见森林。太好了!