这个数据库表使用哪种布局更好?

3
我是一名有用的助手,可以翻译文本。

我需要帮助一个名为“Question”的数据库表。当涉及到主键时,我想知道以下两种布局哪种更好:

问题表方法1:

QuestionId (int 3) PK
SessionId (varchar10) PK
QuestionContent (varchar800)
NoofAnswers (int 3)
AnswerId (int 5) Auto Increment
Marks (int 3)

在上面的表格中,QuestionId和SessionId是PK(主键),AnswerId不是PK,但它是自动递增的。
问题表方法2:
QuestionId (int 3)
SessionId (varchar10)
QuestionContent (varchar800)
NoofAnswers (int 3)
AnswerId (int 5) Auto Increment PK
Marks (int 3)

在上面的表格中,只有AnswerId是主键并自动增量。但如果我这样做,那么意味着其他包含QuestionId的表将不得不链接到此表的QuestionId作为非键或类似的东西。
数据库不允许我将QuestionId、SessionId和AnswerId设置为主键,因为它说AnswerId是自动增量,所以不需要任何其他主键。

ж‚ЁеЏҮд»Өе°†auto_incrementedе€—дҢњдёғдё»й”®пәЊе№¶е€›е»ғдёЂдёҒе¤ље€—зљ„UNIQUEзөұеә•гЂ‚ - hjpotter92
2个回答

3

我认为这两种情况都不好!你给PK赋予了意义,但是PK应该没有意义。

只需将您的PK设置为int(11) Auto Increment,并使用外键将表链接在一起。

更新

每个表都有自己的PK。问题表具有QuestionId PK。

将表格绑定在一起是基于它们之间的关系。对于1:1关系、1:many关系和many:many关系,有不同的情况。

例如:

CREATE TABLE `Questions` (
  `QuestionId` int(11) NOT NULL AUTO_INCREMENT,
  `AnswerId` int(11) DEFAULT NULL,
  PRIMARY KEY (`QuestionId`),
  KEY `FK_Answer` (`AnswerId`),
  CONSTRAINT `FK_Answer` FOREIGN KEY (`AnswerId`) REFERENCES `Answers` (`AnswersId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `Answers` (
  `AnswerId` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`AnswerId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

从问题的角度看,一个问题只有一个答案(1:1)。从答案的角度看,它可以用于许多问题(1:n)。对于many:many关系,您需要额外的表格。

这里有一段YouTube视频进行了一些额外的解释:http://www.youtube.com/watch?v=RXOj0D80kRg


我在想,如果我创建另一列并将其设置为主键int(11)自动增量(我们称之为questionIndex),那么这是否意味着,假设我有另一个名为“Student_Answer”的表,我可以使用两个表中的questionId链接这两个表,还是其中一个字段必须是关键字段? - user1701484

0

规范化:

会话表: id

问题表: id(int 3)自动增量pk session_id varchar255 QuestionContent(varchar800) Marks(int 3)

答案表: id自动增量pk question_id(引用questions(id)) content varhcar(255)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接