0

SOF の皆様、こんにちは。

私のアプリケーションにはたくさんのテーブルがあります。また、各テーブルには 0/n 個の列挙子があります。すべてが順調に進んでいましたが、突然、クライアントが自分のデータをOracleに移動したいと考えました(それまではネイティブDBがありました)。これで、テーブルのSQLを作成できましたが、列挙子。

私はLord Internetに犠牲を払いました(これは基本的に、FBを1〜2時間見ないことを意味しました)、オラクルに使用できることを発見しました:

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

これをよく見てみると、列挙子用のテーブルを作成し、値を挿入する際にそれらのテーブルを制約として使用した方がよいことがわかりました。何かのようなもの

テーブル列挙子には、ID と列挙値の 2 つのフィールドがあります。

テーブル My_Table には、列挙子テーブルに存在する値のみを受け入れる Name 列があります。

理由: 1. 列挙子のほとんどは、異なるテーブル間で繰り返されます。2. クライアントがいずれかの列挙子テーブルを更新した場合、戻って他のすべてのテーブルも変更しないようにします。

他のソリューションも検討しています。しかし、あなたが私の旅を導いてくれるなら、私はあなたの賢者に感謝します.

null問題の解決策も見つかりました:D ...そして、空の文字列(または)テーブルの値のいずれかを挿入できます:

GOT THE SOLUTION :D

それらの両方を混合しました(つまり)CHECK INとConstraint :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 に答える