2013-04-29 3 views
0

에 나는 사용자, 질문대답이있는 SQL 있습니다. 나는 질문의 비율을 보유하는 접합점 테이블을 갖고 싶다. 많은 사용자가 많은 질문을 평가할 수 있습니다. 이 SQL에 어떤 문제가 있는지 말해 줄 수 있습니까? 다음은 SQL입니다.많은 많은 SQL

CREATE TABLE user 
(
user_id int(4) NOT NULL, 
user_name varchar(255) NOT NULL, 
PRIMARY KEY (user_id) 
); 

CREATE TABLE question 
(
question_id int(4) NOT NULL, 
question_text longtext NOT NULL, 
user_id int(4) NOT NULL, 
PRIMARY KEY (question_id), 
FOREIGN KEY (user_id) REFERENCES user(user_id) 
); 

CREATE TABLE answer 
(
answer_id int(4) NOT NULL, 
user_id int(4)NOT NULL, 
question_id int(4) NOT NULL, 
PRIMARY KEY (answer_id), 
FOREIGN KEY (user_id) REFERENCES user (user_id), 
FOREIGN KEY (question_id) REFERENCES question (question_id) 
); 

CREATE TABLE rate 
(
user_id int(4) REFERENCES user NOT NULL, 
question_id int(4) REFERENCES question NOT NULL, 
rate int(4) NOT NULL 
) 
+0

당신이 개념을 잘못 이해했다고 생각하기 때문에 당신이 그들이 어떻게 관련되기를 원하는지에 대한 지침을 제공합니다. 즉, 사용자는 질문 IMO와 관련되어서는 안됩니다. – ericosg

답변

2

환율 테이블에 다른 테이블에서와 마찬가지로 외래 키를 별도의 줄에 설정해야합니다.

1

Dan Bracuk으로 요약 된 구문 오류 외에도 일부 고유 한 제약 조건이 모델에서 누락되었다고 말할 수 있습니다.

1 명의 사용자가 1 질문에만 한 번 답변 할 수 있다고 생각하면 answer에 고유 키가 있어야합니다 (user_id, question_id). rate과 동일하게 user_id,question_id은 고유 제한/PK를 형성해야합니다. 또한 보통 username도 고유합니다.

동일한 사용자가 같은 질문에 답하거나 두 번 이상 순위를 매기도록하려는 경우 date_time 속성을 answerrate에 빠뜨립니다.