Проверка значения в ячейке таблицы на основе выборки из таблицы.?

Есть таблицы юзеров и вопросов:

**Questions:**
Id
Question

**Variants:**
Id
QuestionId
Variant

**ResultsTable:**
Id
QuestionId
UserId
VariantId
IsTrue

Как сделать проверку, что б в поле VariantId можно было внести Id только варианта,к которому принадлежит вариант ответа, а не любой из вопросов?

Пример:
Вопрос 1- Сколько будет 2+2?
Вариант id 1 =8; id 2=4
ResultsTable - Юзер 1 отвечает на вопрос 1 ответом id 2 (тоесть верно)
Вопрос 2- Кто быстрее?
Вариант id 331 ="улитка"; id 332="Порше без колёс"
Без проверки на вопрос 1 можно ответить вариантом из вопроса 2, что не верно...
  • Вопрос задан
  • 172 просмотра
Решения вопроса 1
@eugene73
Я бы из ResultsTable удалил поле QuestionId. И IsTrue перенес бы в Variants. После этого надо контролировать, чтобы никто не внес в результаты 2 ответа на один вопрос. Это можно сделать, например, триггером:
create trigger result_check on ResultsTable after insert, update as
begin
  if exists(
    select 0
    from inserted i
    join ResultsTable r on r.userid=i.userid
    join Variants v on v.id = r.variantid
    group by i.userid
    having count(distinct v.questionid)>1) 
begin
     RAISERROR ('Ошибка - два ответа на один вопрос', 16, 1)
  end
end
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы