0

我正在创建一个可以列出企业的应用程序,我还想添加一个设施,他们可以在其中指定他们出口到的国家/地区。因此,当用户搜索其国家/地区的企业列表时,他们不仅会看到位于其国家/地区的企业,还会看到其他国家/地区的企业也可能将其服务出口到其国家/地区。

到目前为止,这是我的想法-有更好的解决方案吗?我正在使用 Rails 3.2 和 Postgres。

  • 国家模型,包含 id、name、slug 等字段
  • 列表模型,有一个 Postgres 数组字段,用于存储该企业出口到的国家/地区 ID

然后,当我显示某个国家/地区的列表时,我可以在 country_export 数组中搜索也具有该国家/地区 ID 的企业。

但这是最有效的方法吗?(我会使用 postgres_ext gem 来启用 pg 数组支持:https ://github.com/dockyard/postgres_ext )

我能想到的另一个选项是列表模型上的复选框,因此企业可以说明他们是否出口到全球、欧盟、亚洲等。然后将它们添加为国家模型中的布尔字段。这样做的缺点是它不会像具体说明国家那样准确......但如果这是一种更有效的方式,我不介意妥协。

4

1 回答 1

1

这是两个表和之间的经典n:m 关系,通常由引用这些表的两个主键的表(如 )实现。companycountrycompany_country

在这些密切相关的问题下查看完整的代码示例:
如何在 PostgreSQL 中实现多对多关系?
多对多关系过滤器

对于某个国家/地区的公司列表,您的查询将是:

SELECT c.*
FROM   company_country cc
JOIN   company c USING (company_id)
WHERE  cc.country_id = ?

关系数据库基础,SQL基础。使用适当的索引,这比处理数组要快得多

于 2013-01-14T03:51:16.647 回答