创建具有引用另一个表的外键的表

时间:2013-03-04 08:54:40

标签: sql pgadmin

我正在使用PGAdminIII数据库。

我有一个名为 STOCKREGISTER 的表,其中包含由三个字段组成的复合主键,即 stockregisterId,applicationId和date

我必须创建另一个表 STOCK ,其中有一个外键字段,引用 STOCKREGISTER 字段 stockregisterId 。如果我正在尝试创建 STOCK 表,显示错误消息。错误消息“没有唯一的约束匹配键,用于引用的表STOCKREGISTER”。接下来我需要采取的另一个步骤< / p>

这第一张表

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)
)

2 个答案:

答案 0 :(得分:0)

我猜语法应该是:

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) 
)

答案 1 :(得分:0)

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表中的stock_register PK似乎没有问题。基于错误消息中的名称STOCKREGISTER,我怀疑它没有在您的第二个Create语句中找到表stock_register