数组列的外键

Val*_*tin 4 postgresql referential-integrity array

我有一张桌子:

CREATE TABLE methods
(
    method_id serial PRIMARY KEY,
    method_name varchar(100)
);
Run Code Online (Sandbox Code Playgroud)

我现在想创建一个包含以下列的表:

CREATE TABLE experiments 
(
    method integer[] REFERENCES methods(method_id),
    trials integer
);
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

键列“method”和“method_id”是不兼容的类型:整数[]和整数。

我知道列必须是相同的类型,我还看到有些人已经尝试在数组问题上解决这个外键:

PostgreSQL 9.3 开发:Array ELEMENT 外键

我的兴趣是 'method' 应该是一个整数数组,引用来自表 'methods' 的 'method_id',但我无法弄清楚。我认为上面的链接可能是一个解决方案,但似乎没有实现(?)

一些帖子建议使用连接/连接表:

数组成员的外键约束?

我是一个绝对的初学者,我还无法弄清楚。对我来说,首先要了解如何解决数组上的外键问题。可以将多个方法视为形成一类方法。每个班级可以有一定数量的试验。

dez*_*zso 6

由于您根本无法针对数组列创建外键,因此您应该以适当的关系方式存储实验。这就是您提到的连接表。

它是一个如下所示的表:

CREATE TABLE experiments (
    method_id integer REFERENCES methods (method_id),
    method_class_id integer REFERENCES method_class (method_class_id)
);
Run Code Online (Sandbox Code Playgroud)

在这里,每个方法-类对将有一行(反过来,根据您上面的评论,这可能意味着多次试验),而不是像您当前的设计那样每次试验只有一次。这意味着轻微的存储开销,但它为您提供了灵活性 - 例如,查询将使用索引支持的适当连接。此外,从类中删除方法会容易得多。

注意:我想上面你也有一张method_class桌子。