создание таблицы с внешним ключом, ссылающимся на другую таблицу

Я использую базу данных PGAdminIII.

У меня есть одна таблица с именем STOCKREGISTER, которая содержит составной первичный ключ, состоящий из трех полей, т.е. stockregisterId, applicationId и дата.

Мне нужно создать другую таблицу STOCK с полем внешнего ключа, которое ссылается на поле stockregisterId в STOCKREGISTER. Если я пытаюсь создать Таблица STOCK, отображается сообщение об ошибке. Сообщение об ошибке "нет уникальных ключей соответствия ограничений для ссылочной таблицы STOCKREGISTER". Какой еще шаг я должен предпринять дальше

эта первая таблица

CREATE TABLE stock_register
(
  stock_register_id bigint NOT NULL,
  application_id bigserial NOT NULL,
  production_date date NOT NULL,
  opening_bal bigint DEFAULT 0,
  quantity_produced bigint,
  total_quantity bigint 
  CONSTRAINT primarykey PRIMARY KEY (stock_register_id, application_id, production_date),
  CONSTRAINT "foreignKey" FOREIGN KEY (application_id)
      REFERENCES application (application_id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)

ниже вторая таблица. Здесь я не могу сделать stock_register_id внешним ключом

    CREATE TABLE Stock
(
  stock_id bigint NOT NULL,
  stock_register_id bigint,
  dimension bigserial NOT NULL,
  CONSTRAINT "stockid" PRIMARY KEY (stock_id)
)

person Pramil K Prince    schedule 04.03.2013    source источник
comment
Пожалуйста, поделитесь как своими схемами, так и кодом, который вы пробовали   -  person DevelopmentIsMyPassion    schedule 04.03.2013
comment
Какая версия сервера Sql это?   -  person DevelopmentIsMyPassion    schedule 04.03.2013


Ответы (2)


Я предполагаю, что синтаксис должен быть:

CREATE TABLE Stock
(
  stock_id bigint NOT NULL,
  stock_register_id bigint,
  dimension bigserial NOT NULL,
  CONSTRAINT "stockid"
    FOREIGN KEY (stock_id)
    REFERENCES stock_register (stock_register_id) 
)
person www    schedule 04.03.2013

CREATE TABLE Stock
(
stock_id bigint NOT NULL,
stock_register_id bigint,
dimension bigserial NOT NULL,
CONSTRAINT primaryKey PRIMARY KEY (stock_id),
CONSTRAINT foreignKey FOREIGN KEY(stock_register_id)
REFERENCES stock_register (stock_register_id)
)

Это должно быть все, что вам нужно. Вы также должны убедиться, что механизмы таблиц БД, параметры сортировки и наборы символов совпадают при использовании внешних ключей.

Что касается проблемы уникального ограничения, похоже, нет проблем с вашим stock_register_id PK в таблице stock_register. Основываясь на имени STOCKREGISTER в сообщении об ошибке, я подозреваю, что он не нашел таблицу stock_register во втором операторе Create.

person sturrockad    schedule 27.11.2013