Как добавить обнуляемый столбец как часть первичного составного ключа таблицы? - PullRequest
0 голосов
/ 10 мая 2018

У нас есть таблица с данными о производстве:

CREATE TABLE VerifiedUsers (
    Mobile varchar(20) NOT NULL,
    Email varchar(255) NOT NULL,
    Name varchar(255),
    PRIMARY KEY (Mobile,Email)
);

У нас есть новое требование, в котором нам нужно сохранить уникальный идентификатор устройства пользователя в этой таблице, чтобы любой, кого мы однозначно идентифицировали, на основе(Mobile, Email, DeviceId), а не (Mobile, Email).

Этот новый столбец DeviceId должен иметь значение Nullable, поскольку мы не можем гарантировать, что каждый клиент отправит нам DeviceId.С другой стороны, мы должны сделать его частью первичного ключа, поскольку теперь у нас может быть несколько строк с одинаковыми (Mobile, Email), но разными DeviceId.

Как мы должны решить эту проблему.Должны ли мы решить эту проблему, присвоив DeviceId какое-либо значение по умолчанию, если оно пустое?

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

В этой ситуации значение по умолчанию не будет более полезным, чем просто нулевое значение. В любом случае, оба значения не помогают идентифицировать пользователя. Первичный ключ с автоинкрементом был бы идеальным решением, но это было бы, только если бы это было разрешено в вашей ситуации.

0 голосов
/ 10 мая 2018

Я бы предложил:

CREATE TABLE VerifiedUsers (
    VerifiedUserId int auto_increment primary key,
    Mobile varchar(20) NOT NULL,
    Email varchar(255) NOT NULL,
    DeviceId varchar(255),  -- or whatever
    Name varchar(255),
    UNIQUE (Mobile, Email, DeviceId)
);

Компоненты первичного ключа не могут быть обнуляемыми.Наличие одного столбца с автоинкрементом в качестве первичного ключа удобно по многим причинам:

  • Полезно для ссылок на внешние ключи.
  • Отслеживает порядок вставки.
  • Использует только 4 байта (или 8 байтов, если таблица действительно очень большая).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...