You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby on Rails 中表关联及数据库Schema 技术咨询

表结构与关联关系梳理

我来帮你把这些表的关联关系梳理得明明白白,方便你后续开发或数据查询操作:

核心关联关系总览

先把各个表之间的1:n关联逻辑列出来:

  • ads 表和 ad_address、ad_copies 是一对多关系:一个广告可以对应多条地址记录、多条副本记录,通过 ad_address.ad_id 和 ad_copies.ad_id 关联到 ads 表的主键 id
  • categories(分类)和 subcategories(子分类)是一对多关系:一个分类下有多个子分类,通过 subcategories.id_categories 关联到 categories 的主键 id
  • subcategories 和 ads 是一对多关系:一个子分类下有多个广告,通过 ads.id_subcategories 关联到 subcategories 的主键 id

各表关键关联字段明细

ads 表

  • 主键:id
  • 外键:id_subcategories(关联 subcategories 表的 id)
  • 作为主表关联:id 被 ad_address.ad_id、ad_copies.ad_id 引用

ad_address 表

  • 外键:ad_id(关联 ads 表的 id),用于存储广告对应的地址信息

ad_copies 表

  • 外键:ad_id(关联 ads 表的 id),用于存储广告的副本内容

categories 表

  • 主键:id,作为分类的唯一标识

subcategories 表

  • 主键:id
  • 外键:id_categories(关联 categories 表的 id)

实用示例查询

如果需要查询某个分类下所有广告的完整信息(包括子分类、地址、副本),可以用这个SQL语句:

SELECT 
    c.name AS category_name,
    sc.name AS subcategory_name,
    a.id AS ad_id,
    a.title AS ad_title,
    aa.street, aa.city, aa.postal_code,
    ac.copy_content
FROM categories c
INNER JOIN subcategories sc ON c.id = sc.id_categories
INNER JOIN ads a ON sc.id = a.id_subcategories
LEFT JOIN ad_address aa ON a.id = aa.ad_id
LEFT JOIN ad_copies ac ON a.id = ac.ad_id
WHERE c.id = 2; -- 替换成你要查询的分类ID

内容的提问来源于stack exchange,提问作者OKMantis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:36:42