【发布时间】:2017-11-04 21:21:01
【问题描述】:
我需要帮助解决我的表定义中的一个问题:我有一个表将被定义,例如,像这样:
-
id,主键 -
friend0_id,表上的外键users -
friend1_id,表上的外键users
问题是我不想让这对夫妇(friend0_id, friend1_id) 多次出现,无论表格中的顺序如何。
我尝试在(friend0_id, friend1_id) 上定义UNIQUE 约束,但约束中定义的列顺序(此处为friend0_id,然后friend1_id)很重要。所以:
| id | friend0_id | friend1_id |
|----|------------|------------|
| 1 | 3 | 4 | -> OK
| 2 | 4 | 3 | -> OK, as the columns order in index matters
| 3 | 3 | 4 | -> Not OK, constraint prevent this
我希望禁止示例中的 id 2 和 3,但我不知道如何。你有什么建议给我吗?
谢谢你, 纳西德
【问题讨论】:
-
通常的解决方案是在
(greatest(friend0_id, friend1_id), least(friend0_id, friend1_id))上创建一个约束,但我不知道如何使用 SQLite 来做到这一点。 SQLite 有max和min函数来替换greatest和least但我不认为它可以让你对表达式进行索引。 -
@muistooshort 表达式索引从 3.9.0 版开始支持。
标签: sql sqlite unique-constraint