Ruby on Rails 中表关联及数据库Schema 技术咨询
表结构与关联关系梳理
我来帮你把这些表的关联关系梳理得明明白白,方便你后续开发或数据查询操作:
核心关联关系总览
先把各个表之间的1:n关联逻辑列出来:
ads表和ad_address、ad_copies是一对多关系:一个广告可以对应多条地址记录、多条副本记录,通过ad_address.ad_id和ad_copies.ad_id关联到ads表的主键idcategories(分类)和subcategories(子分类)是一对多关系:一个分类下有多个子分类,通过subcategories.id_categories关联到categories的主键idsubcategories和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
相关产品推荐
相关产品推荐

