Noneyabees Ответов: 1

Как исправить эту ошибку "ошибка: нет уникального ограничения, соответствующего заданным ключам для ссылочной таблицы "инвентаризация""


CREATE TABLE INVENTORY(
    machine_name VARCHAR(25) UNIQUE,
    --ip_address WILL NEVER BE LONGER THAN 15 CHARACTERS BASED OF THE IP ADDRESS FORMAT
    ip_address CHAR(15) NOT NULL,
    --network_port WILL NEVER BE LONGER THAN 6 CHARACTERS BASED OF THE NETWORK PORT FORMAT
    network_port CHAR(6) NOT NULL,
    --mac_address WILL NEVER BE LONGER THAN 17 CHARACTERS BASED OF THE MAC ADDRESS FORMAT
    mac_address CHAR(17) NOT NULL,
    location_id VARCHAR(3) NOT NULL,
    CONSTRAINT pk_INVENTORY PRIMARY KEY(machine_name,ip_address, network_port, mac_address),
    CONSTRAINT fk_INVENTORY FOREIGN KEY (location_id) REFERENCES LOCATIONS(location_id)
                            ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE TABLE TICKETS(
    ticket_number INT,
    owner_pplSoft INT NOT NULL,
    date_submitted DATE NOT NULL,
    date_closed DATE NOT NULL,
    --DATEDIFF() WILL BE USED HERE TO GET THE INT VALUE
    days_worked_on INT NOT NULL,
    category_id INT NOT NULL,
    machine_name VARCHAR(25) NOT NULL,
    location VARCHAR(10) NOT NULL,
    description VARCHAR(280),
    CONSTRAINT pk_TICKETS PRIMARY KEY(ticket_number),
    CONSTRAINT fk_1_TICKETS FOREIGN KEY (owner_pplSoft) REFERENCES USERS(pplSoft)
                            ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT fk_2_TICKETS FOREIGN KEY (category_id) REFERENCES CATEGORIES(category_id)
                            ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT fk_3_TICKETS FOREIGN KEY (machine_name) REFERENCES INVENTORY(machine_name)
                            ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT fk_4_TICKETS FOREIGN KEY (location) REFERENCES LOCATIONS(location)
                            ON DELETE CASCADE ON UPDATE CASCADE
);


Что я уже пробовал:

я попытался добавить ограничение unique к переменной machine_name в отношении инвентаризации.

Sandeep Mewara

С вышеперечисленными двумя столами - я вижу их нормально. Предполагая, что ошибка связана с созданием билетов таблицы только при совместном использовании:
Попробуй:

machine_name VARCHAR(25),
CONSTRAINT unique_machine_name UNIQUE(machine_name)


Я не уверен - я думаю, что это из-за нескольких первичных ключей или что-то связанное с местоположениями FK для обеих таблиц. Странно, что одно место у вас есть на ID, а другое нет. Если вышеописанное не решает проблемы, попробуйте удалить местоположение FK один раз и посмотреть.

1 Ответов

Рейтинг:
0

ZurdoDev

Сообщение об ошибке означает, что одно из ваших ограничений внешнего ключа ссылается на поле, которое не является уникальным. Например у вас есть:

CONSTRAINT fk_4_TICKETS FOREIGN KEY (location) REFERENCES LOCATIONS(location)
                            ON DELETE CASCADE ON UPDATE CASCADE


Что внешний ключ ссылается на поле в таблице адресам. Однако поле location не является уникальным (либо с ограничением unique, либо в качестве первичного ключа), поэтому внешний ключ не может быть создан.