房地产代理的Oracle DB示例

房地产代理的Oracle DB示例,oracle,oracle-sqldeveloper,check-constraints,Oracle,Oracle Sqldeveloper,Check Constraints,我试图为一个关于房地产代理的项目建立一个样本数据库,在关于房地产的表格上,我有一个列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), constrain

我试图为一个关于房地产代理的项目建立一个样本数据库,在关于房地产的表格上,我有一个列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>

如果您的值是数字,则将列设置为数字数据类型。例外情况是,当您的值是一个可以以零开头的数字字符串(如电话号码)时,它应该是一个字符串数据类型;否则,如果使用数字数据类型,则在语义上重要的前导零将被去除。由于您希望数字以
11
开头,因此此警告不适用

至于
检查
约束,您可以使用
如“11%”
,Oracle将隐式地将其转换为字符串以执行检查

创建表不动产(
rid int
非空
约束不动产\u_rid\u_pk主键
约束不动产\uuuuu rid\uuuu chk检查(像'11%'一样的rid),
地址:varchar(50),
m2真实
不为空,
r_型varchar(20)
);

正如其他人所说,如果它是一个字符串,请将其设置为varchar2。如果它是一个真正的数字,就把它变成数字。我要提醒的是,按照惯例,如果它只使用数字字符,那么它不一定是数字。只有当在数学运算中使用它有意义时,它才是一个数字。想想电话号码,美国社会保险号码,信用卡号码。它们都是数字字符,但当它们被设计时,约定也可以是字母。你永远不会添加它们。它们不是数字。