[英]creating table having foreign key that reference another table
我正在使用 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)
)
我想语法应该是:
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)
)
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
在你的第二个创建语句。
什么是外键? 指向另一个表中特定记录的指针。
如何根据您的 DDL 识别 stock_register 中的特定记录? 通过 (stock_register_id, application_id, production_date) 的唯一组合。
因此,只要 application_id 和 production_date 不同,stock_register_id = 1 就可以出现在一千个不同的记录中。
因此,如果您只有一个 stock_register_id,则无法知道它指向哪个 stock_register 记录,因此 DBMS 无法强制执行外键。
您必须将 application_id 和 production_date 添加到 stock 表,并使所有三列一起成为 stock_register 上复合键的 FK,或者您必须从 stock_register 上的 PK 中删除 application_id 和 production_date,以便 FK 和 PK 列匹配。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.