Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL:我应该使用哪一个约束来让用户不能对自己的消息进行投票?_Mysql - Fatal编程技术网

MySQL:我应该使用哪一个约束来让用户不能对自己的消息进行投票?

MySQL:我应该使用哪一个约束来让用户不能对自己的消息进行投票?,mysql,Mysql,用户有消息,投票有消息和用户。我想让用户不能对自己的消息进行投票。但我不确定如何创建此SQL约束。我可以使用什么样的MySQL约束使用户无法对自己的消息进行投票 DROP DATABASE IF EXISTS uncovery; CREATE DATABASE uncovery; SET foreign_key_checks=0; USE uncovery; CREATE TABLE marks ( id int(5) AUTO_INCREMENT, PRIMARY KEY (id

用户有消息,投票有消息和用户。我想让用户不能对自己的消息进行投票。但我不确定如何创建此SQL约束。我可以使用什么样的MySQL约束使用户无法对自己的消息进行投票

DROP DATABASE IF EXISTS uncovery;
CREATE DATABASE uncovery;

SET foreign_key_checks=0;

USE uncovery;

CREATE TABLE marks (
  id int(5) AUTO_INCREMENT,
  PRIMARY KEY (id),
  x float(10, 6) NOT NULL,
  y float(10, 6) NOT NULL,
  z float(10, 6) NOT NULL,
  timestamp timestamp DEFAULT CURRENT_TIMESTAMP,
  messageId int(5) NULL,
  commentId int(5) NULL,
  userToken VARCHAR(255),
  FOREIGN KEY (messageId) REFERENCES messages(id),
  FOREIGN KEY (commentId) REFERENCES comments(id),
  FOREIGN KEY (userToken) REFERENCES users(token)
);

CREATE TABLE messages (
  id int(5) AUTO_INCREMENT,
  userToken VARCHAR(255),
  messageString text NOT NULL,
  image VARCHAR(255),
  score int(5) DEFAULT 0,
  PRIMARY KEY (id)
);

CREATE TABLE comments (
  id int(5) AUTO_INCREMENT,
  commentString text NOT NULL,
  messageId int(5),
  PRIMARY KEY (id),
  FOREIGN KEY (messageId) REFERENCES messages(id)
);

CREATE TABLE votes (
  id int(5) AUTO_INCREMENT,
  PRIMARY KEY(id),
  userToken VARCHAR(255) NOT NULL,
  messageId int(5) NULL,
  commentId int(5) NULL,
  FOREIGN KEY (userToken) REFERENCES users(token),
  FOREIGN KEY (messageId) REFERENCES messages(id),
  FOREIGN KEY (commentId) REFERENCES comments(id),
  UNIQUE KEY (userToken, messageId),
  UNIQUE KEY (userToken, commentId)
);

CREATE TABLE users (
  token VARCHAR(255),
  PRIMARY KEY(token),
  total_votes int(5) DEFAULT 0
);

-- If a message does not have a userToken then this will not work
DELIMITER //
CREATE TRIGGER vote_increment AFTER INSERT ON votes
FOR EACH ROW
  BEGIN
    UPDATE users SET users.total_votes = (users.total_votes + 1) WHERE users.token = 
      (SELECT userToken FROM messages WHERE id = NEW.messageId);
  END;//
DELIMITER ;

我不认为这是可行的,因为这两列在不同的表中。除非您以某种方式将userToken放入messageIdI中,否则它会说处理此类问题不是数据库的工作,尽管这可能是中间件检查之外的额外措施。您必须使用触发器: