2010-10-29 103 views
1

当我允许用户输入帖子评论时,我的评论表应该如何显示。下面是我现在的MySQL表。唯一标识是阻止用户多次点击提交按钮。MySQL评论表结构问题

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) 
); 
+0

我认为你的'id'列从表格定义中缺失... – 2010-10-29 23:45:15

+0

已更正的错误谢谢。 – HELP 2010-10-29 23:46:17

回答

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 ... 
    } 
} 
0

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

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

+0

我不认为你需要在那里添加一个时间因素。如果用户针对与前一个文章相同的文章提交同一文章的评论,则它是重复提交。 – 2010-10-29 23:55:55

+0

@Daniel - 你说得对。这是检测重复的更好方法。 – 2010-10-30 00:14:37