Oracle SQL назначают конкретные значения - PullRequest
0 голосов
/ 12 марта 2019

Так что я работаю над своей курсовой работой, и я как бы застрял в том, что делать для этой части.Вопрос в следующем:

Flatpack (FlatpackID, Имя, Цвет, Тип, UnitPrice)

  • FlatpackID должен генерироваться СУБД

  • Имя должно содержать не более 20 символов и должно быть не пустым

  • Цвет необязательный

  • Тип - один из (Офис, Кухня, Спальня, Общая)

  • Цена за единицу должна быть в диапазоне от 5,00 до 500,00

Хорошо, поэтому мне нужна помощь, выделенная жирным шрифтом / курсивом, т.е. "Тип - один из (Офис, Кухня, Спальня, Общая")

Как именно я объявляю это вмой

CREATE TABLE FLATPACK (


);

Я спросил, и мне сказали, что разрешены только эти значения и ничего больше.

Любая помощь будет принята с благодарностью!Спасибо

Ответы [ 2 ]

2 голосов
/ 12 марта 2019

Один метод является проверочным ограничением:

constraint chk_flatpack_type check ( Type in ('Office', 'Kitchen', 'Bedroom', 'General') );

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

0 голосов
/ 12 марта 2019

Это один вариант (с типами, ограниченными проверочным ограничением):

SQL> CREATE TABLE flatpack
  2  (
  3     flatpackid  NUMBER CONSTRAINT pk_fp PRIMARY KEY,
  4     name        VARCHAR2 (20) NOT NULL,
  5     colour      VARCHAR2 (20),
  6     TYPE        VARCHAR2 (20)
  7                    CONSTRAINT ch_ty CHECK
  8                       (TYPE IN ('Office',
  9                                 'Kitchen',
 10                                 'Bedroom',
 11                                 'General')),
 12     unitprice   NUMBER CONSTRAINT ch_pr CHECK (unitprice BETWEEN 5 AND 500)
 13  );

Table created.

SQL>

Другой, лучше (почему? Более гибкий, так как вы можете добавить любой тип, который хотите,без изменения таблицы) опция заключается в создании таблицы, на которую будет ссылаться столбец TYPE:

SQL> CREATE TABLE flatpack_type (TYPE VARCHAR2 (20) CONSTRAINT pk_ty PRIMARY KEY);

Table created.

SQL> CREATE TABLE flatpack
  2  (
  3     flatpackid  NUMBER CONSTRAINT pk_fp PRIMARY KEY,
  4     name        VARCHAR2 (20) NOT NULL,
  5     colour      VARCHAR2 (20),
  6     TYPE        VARCHAR2 (20)
  7                    CONSTRAINT fk_fp_ty REFERENCES flatpack_type (TYPE),
  8     unitprice   NUMBER CONSTRAINT ch_pr CHECK (unitprice BETWEEN 5 AND 500)
  9  );

Table created.

SQL> insert into flatpack_type                  --> valid values
  2    select 'Office'  from dual union all
  3    select 'Kitchen' from dual union all
  4    select 'Bedroom' from dual union all
  5    select 'Genral'  from dual;

4 rows created.

Начиная с идентификатора, вы можете использовать столбец идентификаторов (если он равен 12c или выше)или стандартная опция для младших версий - триггер, который использует последовательность:

SQL> create sequence seq_fp;

Sequence created.

SQL> create or replace trigger trg_bi_fp
  2    before insert on flatpack
  3    for each row
  4  begin
  5    :new.flatpackid := seq_fp.nextval;
  6  end;
  7  /

Trigger created.

SQL>
...