将多个国家/地区添加到记录中

时间:2013-01-12 20:36:41

标签: sql ruby-on-rails-3 postgresql database-design postgresql-9.2

我正在创建一个可以列出商家的应用,我还想添加一个工具,用于指定他们导出的国家/地区。因此,当用户搜索其所在国家/地区的商家列表时,他们不仅会看到位于其所在国家/地区的商家,还会查看其他国家/地区可能将其服务导出到其所在国家/地区的商家。

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

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

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

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

我能想到的另一个选项是清单模型上的复选框,因此企业可以说它们是在全球范围内出口到欧盟,还是出口到亚洲等。然后在乡村模型上添加这些选项作为布尔字段。这方面的缺点是它不会像具体说明这些国家那样准确......但如果它是一种更有效的方式,我不介意妥协。

1 个答案:

答案 0 :(得分:1)

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

请参阅这些密切相关的问题下的完整代码示例:
How to implement a many-to-many relationship in PostgreSQL?
Many-to-many relation filter

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

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

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