用于房地产代理的示例 Oracle DB

Sample Oracle DB for Real Estate Agency

我正在尝试为一个关于房地产代理的项目构建一个示例数据库,在关于房地产的 table 上,我有一列 Realtie_id,我希望它以 11%% 开头% 它应该是什么类型(int 或 varchar )以及如何进行约束?

 create table Realties (
    rid int not null,
    address varchar(50),
    m2 real not null,
    r_type varchar(20),
    primary key (rid),
    constraint c_rid check(rid in (.....
    );  

这取决于您要在其中存储什么。

  • 如果是字符串,使用VARCHAR2
  • 如果是数字,使用NUMBER(或INT

约束在任何情况下都可能是

SQL> create table realties
  2    (rid int constraint ch_rid check (substr(to_char(rid), 1, 2) = '11'));

Table created.

SQL> insert into realties (rid) values ('abc');
insert into realties (rid) values ('abc')
                                   *
ERROR at line 1:
ORA-01722: invalid number


SQL> insert into realties (rid) values ('245');
insert into realties (rid) values ('245')
*
ERROR at line 1:
ORA-02290: check constraint (SCOTT.CH_RID) violated


SQL> insert into realties (rid) values ('1245');
insert into realties (rid) values ('1245')
*
ERROR at line 1:
ORA-02290: check constraint (SCOTT.CH_RID) violated


SQL> insert into realties (rid) values ('11245');

1 row created.

SQL>

如果您的值为数字,则将该列设为数字数据类型。例外情况是当您的值是可以以零开头的数字字符串时,例如 phone 数字,而它应该是字符串数据类型;否则,如果您使用数字数据类型,那么语义上重要的前导零将被删除。由于您希望数字以 11 开头,因此此警告不适用。

至于CHECK约束,可以使用LIKE '11%',Oracle会隐式将其转换为字符串进行校验。

create table Realties (
  rid     int
          not null
          CONSTRAINT realties__rid__pk PRIMARY KEY
          CONSTRAINT realties__rid__chk CHECK ( rid LIKE '11%' ),
  address varchar(50),
  m2      real
          not null,
  r_type  varchar(20)
);