postgresql - Postgres 主键允许冲突
问题描述
该表应该具有类似于主键(Item_id、Date、Status)的行为。但是,允许多个取消状态。
Item_id |Date |Status
--------------------------------
1 |2017-01-01 |Cancelled
1 |2017-01-01 |Cancelled
1 |2017-01-01 |Completed
在这种情况下,我将能够插入:
('1', '2017-01-01', 'Cancelled')
在这种情况下,查询应该返回错误:
('1', '2017-01-01', 'Completed')
有没有办法使用约束或其他实现来实现这个目标?
解决方案
你问的是自相矛盾的。主键根据定义是唯一的,因此如果主键是(Item_id,Date,Status),则不可能有多行具有相同的元组(Item_id,Date,Status)。例如,如果两行都由同一个元组标识,则无法区分它们 (1, 2018-01-01, 'canceled')
看起来您想对completed
每个元组 (item_id, date) 强制执行一行,这是可行的:请参阅此问题。您需要在表中添加一个主键列。
推荐阅读
- c# - 防止通过鼠标拖动子窗体
- siddhi - 在 Siddhi 中获取 NATS 流事件序列号
- python - discord.py bot 不响应 Bot.commands()
- android - 我无法在颤振项目中添加 Firebase 库
- go - 使用切片解组到结构返回空值而不是空切片
- python - uwsgi 烧瓶服务器总是返回“Hello World!”
- javascript - Laravel DataTables 不是函数
- git - 如何在git中管理版本文件
- vue.js - Vue.js 使用 @input 事件发送索引
- javascript - 如何将 PHP 变量传递给 JavaScript?