Oracleの1つのテーブルに複合主キーがあります。最初のテーブルの複合主キーを参照する2番目のテーブルの1つのテーブルエントリの外部キーを作成します。エラーORA-02256が発生します。これをどのように入力できるかについての考えはありますか?
CREATE TABLE groupspersonx (
personid number,
groupid number,
CONSTRAINT pk_persongroupid PRIMARY KEY(personid, groupid)
);
CREATE TABLE restrictedgroups (
groupid number,
name varchar2(50),
dateadded date,
since date,
notes varchar2(1024),
CONSTRAINT pk_groupid PRIMARY KEY(groupid),
CONSTRAINT fk_persongroup FOREIGN KEY(groupid) REFERENCES groupspersonx(personid, groupid)
);
エラーは、FOREIGN KEYが1つの列であるためですが、親として2つの列を指定しようとしています。 restrictedgroups
にはpersonid
列がないため、複合キーに関連付ける必要はありません...
また、後方にも関係があります。以下を使用してください。
CREATE TABLE restrictedgroups (
groupid number,
name varchar2(50),
dateadded date,
since date,
notes varchar2(1024),
CONSTRAINT pk_groupid PRIMARY KEY(groupid)
);
CREATE TABLE groupspersonx (
personid number,
groupid number,
CONSTRAINT pk_persongroupid PRIMARY KEY(personid, groupid),
CONSTRAINT fk_persongroup FOREIGN KEY(groupid) REFERENCES restrictedgroups(groupid)
);
personid
がどのテーブルからのものになるかについて、外部キー制約を追加します。
CREATE TABLE groupspersonx(
personid number, groupid number,
CONSTRAINT pk_persongroupid PRIMARY KEY(personid, groupid));
CREATE TABLE restrictedgroups (
pid number,
groupid number,
name varchar2(50),
dateadded date,
since date,
notes varchar2(1024),
CONSTRAINT pk_groupid PRIMARY KEY(groupid),
CONSTRAINT fk_persongroup FOREIGN KEY(pid,groupid) REFERENCES groupspersonx(personid, groupid));
*参照列の数が外部キー列と等しい
列に複合主キーまたは一意の制約を作成する場合は常に、別のテーブルで参照を与えることはできません。
例として。
sql>create table t1( a number,b number,c number ,primary key(a,b,c));
table created.
sql>create table g1(a number constraint con_fg references t1(a));
ERROR at line 1:
ORA-02270: no matching unique or primary key for this column-list
ここで、t1は親テーブルで、g1は子テーブルです。子テーブルには、1つの列に重複する値を含めることができます。したがって、Oracleはその列のテーブルを許可しません。
こちらもご覧ください
SQL>select constraint_name,constraint_type from user_constraints where table_name='T1';
CONSTRAINT_NAME C
------------------------------ -
SYS_C005822 P
したがって、ここでも3つの列すべての唯一の制約、つまりt1テーブルのa、b、cです。
そのため、複合主キーまたは複合一意制約に外部を作成できません
次のものは使用できません。
CONSTRAINT fk_persongroup FOREIGN KEY(groupid) REFERENCES groupspersonx(personid, groupid)
それも変更してください:
CONSTRAINT fk_persongroup FOREIGN KEY(groupid) REFERENCES groupspersonx(groupid)
うまくいくはずです。