私は2つのテーブルを作成しています。まず、検証ステップのようなものになりますが、検証が成功した後に2番目のデータが保持されます。別のテーブルの列にユニークな制約があります
だから私の最初のテーブルには、次のとおりです。
CREATE TABLE TABLE_NAME_TEMP(
SOME_NO number not null,
GROUP_NAME VARCHAR2(100) NOT NULL,
PARENT_GROUP_ID INT,
PRIMARY KEY (SOME_NO),
CONSTRAINT FK_PARENT FOREIGN KEY(PARENT_GROUP_ID) REFERENCES
TABLE_NAME(ID),
CONSTRAINT GROUP_NAME_UNIQUE UNIQUE (TABLE_NAME.GROUP_NAME, GROUP_NAME)
);
と検証に合格した後に保持する第2のテーブル:
CREATE TABLE TABLE_NAME(
ID number not null,
GROUP_NAME VARCHAR2(100) NOT NULL,
PARENT_GROUP_ID INT,
PRIMARY KEY(ID),
CONSTRAINT FK_PARENT FOREIGN KEY(PARENT_GROUP_ID) REFERENCES
TABLE_NAME(ID),
CONSTRAINT GROUP_NAME_UNIQUE UNIQUE (GROUP_NAME),
CONSTRAINT PK_ID_UNIQUE UNIQUE (ID)
);
私の問題はGROUP_NAMEは、TABLE_NAMEで一意でなければならないということです。ですから、TABLE_NAME_TEMPのGROUP_NAMEがTABLE_NAMEの既存の値と一致しないようにする必要があります。私が試したのはCONSTRAINT GROUP_NAME_UNIQUE UNIQUE (TABLE_NAME.GROUP_NAME, GROUP_NAME)
です。エラーが発生します。何かアドバイス?
指定したGROUP_NAMEをTABLE_NAME_TEMPまたはTABLE_NAMEのいずれかに1回だけ表示したいが、その両方には表示しないことをお勧めしますか?そうであれば、一意の制約で単一の表にしか適用できないため、実現することはできません。さらに、ある時点では、両方のテーブルにエントリを持つことになります。これは、別のテーブルに移動する前に何かを削除するのが珍しいからです。通常、行をコピーしてから削除します。私はなぜそれが検証されているかどうかを示すフラグを持つ単一のテーブルを持っていないのだろうか? – Boneist
@Boneist確かにこれは私が意味することです、私は行くと私は行くだろうし、手続きの周りにいくつかの仕事を試してみて – Hatik
検証されたフラグ列を持つ単一のテーブルではなく、2つの別々のテーブルの理由は何ですか? (また、 "先生"は大きな前提です!* {;-)) – Boneist