因此,我正在做我的课程工作,我被困在了该为这一部分做些什么上。问题是:
Flatpack(FlatpackID,Name,Colour,Type,UnitPrice)
好的,我需要帮助的是用粗体/斜体表示的那个。类型是(办公室,厨房,卧室,一般)之一。
我到底是怎么在我的
CREATE TABLE FLATPACK (
);我问了,他们告诉我,它只允许这些价值观,而没有其他任何东西。
任何帮助都将不胜感激!谢谢
发布于 2019-03-12 10:50:31
一种方法是检查约束:
constraint chk_flatpack_type check ( Type in ('Office', 'Kitchen', 'Bedroom', 'General') );另一个选项是将外键约束设置为引用表,并使引用表仅包含这些值。
发布于 2019-03-12 10:56:19
这是一个选项(类型受check约束的限制):
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.从ID开始,您可以使用标识列(如果在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>https://stackoverflow.com/questions/55119612
复制相似问题