背景
在MySQL中,如果我想保留,我需要使用两个表进行一对多建模,使用三个表进行多对多建模规范化表格。
我正在研究迁移到 PostgreSQL ,令人惊讶的是,它允许 vector 甚至多维向量字段!
问题
PostgreSQL 中一对多和多对多的规范映射是什么?
一对多只是一个表,带有 vector 字段吗?
是否有一种通用的方式来模拟多对多,还是取决于具体情况(比如我需要查询的方式)?
是否有警告使用数组字段?
答案 0 :(得分:16)
在PostgreSQL中,你应该坚持使用关系建模,就像你目前在MySQL中使用一样。
PostgreSQL的数组很有用,但由于种种原因,它不应该是数据建模的首选:
值得注意的是,更新阵列时,必须更新整个阵列,重写整个阵列。由于MVCC,无法进行就地更新。
当您构建复杂查询时,以及出于性能原因要创建物化视图的一些非规范化任务时,阵列非常有用。他们不应该是您对权威数据存储进行建模的首选。
PostgreSQL中一对多和多对多的规范映射与任何关系数据库中的完全相同:
1:M
CREATE TABLE parent (
parent_id integer primary key,
...
);
CREATE TABLE child (
child_id integer primary key,
parent_id integer not null references parent(parent_id),
...
);
M:N:
CREATE TABLE m(
m_id integer primary key,
...
);
CREATE TABLE n(
n_id integer primary key,
...
);
CREATE TABLE m_n (
m_id integer references m(m_id),
n_id integer references n(n_id),
PRIMARY KEY(m_id, n_id),
...
);