【问题标题】:how to make a row unique in one to many relation如何使一行在一对多关系中唯一
【发布时间】:2022-01-03 12:42:14
【问题描述】:

我有以下张贴的表格。这种关系是一对多的。单个站点可以有不同的操作,并且单个操作将一次应用于单个站点。 因此,表Site 的主键将是表operation 中的外键。但我想要的是,selectedSiteID,treatmentGeometry,threshold,isVisualizeAreaOfCoverage,isVisualizeAverageHeights 之间的组合 表operation 应该是唯一的。换句话说,在表operation 中分配给列selectedSiteID,treatmentGeometry,threshold,isVisualizeAreaOfCoverage,isVisualizeAverageHeights 的值应该是唯一的并且不能重复. 请让我知道如何实现。

表格

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)
        );

【问题讨论】:

  • 你是这个意思吗? dbfiddle.uk/…
  • @JimJones 是的,谢谢
  • 顺便说一句,你可能会觉得这个other answer 很有趣。至少我记得你前段时间在缓冲区上发布过一个问题。欢呼

标签: sql postgresql postgis


【解决方案1】:

由于selectedSiteIDSite 的主键和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)
);

【讨论】:

猜你喜欢
  • 2013-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多