如何在两列上独立创建唯一约束顺序

1 sql oracle unique-constraint

我正在使用Oracle数据库,我需要创建一个如下所示的表.

MAP(Point_One, Poin_Two, Connection_weight).
Run Code Online (Sandbox Code Playgroud)

该表表示有关图表的数据.我想创建一个具有约束的表,以防止插入已存在的连接.

例如,该表已包含此连接:

Point_One | Point_Two | Connection_weight
-----------------------------------------
p_no1     | p_no2     | 10
Run Code Online (Sandbox Code Playgroud)

即使我尝试以不同的顺序添加点,约束也会阻止重复插入此连接.(例如:(p_no2,p_no1,10))

一个简单的UNIQUE(Point_One,Point_Two)约束是不幸的.你有什么建议吗?

Jus*_*ave 6

您可以创建基于函数的索引

CREATE UNIQUE INDEX idx_unique_edge
    ON map( greatest( point_one, point_two ),
            least( point_one, point_two ) );
Run Code Online (Sandbox Code Playgroud)

我假设的数据类型point_one,并point_two为与Oracle兼容greatestleast功能.如果没有,您需要一个自己的功能,为您的复杂数据类型选择"最大"和"最小"点.