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)约束是不幸的.你有什么建议吗?
您可以创建基于函数的索引
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兼容greatest和least功能.如果没有,您需要一个自己的功能,为您的复杂数据类型选择"最大"和"最小"点.