当前位置: 首页 > 面试题库 >

SQL中是否有一种方法可以强制执行无向边缘的唯一性?

吕树
2023-03-14
问题内容
create table Location (
id integer primary key(1, 1),
latitude decimal(8,6),
longitude decimal(9,6),
address varchar(100),
name varchar(60) 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),
name varchar(100) unique,
unique(id_from, id_to)
);

使用此架构,您可以为两个位置创建2个不同的旅程,一个作为进路,一个作为回程。我想要对每个位置执行一次旅程。有哪些选择呢?


问题答案:

最简单的方法是强制执行“方向”,然后使用唯一约束:

create table Journey (
    id integer primary key,
    id_from integer foreign key references Location(id),
    id_to integer foreign key references Location(id),
    name varchar(100) unique,
    unique(id_from, id_to),
    check (id_from < id_to)
);

但是,您必须记住插入值,以便使用触发器来确保它们正确无误。

否则,可以对最小和最大值使用计算列,然后对此使用唯一约束。



 类似资料:
  • 问题内容: 如果输入大小太小,则库会自动序列化 流中地图的执行,但是这种自动化不会并且也不会考虑地图操作的繁重程度。有没有办法 强制parallelStream()实际并行化CPU重映射? 问题答案: 似乎存在根本的误解。链接的“问答”讨论了由于OP没有 看到预期的加速,流显然不能并行工作。结论是,有没有好处在 并行处理工作负载是否太小,不,有一个自动回退到顺序执行。 实际上是相反的。如果您请求并

  • 问题内容: 我知道你可以打电话 如果它不是可执行文件,则会得到一个异常,但这是不安全的,因为运行可执行文件会产生副作用。 我想只检查扩展名在Windows上就足够了,但是有没有办法我可以读取* nix文件系统上的可执行文件呢? 找出文件在OS中是否可执行的最佳方法是什么? 问题答案: 参见java.io.File.canExecute()

  • 在Spock规范中,expect:或then:block中的任何行都被计算并断言为,除非它具有返回类型为的签名。 方法在类中定义如下: 我故意在那里断言,这样它就不会失败。即使失败并出现错误: 如何以及为什么方法调用结果被计算为?

  • 我有两个Java列表。一方面,我想从头开始迭代,另一方面,我想从结尾开始。我想为此使用增强for循环,但我不确定如何做到这一点。有什么建议吗?

  • 我是liquibase的新手,我想知道是否有可能真正执行变更集。 请注意,我们使用的是MySQL。 那是正确的吗?

  • 问题内容: 使用Azure IoT Edge,我没有找到任何方法来保证部署中容器/模块的初始化顺序。例如,假设我有两个模块,A和B。A是服务器,而B是依赖A的客户端。据我所知,没有办法保证A在B之前启动。 Azure IoT Edge部署模板符合Docker Engine API,我找不到任何通过该API强制依赖关系的方法。解决方法是,我不假设每个容器的代码中都在运行哪个容器。这行得通,尽管额外代