SQL ALTER TABLE 外键

SQL ALTER TABLE foreign key

我在使用 alter table 命令添加外键时遇到问题。不知道怎么做才好用。

我需要将 ISIK_ID 和 STAADION_ID 添加到 ISIK_STAADIONIL table 作为外键。

这是我的代码:

    CREATE TABLE ISIK(
    ISIK_ID INT NOT NULL,
    EESNIMI VARCHAR(25) NOT NULL, 
    PEREKONNANIMI VARCHAR(25) NOT NULL,
    ISIKUKOOD VARCHAR(20),
    KODAKONDSUS VARCHAR(30),
    SUGU CHAR(1) NOT NULL,
    HARIDUSTASE CHAR(1) NOT NULL,
    TELEFONI_NR VARCHAR(20),
    SYNNIPAEV DATE,
    CONSTRAINT ISIK_ID_PK PRIMARY KEY (ISIK_ID)
    );

    CREATE TABLE ISIK_STAADIONIL(
    ISIK_STAADIONIL_ID INT NOT NULL,
    CONSTRAINT ISIK__STAADIONIL_ID_PK PRIMARY KEY (ISIK_STAADIONIL_ID),
    ALATES TIMESTAMP,
    KUNI TIMESTAMP
    );

    CREATE TABLE STAADION(
    STAADION_ID INT NOT NULL,
    NIMETUS VARCHAR(20),
    KIRJELDUS VARCHAR(100),
    ASUKOHT VARCHAR(50),
    SUURUS VARCHAR(20),
    MAHUTAVUS INT,
    EHITATUD VARCHAR(20),
    EHITAJA VARCHAR(20),
    CONSTRAINT STAADION_ID_PK PRIMARY KEY (STAADION_ID)
    );

ALTER TABLE ISIK_STAADIONIL
ADD CONSTRAINT ISIK_ID_FK
FOREIGN KEY(ISIK_ID)
REFERENCES ISIK(ID);

您需要先添加列(到 table),然后才能使用它们创建 FK 约束。

CREATE TABLE ISIK_STAADIONIL(
    ISIK_STAADIONIL_ID INT NOT NULL,
    CONSTRAINT ISIK__STAADIONIL_ID_PK PRIMARY KEY (ISIK_STAADIONIL_ID),
    ALATES TIMESTAMP,
    KUNI TIMESTAMP,
    ISIK_ID INT,
    STAADION_ID INT
);

然后您的 ALTER 语句应该可以正常工作。

更新

稍微更改 table-设计会更有意义,如下所示。逻辑是 ISIK_IDSTAADION_ID 一起足以确定 ISIK_STAADIONIL table 中的唯一性,因此单独的 ID 是多余的:

CREATE TABLE ISIK_STAADIONIL(
    ISIK_ID INT NOT NULL,
    STAADION_ID INT NOT NULL,
    CONSTRAINT ISIK__STAADIONIL_ID_PK PRIMARY KEY (ISIK_ID, STAADION_ID),
    ALATES TIMESTAMP,
    KUNI TIMESTAMP
);