Таблица спула, созданная ejabberd на MySQL, не имеет PK. Это ошибка или особенность? - PullRequest
0 голосов
/ 05 декабря 2011

Это ошибка (я мог бы вручную создать для нее ПК) или это функция?

1 Ответ

1 голос
/ 01 февраля 2012

Я взглянул на текущий mysql.sql из ветви ejabberd 2.1.x для дополнительного контекста на 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" является уникальным идентификатором, который можно использовать так же, как первичный ключ, за исключением того, что на него нельзя ссылаться на внешние ключи.Я ожидаю, что это неважно, потому что в ejabberd никогда не бывает времени, когда вам нужно ссылаться на определенное автономное сообщение по его порядковому номеру в другой таблице mysql посредством ограничения внешнего ключа.

Я уверен, что кто-тоУ processone было мнение об этом, которое привело к уникальному ограничению вместо первичного ключа.Тщательно поработав с mod_offline_odbc, я могу заверить вас, что ejabberd не будет иметь значения, если вы добавите «primary_key (seq)» в определение таблицы спула и удалите избыточное уникальное ограничение для столбца seq.

...