假设我们有一个执行“工作”的系统。这些工作可以连接成我们称之为“集成”的序列,这些序列实际上是一组有序的工作。
经典的解决方案是连接表:
integrations: id, name
jobs: id, name, commands
integrations_jobs: id, integration_id, job_id, integration_order
其中integration_order
是整合中该integration_job的位置。
如果我们只使用了一个postgres数组呢?
integrations: id, name, [job_id1, job_id2, job_id3]
jobs: id, name, commands
使用数组而不是连接表时,我是否有任何明显的缺点?我们在Heroku上使用Rails 5和Postgres。
答案 0 :(得分:0)
您可以使用Postgres数组或JSON或枚举字段,但这会影响性能 Look here
答案 1 :(得分:0)
第一个缺点是您无法查询在集成中查找作业,例如:
jobs table
id
1
2
integrations table
id, name, job_ids
1, i1, [1,2]
2, i2, [2]
因此,如果要查找标识为2
的作业的集成,则需要扫描集成表并检查job_ids是否具有2
的值。如果集成表有很多记录,那么这是一个很大的性能问题。
如果你有一个连接表,那只是一个非常简单的查询,速度更快。 如果您使用连接表,我不会看到错误。