【问题标题】:Postgres creating a Table with an array of foreign keysPostgres 创建一个带有外键数组的表
【发布时间】:2015-12-08 21:22:31
【问题描述】:

我正在制作一个名为“路线”的表格。我希望它能够包含其中的航班列表。航班的详细信息在航班表中。我希望“航班”是航班表中的一组外键 ID。所以,我有这个代码:

CREATE TABLE routes (
id SERIAL PRIMARY KEY,
flight integer[] ELEMENT REFERENCES flights,
user CHARACTER VARYING(50)
);

但是,它给出了错误:

ERROR:  syntax error at or near "ELEMENT"
LINE 2:     id SERIAL PRIMARY KEY, flight integer[] ELEMENT REFERENC...

我正在使用 psql (9.3.10)

我用过这个: http://blog.2ndquadrant.com/postgresql-9-3-development-array-element-foreign-keys/ 作为参考,但是当我复制该语法时会出现此错误。

这是我用作参考的语法:

CREATE TABLE races (
   race_id integer PRIMARY KEY,
   title text,
   race_day DATE,
   ...
   practice1_positions integer[] ELEMENT REFERENCES drivers,
   practice2_positions integer[] ELEMENT REFERENCES drivers,
   practice3_positions integer[] ELEMENT REFERENCES drivers,
   qualifying_positions integer[] ELEMENT REFERENCES drivers,
   final_positions integer[] ELEMENT REFERENCES drivers
);

【问题讨论】:

    标签: sql postgresql foreign-keys


    【解决方案1】:

    您链接到的博客清楚地表明它只是为 9.3 提出的一个补丁。它没有进入 9.3 和 9.4 您可以comb the mailing list 并尝试自己修补您的安装,或者您可以更改您的架构。

    如果您想了解有关该功能发生了什么的详细信息,您可能应该给作者发邮件。

    【讨论】:

    • 注意:这种访问模式(FK 数组)出现在系统目录中,例如。 pg_index.indkey[] 引用 pg_attribute.attnum。
    • 您是否建议为每条路由制作多个单个外键并放弃数组的想法?例如:flight1 integer references flights(id), flight2 integer references flights(id), ...?我不会有超过 20 个航班,而当航班更少时会有 NULL?
    • 违反 1NF 有一个缺点:例如:很难在 {update, delete} 上使 FK 可级联 + 以及无法创建索引(或UNIQUE 约束...) 用于数组元素。
    猜你喜欢
    • 2016-02-15
    • 2019-04-28
    • 2013-04-24
    • 1970-01-01
    • 2012-11-30
    • 1970-01-01
    • 2019-03-30
    • 1970-01-01
    • 2013-06-05
    相关资源
    最近更新 更多