如何使一行在一对多关系中唯一
how to make a row unique in one to many relation
我在下面发布了 tables。这种关系是一对多的。单个站点可以有不同的操作,并且一次要在单个站点上应用单个操作。
因此,table Site
的主键将是 table operation
中的外键。但我想要的是 selectedSiteID
、treatmentGeometry
、threshold
、isVisualizeAreaOfCoverage
、isVisualizeAverageHeights
之间的组合
table operation
应该是 unique.in 也就是说,在 table operation
中分配给列的值 selectedSiteID
,treatmentGeometry
,threshold
,isVisualizeAreaOfCoverage
,isVisualizeAverageHeights
应该是唯一的,不能重复。
请让我知道我怎样才能做到这一点。
tables:
create table if not exists Site(
selectedSiteID text primary key,
treatmentGeometry geometry,
);
create table if not exists operation(
threshold smallint,
isVisualizeAreaOfCoverage boolean,
isVisualizeAverageHeights boolean,
primary key (threshold,isVisualizeAreaOfCoverage,isVisualizeAverageHeights)
);
由于 selectedSiteID
是 Site
上的主键和 operation
上的外键,因此您无需在 operation
上重复 treatmentGeometry
。你只是整条记录operation
唯一,只要在主键上加上外键site_selectedsite_id
:
CREATE TABLE Site(
selectedSiteID text PRIMARY KEY,
treatmentGeometry geometry
);
CREATE TABLE operation(
threshold smallint,
isVisualizeAreaOfCoverage boolean,
isVisualizeAverageHeights boolean,
site_selectedsite_id text REFERENCES site(selectedSiteID),
PRIMARY KEY (site_selectedsite_id,
threshold,
isVisualizeAreaOfCoverage,
isVisualizeAverageHeights)
);
我在下面发布了 tables。这种关系是一对多的。单个站点可以有不同的操作,并且一次要在单个站点上应用单个操作。
因此,table Site
的主键将是 table operation
中的外键。但我想要的是 selectedSiteID
、treatmentGeometry
、threshold
、isVisualizeAreaOfCoverage
、isVisualizeAverageHeights
之间的组合
table operation
应该是 unique.in 也就是说,在 table operation
中分配给列的值 selectedSiteID
,treatmentGeometry
,threshold
,isVisualizeAreaOfCoverage
,isVisualizeAverageHeights
应该是唯一的,不能重复。
请让我知道我怎样才能做到这一点。
tables:
create table if not exists Site(
selectedSiteID text primary key,
treatmentGeometry geometry,
);
create table if not exists operation(
threshold smallint,
isVisualizeAreaOfCoverage boolean,
isVisualizeAverageHeights boolean,
primary key (threshold,isVisualizeAreaOfCoverage,isVisualizeAverageHeights)
);
由于 selectedSiteID
是 Site
上的主键和 operation
上的外键,因此您无需在 operation
上重复 treatmentGeometry
。你只是整条记录operation
唯一,只要在主键上加上外键site_selectedsite_id
:
CREATE TABLE Site(
selectedSiteID text PRIMARY KEY,
treatmentGeometry geometry
);
CREATE TABLE operation(
threshold smallint,
isVisualizeAreaOfCoverage boolean,
isVisualizeAverageHeights boolean,
site_selectedsite_id text REFERENCES site(selectedSiteID),
PRIMARY KEY (site_selectedsite_id,
threshold,
isVisualizeAreaOfCoverage,
isVisualizeAverageHeights)
);