5

我有两张表,如下面的快照所示。

![图表][1]

场景: 一个问题应该只有一个正确答案,但可以有很多(在我的例子中是 3 个)错误答案(比如问答节目)。

问题:

Questionstable 表中有多个答案Answers,但只有一个正确答案。正确答案是AnswerIDQuestions中,它与表中的AnswerID列有关Answer。但它显示为多对一关系(请参阅粗体字段)。

我已将 UNIQUE 约束应用于 Question 表中的 AnswerID,但它仍然显示多对一关系。我该怎么做才能使每个 AnswerID 列条目链接到 Question 表中的单个 AnswerID?或者这样可以吗?

谢谢

问题表:

CREATE TABLE [dbo].[Questions](
        [QuestionID] [int] NOT NULL,
        [QuestionText] [nvarchar](max) NOT NULL,
        [AnswerID] [int] UNIQUE NOT NULL,
        [ImageLocation] [ntext] NULL,
     CONSTRAINT [PK_Questions_1] PRIMARY KEY CLUSTERED 

答案表:

CREATE TABLE [dbo].[Answers](
    [AnswerID] [int] NOT NULL,
    [AnswerText] [nchar](50) NOT NULL,
    [QuestionID] [int] NOT NULL,
 CONSTRAINT [PK_Answers] PRIMARY KEY CLUSTERED 
4

5 回答 5

4

我不认为你想要AnswerID在你的Questions桌子上。您可以添加IsCorrect到 answers 表中,然后在QuestionID和之间有一个唯一约束IsCorrect,当 IsCorrect为真时。

于 2013-08-30T13:31:57.220 回答
4

另一种方法:

  1. QuestionID从你的Answers桌子上放下。
  2. 从表中删除AnswerIDQuestions
  3. 创建一个新表QuestionAnswer(或更有意义的表,如ExamTest等),其中包含一个QuestionID、一个AnswerID和一个IsCorrect标志。
  4. 将所有映射Answers到他们的Questions,并标记哪个是正确的。

现在您也可以重复使用其他问题的答案,并且每个问题和曾经的答案都只存在一次。如果您想添加有关问题答案组合的其他元数据,它也可能很有用。例如:

  1. Sequence用于控制答案出现顺序的列。
  2. PointValue帮助生成最终分数或成绩的列。
于 2013-08-30T13:41:00.930 回答
1

应该没问题。

要获得所有可能的答案,请加入 Questions.QuestionID=Answers.QuestionID,以获得唯一正确的分析器,而是加入 Questions.AnswerID=Answers.AnswerID。

于 2013-08-30T13:34:28.343 回答
1

两种选择

  1. 从引用ANSWERS表中的UNIQUE、NOT NULL 列QUESTIONS表中创建具有UNIQUE 和 NOT NULL约束的外键列。这将创建 1:(0|1) 关系。

  2. 删除粗体关系并将 IS_CORRECT_ANSWER 列添加到您的答案表以确定哪个答案是正确的

有关更多详细信息,请参阅 1:1 外键约束

于 2013-08-30T13:41:45.370 回答
0

答案表将 AnswerId PK 和 FK 设置为 Questions(QuestionId)

于 2013-08-30T13:47:50.510 回答