問題はそれです
CONSTRAINT iam_is_group_fk FOREIGN KEY(is_group) REFERENCES Members(group_name);
references the table Members on the group_name field.
これは、テーブルのフィールドis_groupが、テーブルとフィールドGroupMembers
で同じ値である必要があることを意味します。Members
group_name
私の意見では、これは悪い習慣です。まず、テーブルGroupMembersに主キーフィールドが必要です。グループメンバーの名前をテーブルGroupMembersに保存するのではなく、テーブルMembersからの対応するIDを保存する必要があります。
また、テーブルMembersは、次のようになります。
CREATE TABLE Members (
member_id NUMBER PRIMARY KEY
member_name VARCHAR2(40),
CONSTRAINT g_id_pk PRIMARY KEY(member_id),
CONSTRAINT m_group_name_fk FOREIGN KEY(group_name) REFERENCES Artist(artistic_name));
次に、テーブル上で、GroupMembers
一部のメンバーをグループのセットに関連付けて元に戻したいと思うので、次のようにする必要があります。
CREATE TABLE GroupMembers (
member_id NUMBER,
group_id NUMBER
)
CONSTRAINT iam_is_member_fk FOREIGN KEY(member_id) REFERENCES Members(member_id);
CONSTRAINT iam_is_member_fk FOREIGN KEY(group_id) REFERENCES Groups(group_id);
、、およびnameとして格納されGroups
た、すべてのグループの詳細を含むテーブルがあるとします。primary key
number
group_id
各テーブルには。が必要であることを常に覚えておいてくださいprimary key
。このキーは数字にすることをお勧めします。
Members
したがって、group_id
にmember_idを含めるGroups
ことにより、で多対多の関係を作成できますGroupMembers
。また、このテーブルに一意のインデックスを付けて、重複がないようにします(同じメンバーが同じIDに複数回関連付けられている)。
ユーザーをロールにリンクするこの例を見てください。同じ場合です: