Попытка выучить Mysql и натолкнуться на ограничение внешнего ключа - неправильно сформированная ошибка - PullRequest
1 голос
/ 07 января 2020

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

CREATE TABLE PEOPLE (
    NAME VARCHAR(32) NOT NULL,
    GENDER ENUM('Male', 'Female', 'Other'),
    DOB DATE NOT NULL,
    SALARY VARCHAR(16) NOT NULL,
    PROJECT VARCHAR(32) NOT NULL,
    BUSINESS_NAME VARCHAR(32) NOT NULL,
    PRIMARY KEY(NAME, PROJECT)
);

CREATE TABLE PEOPLE_EMAILS (
    NAME_ID VARCHAR(32) NOT NULL,
    EMAIL VARCHAR(64) NOT NULL,
    PRIMARY KEY(EMAIL),
    FOREIGN KEY(NAME_ID) REFERENCES PEOPLE(NAME)
);

CREATE TABLE PEOPLE_PHONE (
    NAME_ID2 VARCHAR(32) NOT NULL,
    PHONE_NUMBER VARCHAR(32) NOT NULL,
    PRIMARY KEY (PHONE_NUMBER),
    FOREIGN KEY(NAME_ID2) REFERENCES PEOPLE(NAME)
);

CREATE TABLE PROJECTS (
    PROJECT_NAME VARCHAR(32) NOT NULL,
    PROJECT_LOCATION VARCHAR(32) NOT NULL,
    BUDGET VARCHAR(16) NOT NULL,
    FOREIGN KEY(PROJECT_NAME) REFERENCES PEOPLE(PROJECT)
);

1 Ответ

1 голос
/ 07 января 2020

Предположительно, вам нужен внешний ключ наоборот. Можно ожидать, что люди будут ссылаться на проекты, а не проекты, чтобы ссылаться на людей.

Это означает, что вам нужно сначала создать таблицу проектов, а затем таблицу сотрудников. Кроме того, вам нужен правильный первичный ключ для проектов, чтобы вы могли ссылаться на него в людях (я предположил project_name).

CREATE TABLE PROJECTS (
    PROJECT_NAME VARCHAR(32) NOT NULL,
    PROJECT_LOCATION VARCHAR(32) NOT NULL,
    BUDGET VARCHAR(16) NOT NULL,
    PRIMARY KEY (PROJECT_NAME)
);

CREATE TABLE PEOPLE (
    NAME VARCHAR(32) NOT NULL,
    GENDER ENUM('Male', 'Female', 'Other'),
    DOB DATE NOT NULL,
    SALARY VARCHAR(16) NOT NULL,
    PROJECT VARCHAR(32) NOT NULL,
    BUSINESS_NAME VARCHAR(32) NOT NULL,
    PRIMARY KEY(NAME, PROJECT),
    FOREIGN KEY(PROJECT) REFERENCES PROJECTS(PROJECT_NAME)
);

CREATE TABLE PEOPLE_EMAILS (
    NAME_ID VARCHAR(32) NOT NULL,
    EMAIL VARCHAR(64) NOT NULL,
    PRIMARY KEY(EMAIL),
    FOREIGN KEY(NAME_ID) REFERENCES PEOPLE(NAME)
);

CREATE TABLE PEOPLE_PHONE (
    NAME_ID2 VARCHAR(32) NOT NULL,
    PHONE_NUMBER VARCHAR(32) NOT NULL,
    PRIMARY KEY (PHONE_NUMBER),
    FOREIGN KEY(NAME_ID2) REFERENCES PEOPLE(NAME)
);

Демонстрация на DB Fiddle

...