Установить внешний ключ таблицы для двух целевых столбцов в одной целевой таблице PostgreSQLl - PullRequest
0 голосов
/ 18 января 2020

Я создаю таблицу «line», в которой есть столбцы «startpoint» и «endpoint», эти столбцы должны быть заполнены по имени этих точек, то есть в таблице «points» в столбце «name of point». Я пытаюсь установить внешний ключ из таблицы точек в строку: один для столбца начальной точки, а другой - для столбца конечной точки, но оба ссылаются на один и тот же столбец в таблице точек, который называется «имя точки». Но это не сработало. Как мне это сделать? Обратите внимание, что я использую Postgresql версии 11.6 этот код:

'create table public.line(
    lineid integer NOT NULL DEFAULT nextval('line_lineid_seq'::regclass),
    linetype character varying(20) COLLATE pg_catalog."default",
    networkname character varying(50) COLLATE pg_catalog."default",
    startpointname character varying(20) COLLATE pg_catalog."default" NOT NULL,
    endpointname character varying(20) COLLATE pg_catalog."default",
    CONSTRAINT endpoint FOREIGN KEY (endpointname)
        REFERENCES public.points (pointsname) MATCH SIMPLE
        ON UPDATE NO ACTION
        ON DELETE NO ACTION
        NOT VALID,
    CONSTRAINT startpoint FOREIGN KEY (startpointname)
        REFERENCES public.points (pointsname) MATCH SIMPLE
        ON UPDATE NO ACTION
        ON DELETE NO ACTION
        NOT VALID,
    CONSTRAINT length CHECK (length_m > 0::double precision),
    CONSTRAINT diameter CHECK (diameter_m > 0::double precision)
    );'

Заранее спасибо

1 Ответ

0 голосов
/ 18 января 2020

Я создаю таблицу "line", в которой есть столбец "startpoint" и "endpoint"

[...]

Я пытаюсь установить чужой ключ от points таблицы до line

Я думаю, что вы хотите, чтобы все было наоборот: у вас должны быть внешние ключи в lines, которые ссылаются на таблицу points.

Рассмотрим:

create table points (
    point_id int primary key
);

create table lines (
    line_id int primary key,
    startpoint int references points(point_id),
    endpoint int references points(point_id)
)
...