MySQL评论表结构问题

时间:2010-10-29 23:42:25

标签: mysql

当我允许用户输入帖子的评论时,我的评论表应如何显示。下面是我目前的MySQL表。 uniqueID用于阻止用户多次点击提交按钮。

CREATE TABLE acomments (
   commentID INT UNSIGNED NOT NULL AUTO_INCREMENT,
   parent_commentID INT UNSIGNED NOT NULL,
   userID INT UNSIGNED NOT NULL,
   articleID INT UNSIGNED NOT NULL,
   comment TEXT NOT NULL,
   dateCREATE DATETIME NOT NULL,
   uniqueID CHAR(32) NOT NULL,
   PRIMARY KEY (commentID),
   KEY userID (userID),
   KEY articleID (articleID)
);

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您填写的是在客户端uniqueID中插入的字段,这样如果表单提交两次具有相同的ID,您将拒绝它。如果是这种情况,我会考虑以下事项:

您可能希望在uniqueID字段上定义唯一约束,以便您能够在数据库级别强制执行约束:

CREATE TABLE acomments (
   ...
   UNIQUE (uniqueID),
   ...
);

但是你也可以完全消除这个领域,只需在你的应用程序中添加一些逻辑,这样当用户提交评论时,评论包含与用户在同一时间提交的评论相同的正文文本。回答,然后拒绝它。在大多数情况下,我相信我会采用这种方法。在数据库级别强制执行此规则并不重要,因为数据完整性不会受到影响。伪示例:

function commentSubmitted ($userID, $articleID, $commentBody) {
   $lastComment = queryDatabase("SELECT    comment 
                                 FROM      acomments 
                                 WHERE     user_id = $userID AND  
                                           article_id = $articleID
                                 ORDER BY  dateCREATE DESC
                                 LIMIT     1")

   if ($lastComment == $commentBody) {
      // Duplicate submission ...
   }
   else {
      // Insert new comment into the database ...
   }
}

答案 1 :(得分:0)

有更简单的方法可以阻止用户多次点击提交。例如,您可以使用javascript按下按钮(或忽略后续按下)。或者您可以在创建时明确检查它是否是重复的注释(尽管这更昂贵)。没有必要弄乱你的数据库来解决这个问题。

此外,对于顶级评论,不应该parent_commentID可以为空吗?