pgAdmin - при попытке сделать внешний ключ "ссылка" не дает опций - PullRequest
2 голосов
/ 12 июля 2011

У меня есть три таблицы: ModelingAgency.clients, ModelingAgency.models, ModelingAgency.Bookings.Все три таблицы имеют столбец первичного ключа с именем id.

В таблице bookings есть два столбца, которые ссылаются на clients и models.В pgAdmin, когда я пытаюсь создать внешний ключ в bookings для clients или models, я получаю следующие экраны:

Screen One

Screen Two

Что я здесь пропускаю?Я новичок в PostgreSQL (это мой первый тестовый проект с PostgreSQL - я всегда использовал MySQL, а иногда и SQL Server), так что это, вероятно, что-то очевидное (я просто не вижу его).

РЕДАКТИРОВАТЬ: Вот DDL, как и требовалось:

-- Table: "ModelingAgency.bookings"

-- DROP TABLE "ModelingAgency.bookings";

CREATE TABLE "ModelingAgency.bookings"
(
  id integer NOT NULL DEFAULT nextval('"ModelingAgency.Bookings_id_seq"'::regclass),
  "clientId" integer NOT NULL,
  "modelId" integer NOT NULL,
  "time" timestamp with time zone NOT NULL DEFAULT now(),
  "location" character varying(100) NOT NULL DEFAULT 'No Location Selected'::character varying,
  CONSTRAINT "bookingId" PRIMARY KEY (id)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE "ModelingAgency.bookings" OWNER TO "MyBatisTutorial";


-- Table: "ModelingAgency.clients"

-- DROP TABLE "ModelingAgency.clients";

CREATE TABLE "ModelingAgency.clients"
(
  id integer NOT NULL DEFAULT nextval('"ModelAgency.clients_id_seq"'::regclass),
  "name" character varying(45) NOT NULL,
  CONSTRAINT "clientId" PRIMARY KEY (id)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE "ModelingAgency.clients" OWNER TO "MyBatisTutorial";


-- Table: "ModelingAgency.models"

-- DROP TABLE "ModelingAgency.models";

CREATE TABLE "ModelingAgency.models"
(
  id serial NOT NULL,
  "name" character varying(45) NOT NULL,
  CONSTRAINT "modelId" PRIMARY KEY (id)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE "ModelingAgency.models" OWNER TO "MyBatisTutorial";

1 Ответ

3 голосов
/ 13 июля 2011

Просматривая опубликованный вами код DDL, я вижу, что имена вашей таблицы написаны неправильно (что приводит к вашей проблеме с pgAdmin):

"ModelingAgency.bookings"

Должно быть в формате "schema"."tableName":

"ModelingAgency"."bookings"

После этого обозреватель объектов выглядит следующим образом (вероятно, сначала нужно создать схему с помощью простого pgAdmin или с помощью CREATE SCHEMA оператора SQL):

enter image description here

Здесь работает код DDL (я пропустил некоторые вещи, такие как OIDS и OWNER TO, но это не имеет значения для вашего случая, BTW OIDS по умолчанию ложно):

DROP TABLE IF EXISTS  "ModelingAgency"."bookings";
CREATE TABLE "ModelingAgency"."bookings"
(
    id serial,
    "clientId" integer NOT NULL,
    "modelId" integer NOT NULL,
    "time" timestamp with time zone NOT NULL DEFAULT now(),
    "location" character varying(100) NOT NULL
        DEFAULT 'No Location Selected'::character varying,
    CONSTRAINT "bookingId" PRIMARY KEY (id)
);

DROP TABLE IF EXISTS "ModelingAgency"."clients";
CREATE TABLE "ModelingAgency"."clients"
(
    id serial,
    "name" character varying(45) NOT NULL,
    CONSTRAINT "clientId" PRIMARY KEY (id)
);

DROP TABLE IF EXISTS "ModelingAgency"."models";
CREATE TABLE "ModelingAgency"."models"
(
    id serial NOT NULL,
    "name" character varying(45) NOT NULL,
    CONSTRAINT "modelId" PRIMARY KEY (id)
)
...