0

我正在使用 PGAdminIII 数据库。

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

我必须创建另一个表STOCK,它有一个引用 STOCKREGISTER 的字段stockregisterId外键字段。如果我尝试创建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)
)
4

2 回答 2

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

于 2013-11-27T10:24:43.680 回答
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) 
)
于 2013-03-04T09:31:22.827 回答