[英]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.