0

我有一个包含用户问题答案的 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
)
4

2 回答 2

2

在您的费率表中,您必须像在其他表中那样在单独的行上设置外键。

于 2013-04-29T15:17:03.027 回答
1

除了Dan Bracuk概述的语法错误之外,我想说模型中遗漏了一些独特的约束。

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

如果您想允许同一个用户回答或排列同一个问题或不止一次,则 date_time 属性会在answer和中丢失rate

于 2013-04-29T15:29:21.867 回答