ejabberd在MySQL上创建的假脱机表没有PK。这是一个错误还是一个功能?

时间:2011-12-05 19:58:31

标签: mysql primary-key ejabberd spool

这是一个错误(我可以手动为它创建一个PK),还是这个功能?

1 个答案:

答案 0 :(得分:1)

我在ejabberd 2.1.x分支中查看了当前的mysql.sql以获取https://github.com/processone/ejabberd/blob/2.1.x/src/odbc/mysql.sql的其他上下文。

    CREATE TABLE spool (
        username varchar(250) NOT NULL,
        xml text NOT NULL,
        seq BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE,
        created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
    ) CHARACTER SET utf8;

看起来“seq”列是唯一标识符,可以与主键相同的方式使用,但不能对其进行外键引用。我希望这不重要,因为当你需要通过外键约束在另一个mysql表中通过序列号引用特定的离线消息时,ejabberd中从来没有时间。

我确信processone的某个人对此有一个意见,这导致了一个独特的约束,而不是一个主键。与mod_offline_odbc广泛合作后,我可以向您保证,如果您将“primary_key(seq)”添加到假脱机表定义并删除seq列上的冗余唯一约束,它将不会对ejabberd产生影响。