Лучший способ создать уникальный индекс в MYSQL для двух столбцов, когда один столбец может содержать пустые значения - PullRequest
1 голос
/ 26 марта 2020

Я хотел бы создать уникальный индекс для двух столбцов, один из которых всегда имеет значение, а другой - где значение по умолчанию часто равно 0.

В следующем примере идентификатору пользователя 22 понравились 2 телепередачи и 3 фильма. Я хочу предотвратить случай, когда пользователь хотел бы одного и того же телешоу или mov ie дважды. Тем не менее, я не могу сделать его уникальным для идентификатора пользователя и идентификатора фильма или идентификатора пользователя и идентификатора пользователя и tvshowid, поскольку во многих случаях идентификатор пользователя соединяется с 0, когда аналогично для телешоу.

Likes
id|userid|movieid|tvshowid
1|22|0|33
2|22|0|34
3|22|66|0
4|22|67|0
5|22|68|0

Я мог бы изменить все 0 на NULL, но NULLS, как правило, создают проблемы на клиенте.

Каков наилучший способ обработки создания уникального индекса для двух столбцов, когда один имеет несколько пустых значений в нем?

Если требуется изменить все 0 на NULL, есть ли эффективный оператор MYSQL для этого?

Ответы [ 2 ]

1 голос
/ 26 марта 2020

Изменить нули на NULL:

UPDATE Likes SET movieid = NULL WHERE movieid = 0;
UPDATE Likes SET tvshowid = NULL WHERE tvshowid = 0;

Создать два уникальных ключа, один для фильмов и один для ТВ-шоу.

ALTER TABLE Likes
  ADD UNIQUE KEY (userid, movieid),
  ADD UNIQUE KEY (userid, tvshowid);

Я не знаю что вы подразумеваете под значениями NULL, вызывающими проблемы на клиенте. Любой клиент, который может использовать SQL, должен иметь возможность обрабатывать NULL.

0 голосов
/ 28 марта 2020

План Б: 2 таблицы, каждая с 3 столбцами. Один говорит о телевизионных шоу; один для фильмов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...