我有一个表Stuff
,它在表Heighness
中有额外的信息。Heighness
有一个指向Stuff
的外键和一个列level
。列level
可能在指向Stuff
的每个外键中无限次出现相同的值,除了Stuff
的每个外键最多只能出现一次值topMost
。因此,Stuff
的每次出现只能有一个Heighness
元素,该元素被计为topMost
。level
列必须始终设置为一个值(非空值)。
MariaDB可以对此进行约束吗?如下所示:
Stuff-Table
| ID | ... |
+----+-----+
| 3 | ... |
| 4 | ... |
Heighness-Table
| ID | Stuff_id | level |
+----+----------+----------+
| 1 | 3 | mediocre |
| 2 | 3 | mediocre | <-- As it's not "topMost", as many as you want.
| 3 | 3 | topMost | <-- Perfect, only 0 to 1 occurences.
| 4 | 4 | topMost | <-- 2nd occurence absolute, but only 1st per foreign key. Nice.
| 5 | 4 | low |
| 6 | 4 | topMost | <-- 2 occurences per foreign key! Error! MariaDB should block this!
MariaDB 10.6有唯一索引,但没有过滤的唯一索引、检查和唯一约束,这似乎还不够,我会退回到触发器,这是我想避免的。
我说错了吗?有UNIQUE和CHECK约束的组合可以使用吗?
1条答案
按热度按时间kh212irz1#
创建一个generated column,它对于
topMost
是唯一的,而对于mediocre
不是唯一的,并在它上面创建一个唯一索引:这将为表生成:
正常FK约束条件,另外确保
Stuff_id
在Sutff
表中