Установка предопределенных значений для столбца в базе данных - PullRequest
1 голос
/ 09 марта 2012

Я создаю таблицу

create tabel xyz
( id number (10) not null,
  code char(1) ,

primary key (id)
)

Я хочу, чтобы у пользователя были предопределенные значения для столбца кода, такие как P, S, C. Как это сделать? В настоящее время я использую код char (1) DEFAULT ('P', 'S', 'C') но с этим я получаю ошибку. Пожалуйста, предложите, а также я хочу, чтобы этот столбец не был нулевым ...

Ответы [ 3 ]

1 голос
/ 09 марта 2012

ENUM тип столбца прост, но может вернуться к вам. Я бы порекомендовал добавить таблицу «поиска», в которой будут храниться значения, о которых вы говорите, а затем добавить столбец «value_id» в таблицу первичных объектов, например:

primary_table:
    id
    value_id

value_table:
    id:
    name: #P, S, C

Если ваша таблица большая и вам нужно изменить любое из значений перечисления, вам нужно будет выполнить изменение таблицы, что может означать значительное время простоя.

0 голосов
/ 09 марта 2012

Если вам нужно отобразить эти значения пользователю, вероятно, проще всего создать другую таблицу и использовать ссылку на внешний ключ. Вы могли бы реализовать это как ограничение CHECK в dbms, которое применяет ограничения CHECK, но представление допустимых вариантов пользователю будет проблематичным.

-- You'll want to restrict permissions on this table pretty tightly. Very few
-- people should be allowed to change it.
create table xyz_codes (
  code char(1) primary key CHECK (code in ('P', 'S', 'C'))
);

insert into xyz_codes values ('P'), ('S'), ('C');

create table xyz ( 
  id integer primary key,
  code char(1) references xyz_codes (code)
);

После этого следующий оператор INSERT завершится с ошибкой внешнего ключа.

insert into xyz values (1, 'D');

Но этот преуспеет.

insert into xyz values (1, 'C');

Чтобы выбрать действительные варианты для представления пользователю, используйте

select code 
from xyz_codes
order by code;
0 голосов
/ 09 марта 2012

Предполагая, что вы находитесь на MySQL, используйте enum:

code ENUM('P', 'S', 'C')

http://dev.mysql.com/doc/refman/5.0/en/enum.html

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