Mysql Postgres,在两列之间创建值的唯一性

Mysql Postgres,在两列之间创建值的唯一性,mysql,postgresql,Mysql,Postgresql,提前感谢所有能够提供帮助的人。这张表如下所示 表格发票 id |交货声明|供货声明| id _| 1 | 2 _| 3 | 4 _| 2 | 4我的理解是,您有一个具有以下结构的表: "invoice" ( id (primary key), delivery_statement_id, supply_statement_id ) 从列的名称判断,“delivery_statement_id”和“supply_statement_id”是同一个外部表的外键。。。比如说,他们指的是“声明” 如

提前感谢所有能够提供帮助的人。这张表如下所示

表格发票


id |交货声明|供货声明| id

_| 1 | 2

_| 3 | 4


_| 2 | 4我的理解是,您有一个具有以下结构的表:

"invoice"
(
id (primary key),
delivery_statement_id,
supply_statement_id
)
从列的名称判断,“delivery_statement_id”和“supply_statement_id”是同一个外部表的外键。。。比如说,他们指的是“声明”

如果您有一个表“声明”,并且希望避免“交货声明id”和“供货声明id”中的多个引用,我的建议是在“声明”表中添加“发票声明id”列:

因此,首先在“语句”中创建行,而不引用任何发票 然后设置交货声明id和供货声明id
在设置每个值之后,您必须在“语句”表中“注册”它。。。这可以很容易地实现为一个触发器,附加到“发票”表中

您是在生成id标记,还是从另一个来源将其作为输入?如果您是指交货id和对账单,我是在从数据库中获取值。您好,您肯定正确地理解了这个问题,但我看到在报表表中生成发票id时发生了错误。两条语句将始终指向一张发票,因此唯一约束将失败。我认为更好的解决方法是在发票表中保留对账单id,并在对账单表中区分交货或供货。这可以通过创建属性类型或类似于布尔传递_语句(如果为false,则为supply语句)来实现。
"invoice"
(
id (primary key),
delivery_statement_id -> statement(id),
supply_statement_id -> statement(id)
)
"statement"
(
id (primary key),
/** some other columns **/
invoice_id (nullable, with unique constraint) -> invoice(id)
)