简体   繁体   中英

SQL ALTER TABLE foreign key

I have a problem with adding foreign keys with alter table command. I don't know how to make it so it works.

I need to add ISIK_ID and STAADION_ID to ISIK_STAADIONIL table as foreign key.

Here is my code:

    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);

You need to add the columns first (to the table) before you can create FK constraints using them.

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
);

And then your ALTER statement should work fine.

UPDATE

Changing the table-design slightly would make more sense, as per following. The logic is that ISIK_ID and STAADION_ID would together be sufficient to determine uniqueness in the ISIK_STAADIONIL table, so a separate ID is redundant:

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
);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM