繁体   English   中英

模式迁移:PostgreSQL中的一对多,多对多

[英]schema migration: one-to-many, many-to-many in PostgreSQL

背景

在MySQL中,如果我想保持规范化表 ,我需要使用两个表和多对多三个表来建模一对多。

我正在调查迁移到PostgreSQL ,令人惊讶的是,它允许向量甚至多维向量字段!

问题

PostgreSQL中 一对多多对多的规范映射是什么?

  • 一对多只是一个带有矢量场的吗?

  • 有多种方法可以模拟多对多,还是依赖于情况(比如我需要查询)?

  • 使用数组字段有什么警告吗?

在PostgreSQL中,您通常应该坚持关系建模,就像您目前在MySQL中使用的一样。

PostgreSQL的数组很有用,但由于种种原因,它不应该是数据建模的首选:

  • 数组的粗略提取,锁定和写入粒度;
  • 缺少外键目标支持(至少在9.4中是真的; 9.5可能增加阵列FK支持,但由于性能问题而被删除);
  • 客户端库和应用程序中的有限支持

值得注意的是,更新数组时,必须更新整个数组, 重写整个数组 由于MVCC,无法进行就地更新。

当您构建复杂查询时,数组非常有用,而对于某些非规范化任务,出于性能原因需要创建实体化视图。 他们应该对建模权威数据存储的首选。

PostgreSQL中一对多和多对多的规范映射与任何关系数据库中的完全相同:

1:米

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),
   ...
);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM