如何将一个 table 关联到另一个已经有关系 (N:N) 的 table?

How to relate a table to another table that already has a relationship (N:N)?

我有点难以理解跟随关系。我有三个实体,品牌、细分市场和产品。一个品牌可以有多个细分市场,一个细分市场可以有多个品牌。一种产品可以有一个段,一个段可以有多种产品。我不明白如何将产品实体与细分市场相关联。目标是获得产品并确定您的细分市场和品牌。

1 个品牌:N 个细分市场

1 细分:N 个品牌

1 个产品:1 个细分市场

1 个细分:N 个产品

您可以像下面这样加入他们并检索相关数据。

SELECT seg.Segment, prd.Product, brn.Brand
FROM Segment seg
LEFT JOIN Brand brn on brd.ID = seg.ID
LEFT JOIN Product prd on prd.ID = seg.ID

ID 字段是您的主键和外键。

您正在处理品牌和细分市场之间的 N:M 关系。一个典型的解决方案是在 tables brandssegments 之间创建一个桥 tables。假设 table brands 有主键 brand_id 并且 segments 有主键 segment_id,你可以创建第三个 table 叫做 brand_segments,使用 brand_idsegment_id 列来表示关系。

另一方面,细分市场与产品之间的关系是 1:N。您可以通过在 products table 中添加一列来表示这一点,该列存储对其所属段的 ID 的引用。

示例架构

brands
    brand_id
    brand_name

segments
    segment_id
    segment_name

products
    product_id
    product_name
    segment_id

brand_segments
    brand_id
    segment_id

恢复与产品关联的所有细分市场的查询:

SELECT p.*, s.*
FROM products p
INNER JOIN segments s ON s.segment_id = p.segment_id

恢复与产品关联的所有品牌的查询:

SELECT p.*, b.*
FROM products p
INNER JOIN brand_segments bs ON bs.segment_id = p.segment_id
INNER JOIN brands b ON b.brand_id = bs.brand_id 

两个查询合并

SELECT p.*, s.*, b.*
FROM products p
INNER JOIN segments s ON s.segment_id = p.segment_id
INNER JOIN brand_segments bs ON bs.segment_id = p.segment_id
INNER JOIN brands b ON b.brand_id = bs.brand_id