2013-04-29 71 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 2013-04-29 15:18:37

回答

2

在你的费率表中,你必须像在其他表中那样在不同的行上设置外键。

1

除了语法错误丹布拉库克,我想说一些独特的约束是从模型中遗漏。

我相信1个用户只能回答1个问题,然后answer应该在(user_id,question_id)上有唯一的密钥。 rate,user_id,question_id应该形成独特的约束/ PK。此外,通常username也是独一无二的。

如果您希望允许同一用户回答或排列相同的问题或多次,则在answerrate中会丢失date_time属性。