据我所知,如果您建立多对多关系,我通常会使用association table
。不过,现在我有业务需求(不确定他们是否具有数据库知识)直接在两个表之间创建relationships
。对我来说这是不可能的。他们说我必须执行以下操作,例如,他们说的是:
TableA
ID (PK)
refKey
TableB
ID (PK)
refKey
在TableA.refKey
和TableB.refKey.
之间多对多是可能的吗?我已经尝试过了,但是postgres让其创建了unique
。并且..如果我以我的知识为unique
中的任何一个创建refKey
,它将为1:M or M:1
。我想念什么吗?但是,如果您说有可能,请根据该特定示例使用示例代码来启动这种连接。
您是对的,只有一对多或一对多的关系。您需要的是联接表,例如:
create table A_B (
A_id bigint references A,
B_id bigint references B
)
然后,您可以根据需要拥有任意多个具有相同A_id
或B_id
的行。这导致了多对多关系。
您可以仅使用两个表创建多对多关系。这不是最佳做法,但在某些情况下可能是可行的。
在Postgres中,最简单的方法是拥有一个引用第二个表的ID数组:
create table a (
a_id int generated always as identity,
b_ids[] int
);
为什么这通常是个坏主意?
check
约束。)unnest()
。)a
中的数组元素。换句话说,当您这样做时,很多“内置”功能会丢失。
我应该注意,您也可以使用JSON和数组来完成此操作。