在 SQL 中,您可以使用 sum 和 product 计算列来强制执行无向边的唯一性吗?

问题描述

create table Location (
  id integer primary key(1,1),latitude decimal(8,6),longitude decimal(9,address varchar(100),name varchar(60) unique
);
create table Journey (
  id integer primary key(1,id_from integer foreign key references Location(id),id_to integer foreign key references Location(id),s = id_from + id_to persistent,p = id_from * id_to persistent,unique(s,p),name varchar(100) unique,);

这是为每对位置强制执行单次旅程(无论是进入还是返回)的正确方法?

解决方法

没有。如果你想要独特的边缘而不管方向,那么使用最小值和最大值:

create table Journey (
  id integer primary key(1,1),id_from integer foreign key references Location(id),id_to integer foreign key references Location(id),id_least as (case when id_from < id_to then id_from else id_to end) persistent,id_greatest as (case when id_from < id_to then id_to else id_from end) persistent,unique(least_id,greatest_id),name varchar(100) unique,);

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...