Oracle SQL仅在特定值的情况下约束2列值



我有3个表问题、答案和user_answers。所有问题在答案表中都有一个相关的答案集,用户的答案与答案所针对的question_id一起存储在user_answer表中。

想象一个复选框类型的调查,其中有一个带有单选按钮的问题。

我想知道是否可以将user_answers表限制为对于特定的question_id,每个user_id只允许一个答案,但对于所有其他问题,允许多个答案。

我已经研究了解决方案,但找不到任何与我的特定用例相匹配的东西。

感谢任何帮助,谢谢

您有三个表:

  • 问题(QID,QTYPE,…)
  • 答案(AID,QID,…)
  • USER_ANSWERS(UAID、QID、AID、UID(用户ID)…)

在一个问题可能有多个答案的情况下,答案中会有不止一个答案("检查所有适用的问题"类型),用户可以检查多个,从而在user_answers中产生对相同(QID,UID)但具有不同AID的多个引用。如果允许一个选择,答案中会有多个答案,但用户只能选择一个,从而在user_ANSWERS中产生对(QID,UID)的单一引用。

我的建议如下——在数据库级别强制

  1. 在答案中引入一个新列:AQ_REF(答案参考)。当问题类型只允许一个答案时,用QID填充,当问题类型允许多个答案时用AID填充
  2. 除了USER_ANSWERS中的AID之外,还可以使用此

现在,您有了这样的表结构:

  • 问题(QID,QTYPE,…)--主键(QID)
  • ANSWERS(AID,QID,AQ_REF,…)--主键(AID)、外键(QID)、唯一(AID、AQ_REF)、检查AQ_REF IN(AID和QID)
  • USER_ANSWERS(UAID,AID,AQ_REF,UID,…)--主键(UAID)、外键(AID,AQ_REF)引用答案(AID、AQ_REF)、唯一(AQ_REF、UID)

示例数据:

问题:

QID,QTYPE

Q1,"S"——针对单一答案

Q2,'M'——用于多答案

答案:

AID,QID,AQ_REF

A1、Q1、Q1——注意,对于所有Q1回答,AQ_REF=Q1

A2,Q1,Q1

A3,Q1,Q1-

A4、Q2、A4——注意,AQ_REF=A4

A5、Q2、A5——注意,AQ_REF=A5

A6、Q2、A6——注意,AQ_REF=A6

USER_ANSWERS:

UAID,AID,AQ_REF,UID-

UA1,A1,Q1,U1-

UA2、A4、A4和U1

UA3、A6、A6和U1

相关内容

最新更新