3

次のエラーが表示されます。

INSERT INTO GroupMembers VALUES ('Goldfrat', 'Simon Palm')
*
ERROR at line 1:
ORA-02291: integrity constraint (SHAHA1.IAM_IS_GROUP_FK) violated - parent key 
not found 

GroupMembersテーブルの制約は次のとおりです。

CONSTRAINT  iam_is_group_fk FOREIGN KEY(is_group) REFERENCES Members(group_name)

メンバーテーブルは次のようになります。

CREATE TABLE Members (
  group_name  VARCHAR2(40),
  CONSTRAINT  g_id_pk PRIMARY KEY(group_name),
  CONSTRAINT  m_group_name_fk FOREIGN KEY(group_name) REFERENCES Artist(artistic_name));

テーブルの作成に関しては、すべてのテーブルが正常に作成されGroupMembersます。誰かアイデアはありますか?私はかなり長い間引っ掻いてきました。

4

3 に答える 3

5

問題はそれです

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で同じ値である必要があることを意味します。Membersgroup_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 keynumbergroup_id

各テーブルには。が必要であることを常に覚えておいてくださいprimary key。このキーは数字にすることをお勧めします。

Membersしたがって、group_idにmember_idを含めるGroupsことにより、で多対多の関係を作成できますGroupMembers。また、このテーブルに一意のインデックスを付けて、重複がないようにします(同じメンバーが同じIDに複数回関連付けられている)。

ユーザーをロールにリンクするこの例を見てください。同じ場合です: ここに画像の説明を入力してください

于 2012-11-22T18:41:28.823 に答える
0

挿入した順序がエラーの理由です。

Members(group_name)は含まれていませんGoldfrat。これが当てはまらない場合は、テーブルにありませんArtists

于 2012-11-22T18:27:50.850 に答える
0

エラーは、参照テーブルで定義されているのと同じ列名を使用する必要があることです

すなわち

CONSTRAINT m_group_name_fk FOREIGN KEY(group_name) REFERENCES Artist(group_name)

これは、表のgroup_nameように定義する必要があります。primary keyArtist

于 2015-02-02T12:41:27.423 に答える