2012-10-01 6 views
3

"질문"이라는 데이터베이스 테이블에 대한 도움이 필요합니다.이 데이터베이스 테이블에는 어떤 레이아웃이 더 좋습니까?

질문 표 방법 1 :이 기본 키에 올 때 아래 두 가지 중 더 나은 어떤 레이아웃을 알고 싶어

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

위의 표에서, QuestionId 및 세션 ID는 PK (기본 키)입니다 AnswerId는 PK가 아니지만 자동 증가입니다.

질문 표 방법 2 : 위 표에

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

만 AnswerId PK는 자동 증가하고있다. 그러나 만약 그렇다면 QuestionId를 포함하는 다른 테이블이이 테이블의 QuestionId를 비 키 또는 그와 비슷한 것으로 링크해야 함을 의미합니다.

데이터베이스는이 AnswerId 오토 너무 증가 다른 기본 키에 대한 필요성라고 말을 나에게 QuestionId, 세션 ID 및 AnswerId을 위해 PK를 할시키는되지 않습니다.

+0

당신은'PK로 auto_incremented' 열 및 멀티 컬럼'UNIQUE' 인덱스를 가질 수 있습니다. – hjpotter92

답변

3

두 경우 모두 좋지 않다고 생각합니다. 당신은 PK의 의미를 부여하지만 PK의 의미는 없어야합니다.

그냥 외래 키와 int(11) Auto Increment 및 링크 테이블 함께 당신의 PK를 확인하십시오.

업데이트

각 테이블은 자신의 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 대답이있을 수 있습니다. 답변을 보면 많은 질문 (1:n)에 사용할 수 있습니다. many:many 관계의 경우 추가 테이블이 필요합니다. http://www.youtube.com/watch?v=RXOj0D80kRg

+0

그때 나는 또 다른 열을 만들어 그 기본 키 int (11) 자동 증가 (questionIndex 호출 할 수 있도록), 그게 내가 다른 테이블 "Student_Answer"테이블을 가지고 말할 수있는 두 테이블을 사용하여 연결할 수 있습니다 두 테이블 모두에서 questionId를 사용하거나 필드 중 하나가 키 필드 여야합니까? – user1701484

+0

답을 업데이트했습니다. 예제를 요리 해 보겠습니다. – JvdBerg

+0

예제를 추가했습니다. – JvdBerg

0

정규화 :

테이블 세션 : ID

테이블 질문 : 여기

은 유튜브가 몇 가지 추가 설명하고있다 ID를 (INT 3) 자동 증가 PK SESSION_ID varchar255 QuestionContent (varchar800) 마크 (int 3)

테이블 응답 : ID 자동 증가 PK question_id (참조 질문 (ID)) 콘텐츠 varhcar는 (255)

관련 문제