0

问候 SOF 同志们,

我的应用程序有很多表。每个表都有 0/n 个枚举数。一切都很顺利,然后突然间我的客户现在想将他的数据移动到 Oracle(直到那时他们有一些本机数据库。)现在我们已经设法为我们拥有但一无所知的表创建 SQL枚举器。

我向上帝的互联网做出了牺牲(这基本上意味着我在 1-2 小时内不看 FB)并发现我们可以使用 oracle:

Column_Name Data_type(size)(Check In(<Possible Values>)).

仔细观察,我发现如果我们为枚举数创建表并在插入值时使用这些表作为约束会更好。就像是

表枚举器有 2 个字段 ID 和枚举器值

表 My_Table 有一个 Name 列,它只接受 Enumerator Table 中存在的值。

原因: 1. 大多数枚举器在不同的表中重复。2. 如果客户端要更新任何枚举器表,我们不希望他们返回并更改所有其他表。

我也在寻找其他解决方案。但是,如果您能指导我的旅程,我将感激您的智者。

也找到了空问题的解决方案:D ...现在我可以插入一个空字符串(或)表中的任何一个值:

GOT THE SOLUTION :D

将它们混合在一起(即)检查和约束:D

CREATE TABLE "MY_TABLE1"
("ID" number(11) not null,
"STATUS" varchar2(12) Check(STATUS IN('')),  << -- Did the trick,
FOREIGN KEY("STATUS") REFERENCES MY_ENUM3("VALUES"),
primary key ("ID"));
4

1 回答 1

1

您可以使用引用约束,如下例所示:

SQL> create table enumerator1( id number constraint enum_pk primary key, name varchar2(100) );

Table created.

SQL> create table t2( id number, enum1_id number constraint enum1_ref references enumerator1 );

Table created.

SQL> insert into enumerator1 values ( 1, 'LABEL 1' );

1 row created.

SQL> insert into t2 values ( 200, 2 );  <== DOES NOT EXIST (YET)
insert into t2 values ( 200, 2 )
*
ERROR at line 1:
ORA-02291: integrity constraint (TEST1.ENUM1_REF) violated - parent key not found


SQL> insert into enumerator1 values( 2, 'LABEL 2' );

1 row created.

SQL> insert into t2 values ( 200, 2 );   <== NOW IT'S OK

1 row created.
于 2013-05-22T10:31:05.190 回答