Oracle:多对多:需要两个外键约束?

Oracle: Many to Many: Requires two Foreign Key Constraints?

我是 SQL 的新手,我尝试创建多对多关系:

CREATE TABLE HOUSE_USER
(
    USER_ID NUMBER(10) NOT NULL,
    USER_EMAIL VARCHAR(255) NOT NULL,
    USER_PASSWORD VARCHAR(255) NOT NULL,
    CONSTRAINT USER_PK PRIMARY KEY(USER_ID),
    CONSTRAINT PROFILE_FK FOREIGN KEY(PROFILE_ID) REFERENCES HOUSE_PROFILE(PROFILE_ID)
);

CREATE TABLE HOUSE_USER_GROUPE
(
    USER_GROUPE_ID NUMBER(10) NOT NULL,
    USER_GROUPE_NAME VARCHAR(255) NOT NULL,
    CONSTRAINT USER_GROUPE_PK PRIMARY KEY(USER_GROUPE_ID)
);

CREATE TABLE HOUSE_USER_USER_GROUPE
(
    USER_ID NUMBER(10) NOT NULL,
    USER_GROUPE_ID NUMBER(10) NOT NULL,
    CONSTRAINT USER_USER_GROUPE_PK PRIMARY KEY(USER_ID, USER_GROUPE_ID),
    CONSTRAINT USER_FK FOREIGN KEY(USER_ID) REFERENCES HOUSE_USER(USER_ID),
    CONSTRAINT USER_GROUPE_FK FOREIGN KEY(USER_GROUPE_ID) REFERENCES HOUSE_USER_GROUPE(USER_GROUPE_ID)
);

我现在要问的是这两个限制条件:

CONSTRAINT USER_FK FOREIGN KEY(USER_ID) REFERENCES HOUSE_USER(USER_ID),
CONSTRAINT USER_GROUPE_FK FOREIGN KEY(USER_GROUPE_ID) REFERENCES 

是否需要。我问是因为我还有另一个多对多关系:

CREATE TABLE HOUSE_USER_GROUPE
(
    USER_GROUPE_ID NUMBER(10) NOT NULL,
    USER_GROUPE_NAME VARCHAR(255) NOT NULL,
    CONSTRAINT USER_GROUPE_PK PRIMARY KEY(USER_GROUPE_ID)
);

CREATE TABLE HOUSE_ACCESSR
(
    ACCESSR_ID NUMBER(10) NOT NULL,
    ACCESSR_NAME VARCHAR(255) NOT NULL,
    CONSTRAINT ACCESSR_PK PRIMARY KEY(ACCESSR_ID)
);

CREATE TABLE HOUSE_USER_GROUPE_ACCESR
(
    USER_GROUPE_ID NUMBER(10) NOT NULL,
    ACCESSR_ID NUMBER(10) NOT NULL,
    CONSTRAINT USER_GROUPE_ACCESSR_PK PRIMARY KEY(USER_GROUPE_ID, ACCESSR_ID),
    CONSTRAINT USER_GROUPE_FK FOREIGN KEY(USER_GROUPE_ID) REFERENCES HOUSE_USER_GROUPE(USER_GROUPE_ID),
    CONSTRAINT ACCESSR_FK FOREIGN KEY(ACCESSR_ID) REFERENCES HOUSE_ACCESSR(ACCESSR_ID)
);

我无法创建第二个多对多 table 因为我已经使用了约束:

CONSTRAINT USER_GROUPE_FK FOREIGN KEY(USER_GROUPE_ID) REFERENCES HOUSE_USER_GROUPE(USER_GROUPE_ID),

我可以重命名它,但由于那个错误:

ORA-02264: name already used by an existing constraint

我只是想知道这些约束是否是强制性的。

,您应该在两个 table 上创建外键约束。

外键约束是为了保持参照完整性;确保您不能插入父 table.

中不存在的值

如果您不向 HOUSE_USER_GROUPE_ACCESR 添加约束,那么您就不会在 table 中获得保护。而你应该想要这种保护无处不在


您唯一明显的错误是约束名称彼此相同。我传统上要么包含无名称 (让 Oracle 决定名称,因为我从不按名称引用约束) 或使用类似 fk_<table>_<field>.[=12= 的格式]

您需要执行约束.. 用另一个名称创建第二个约束。