2015-01-16 4 views
0

Рассмотрим следующую таблицу:SQL: NOT NULL ограничение на множестве столбцов

CREATE TABLE user(
    first_name text, 
    last_name text, 
    ... 
) 

Я хотел бы иметь возможность добавлять пользователей либо имя, фамилию, или оба - но я выиграл 't разрешить пользователю без какого-либо имени. Другими словами (спасибо, @wildplasser) - по крайней мере один столбец не должен быть NULL.

INSERT INTO user(first_name, last_name) VALUES ("foo", NULL); # 1. OK 
INSERT INTO user(first_name, last_name) VALUES ("foo", "bar"); # 2. OK 
INSERT INTO user(first_name, last_name) VALUES (NULL, "bar"); # 3. OK 
INSERT INTO user(first_name, last_name) VALUES (NULL, NULL); # 4. NOT OK 

Очевидно, NOT NULL ограничения на каждый столбце отключат примеры 2 и 3.

Как я могу выразить NOT NULL ограничения на наборе столбцов в SQL?

+0

Одним из методов является создание триггера, который проверяет оба столбца, и если оба столбца равны нулю, создайте исключение. – NullEverything

+2

Вы имеете в виду: * как минимум * один из столбцов должен быть BOT NULL? – wildplasser

+0

будет [это] (http://www.postgresql.org/message-id/[email protected]) помочь? –

ответ

1
CREATE TABLE user(
    first_name text, 
    last_name text, 
    ..., 
    CHECK (first_name IS NOT NULL OR last_name IS NOT NULL) 
) 
+0

Вы имели в виду 'OR'? –

+0

yep, whoops, thanks – gordy

+0

Я правильно отмечаю ваш ответ и ссылаюсь на все более глубокое объяснение здесь: http://stackoverflow.com/questions/21021102/not-null-constraint-over-a-set-of -columns? RQ = 1 –

0

Вы можете использовать запрос

Например, как этот

INSERT INTO user(first_name) VALUES (NULL); 

lastname будет NULL, когда схема базы данных установить столбец lastname позволяют NULL

Будем надеяться помочь Спасибо

Смежные вопросы