postgresql - 如何强制使用具有唯一值 postgresql 的唯一列
问题描述
是否可以强制执行唯一值以及 postgres 中的唯一列?我正在使用第 11 版。它会是这样的:
状态 = 0 | 商店 = 5
唯一(商店,状态 = 0)
这样,我可以为 store 设置任何值,但是对于每个值,它只能有一个状态为 0 的记录,其余的可以是任何值?我确信这个问题之前已经被问过,但它似乎特定于某些框架,如 django:
或者我只是找不到正确的答案。
我正在使用 loopback4,似乎没有办法在框架中指定它,所以我想在数据库中指定它。更新:为了更加解释:我有一个用户只能拥有一个带有商店的购物车,不能超过一个。每个购物车都有一个 user_id、store_id 和 status。当状态为0时,购物车在进行中,当状态为1时,购物车已订购,当状态为2时,由商店发货。所以我有一张桌子:
id | user_id | store_id | status
...| 1 | 1 | 0
...| 1 | 1 | 1
...| 1 | 1 | 1
以上,很好,应该被允许,但是:
id | user_id | store_id | status
...| 1 | 1 | 0
...| 1 | 1 | 0 <--- Not allowed
...| 1 | 1 | 1
这是不允许的,因为一个用途有多个商店的购物车。所以 status = 0 和 store_id 应该是唯一的。
解决方案
您可以创建部分唯一索引:
create unique index on the_table (store)
where status = 0;
推荐阅读
- python - 在某个整数字符模式之后拆分字符串
- java - AndroidRuntime:*** 系统进程中的致命异常
- vb.net - 通过代码在 DataGridView 行之间移动并通过文本框显示
- c - 逗号在这里有什么功能,为什么它不会引起编译时错误?
- r - 读取 .csv 文件,将它们转换并使用 R 将它们保存为 .xlsx
- docker - docker中的kafka-spark流式传输
- node.js - 如何让 Gulp 识别编译文件中的更改/更新?
- php - 单个php表单内的多个按钮
- sql - 子查询 SQL Oracle
- r - 如何在 Markdown 中设置 knitr::kable() 全局选项以供重用