[英]How do I create a check to make sure a value exists in another table?
现在,我有两个表,一个表包含一个复合主键,另一个表引用了主键的值之一,但是是Product
和Mapping
之间的一对多关系。 以下是设置的想法:
CREATE TABLE dev."Product"
(
"Id" serial NOT NULL,
"ShortCode" character(6),
CONSTRAINT "ProductPK" PRIMARY KEY ("Id")
)
CREATE TABLE dev."Mapping"
(
"LookupId" integer NOT NULL,
"ShortCode" character(6) NOT NULL,
CONSTRAINT "MappingPK" PRIMARY KEY ("LookupId", "ShortCode")
)
由于ShortCode
是作为六个字符串显示给用户的,我不想让另一个表具有适当的外键引用,但是PostgreSQL不允许用当前的设计创建一个外键。 这样,如何创建检查以检查“ Mapping
表中的短代码以确保其存在?
如果我对您的理解正确,则需要在“产品”。“ ShortCode”上使用UNIQUE约束。 当然也应该将其声明为NOT NULL。
CREATE TABLE dev."Product"
(
"Id" serial NOT NULL,
"ShortCode" character(6) NOT NULL UNIQUE,
CONSTRAINT "ProductPK" PRIMARY KEY ("Id")
);
CREATE TABLE dev."Mapping"
(
"LookupId" integer NOT NULL,
"ShortCode" character(6) NOT NULL REFERENCES dev."Product" ("ShortCode"),
CONSTRAINT "MappingPK" PRIMARY KEY ("LookupId", "ShortCode")
);
您原始的“产品”表将允许此INSERT语句成功执行,但不会成功。
insert into dev."Product" ("ShortCode") values
(NULL), (NULL), ('ABC'), ('ABC'), ('ABC');
这样的数据几乎没有用。
select * from dev."Product"
id ShortCode -- 1 2 3 ABC 4 ABC 5 ABC
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.