让我们考虑以下两个简化表:

CREATE TABLE payments
(
    id bigserial NOT NULL PRIMARY KEY,
    method int,
    method_name name,
    total numeric,
    payment_date timestamp without time zone,
    is_seccessful boolean,
    data jsonb
);
CREATE TABLE subscription_payments
(
    subscription_id int,
    parent_id bigint,

   CONSTRAINT pk_subscription_id FOREIGN KEY (subscription_id)
       REFERENCES subscriptions (id)
       ON DELETE RESTRICT
)
INHERITS (payments);

现在,我如何创建一个从subscription_payments.parent_idpayments.id的外键引用,而不引用其他继承表呢?

换句话说,我怎么能引用subscription_payments.id呢?

推荐答案

由于这是一座桥,您可以简单地引用付款,这将确保付款.

CREATE TABLE subscription_payments
(
    subscription_id int,
    parent_id bigint,

    primary key (subscription_id, parent_id),
    CONSTRAINT fk_subscription_id FOREIGN KEY (subscription_id)
        REFERENCES subscriptions (id)
        ON DELETE RESTRICT,
    CONSTRAINT fk_parent_id  FOREIGN KEY (parent_id )
        REFERENCES payments(id)
        ON DELETE RESTRICT
)

Database相关问答推荐

如何使一个IP允许在运行GitHub操作到RDS数据库时,您不允许从外部访问数据库?

聚合以过滤 MongoDB 中的引用

在 SQL Server 中找出调用存储过程

Select 正确的数据库:MySQL 与Everything 其它数据库

带有字符串列的 SQL 之间的子句

区分大小写的数据库有什么好处吗?

返回 SQLite 数据库中表大小的查询

有没有办法在一个脚本中创建多个触发器?

JavaScript 布尔搜索查询生成器接口库?

表别名如何影响性能?

如何使用 PHP 代码将图像上传到 MySQL 数据库

Android Room:如何建模关系?

Django 数据库值的最佳推荐方式是什么?

SQL全文搜索与LIKE

使用 C3P0 的 JDBC 连接池

如何在 SQL Server 中生成并手动插入唯一标识符?

使用带有联合和 CLOB 字段的 Select 时出现错误 ORA-00932

分离实体和被管理实体

Web 应用程序的文件存储:文件系统、数据库和 NoSQL 引擎

如何安装/更新到 Postgres 9.4?