簡體   English   中英

僅當某些值時,Oracle SQL約束2列值

[英]Oracle SQL constrain 2 columns values only if certain values

我有3個表格的問題,答案和user_answers。 所有問題均在答案表中設置了相關答案,用戶答案與答案所針對的問題ID一起存儲在user_answer表中。

想象一個復選框類型的調查,其中一個問題帶有單選按鈕。

我想知道是否有可能將user_answers表限制為每個user_id僅允許該特定Question_id 1個答案,但允許所有其他問題多個答案。

我已經研究了解決方案,但找不到與我的特定用例匹配的任何東西。

任何幫助表示贊賞,謝謝!

您有三個表:

  • 問題(QID,QTYPE等)
  • 答案(AID,QID等)
  • USER_ANSWERS(UAID,QID,AID,UID(用戶ID),...)

如果一個問題可能有多個答案,則答案中將有一個以上的答案(“檢查所有適用問題”類型),用戶可以檢查很多結果,從而導致對同一問題(QID,UID)的引用USER_ANSWERS中的其他AID。 如果允許一個選擇,則答案中將有多個答案,但用戶只能選擇一個,從而在USER_ANSWERS中僅引用了(QID,UID)。

我的建議如下:在數據庫級別強制

  1. 在答案中引入新列:AQ_REF(答案問題參考)。 當問題類型僅允許一個答案時,將使用QID填充;如果問題類型僅允許一個答案,則將使用AID填充
  2. 除了USER_ANSWERS中的AID之外,還使用此功能

所以現在,您有了這樣的表結構:

  • 問題(QID,QTYPE等)-主鍵(QID)
  • 答案(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),UNIQUE(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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM