假设我们有一个执行“作业”的系统。这些作业可以连接到我们称为“集成”的序列中,这些序列实际上是一组有序的作业。
经典的解决方案是连接表:
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。
发布于 2017-07-13 01:06:43
您可以使用Postgres数组或JSON或枚举字段,但这会影响性能。
发布于 2017-07-13 13:31:25
第一个缺点是您不能通过查询来查找集成中的作业,例如:
jobs table
id
1
2
integrations table
id, name, job_ids
1, i1, [1,2]
2, i2, [2]因此,如果您想要查找id为2的作业的集成,则需要扫描集成表并检查job_ids的值是否为2。如果集成表有很多记录,这是一个很大的性能问题。
如果你有一个连接表,这只是一个非常简单的查询,而且速度更快。我不认为使用连接表有什么问题。
https://stackoverflow.com/questions/45063274
复制相似问题