Таким образом, у меня есть эта таблица с составным ключом, в основном 'идентификатор пользователя '-'data' должен быть уникальным (см. мою другую таблицу SQL вопроса - полууникальная строка?)
Однако я задавался вопросом, было ли возможно заставить это только войти в силу, когда идентификатор пользователя не является нулем? Этим я имею в виду, 'идентификатор пользователя '-'data' должен быть уникальным для ненулевых идентификаторов пользователей?
Или я рявкаю неправильное дерево?
Спасибо
Mala
Ограничения SQL применяются к каждой строке в таблице. Вы не можете сделать их условными на основе определенных значений данных.
Однако, если вы можете использовать NULL
вместо нуля, вы можете обойти уникальное ограничение. Уникальное ограничение позволяет нескольким записям, которые имеют NULL
. Причина в том, что уникальность означает отсутствие двух равных ценностей . Средство равенства значение
значение1 = значение2
должно быть правдой. Но в SQL, NULL = NULL
неизвестен , не правда.
CREATE TABLE MyTable (id SERIAL PRIMARY KEY, userid INT, data VARCHAR(64));
INSERT INTO MyTable (userid, data) VALUES ( 1, 'foo');
INSERT INTO MyTable (userid, data) VALUES ( 1, 'bar');
INSERT INTO MyTable (userid, data) VALUES (NULL, 'baz');
До сих пор так хорошо, теперь вы можете подумать, что следующие утверждения будут нарушать уникальные ограничения, но они не:
INSERT INTO MyTable (userid, data) VALUES ( 1, 'baz');
INSERT INTO MyTable (userid, data) VALUES (NULL, 'foo');
INSERT INTO MyTable (userid, data) VALUES (NULL, 'baz');
INSERT INTO MyTable (userid, data) VALUES (NULL, 'baz');