我知道如何制作individual column entry唯一,但我希望将两列组合在一起。我有一张联票表。每个投票都有一个userId和一个messageId。每次投票都是此表的一个条目。我不想让用户在单个邮件上多次投票。我可以在此连接表中添加什么约束来使每个用户只能对每条消息或评论进行一次投票?
CREATE TABLE messages (
id int(5) AUTO_INCREMENT,
messageString text NOT NULL,
image varchar(255) DEFAULT 'NULL',
score int(5) DEFAULT 0,
PRIMARY KEY (id)
);
CREATE TABLE comments (
id int(5) AUTO_INCREMENT,
commentString text NOT NULL,
messageId int(5) NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (messageId) REFERENCES messages(id)
);
CREATE TABLE votes (
id int(5) AUTO_INCREMENT,
PRIMARY KEY(id),
userToken VARCHAR(255),
messageId int(5) DEFAULT 0,
commentId int(5) DEFAULT 0,
FOREIGN KEY (userToken) REFERENCES users(token),
FOREIGN KEY (messageId) REFERENCES messages(id),
FOREIGN KEY (commentId) REFERENCES comments(id)
);
CREATE TABLE users (
token VARCHAR(255),
PRIMARY KEY(token)
);
答案 0 :(得分:1)
如果您认为绝对需要votes.id
,请删除PRIMARY KEY (userToken, messageId)
并使用PRIMARY KEY (id), UNIQUE KEY (userToken, messageId)
,或使用id
。
(不确定commentId
是什么,无法从您的解释中弄清楚;也许您还需要将其添加到复合索引中。)