我有三个表(MySQL):


families在其中定义产品的类别
products我定义产品的地方
与家人和产品相关的families_products




-------------------    --------------------    ------------------------
| familyID | code |    | productID | code |    | familyID | productID |
|----------|------|    |-----------|------|    |----------|-----------|
|     1    |  p   |    |     1     |  p3  |    |    1     |     1     |
|     2    |  a   |    |     2     |  a5  |    |    1     |     3     |
|     3    |  e   |    |     3     |  p1  |    |    1     |     6     |
-------------------    |     4     |  e7  |    |    2     |     2     |
                       |     5     |  a2  |    |    2     |     5     |
                       |     6     |  p4  |    |    3     |     4     |
                       --------------------    ------------------------


我有两个问题:


这种设计方便吗?还是最好删除families_products表,将familyID关系直接放入表products中?
对于这样的设计,如果我有familyID,如何获取products->code?我写了这个查询,但是如果像我之前所说的那样,如果将family_products表直接放入familyID关系到表产品中,而不是在第三个关系表中,则这样的查询结构将起作用。




'SELECT productID, code, img
 FROM products AS a
 INNER JOIN families_products AS b
 ON b.productID=a.productID
 WHERE b.familyID=' . $families[$key]["familyID"]

最佳答案

您的数据结构很好。

如果每个产品最多有一个familyID,则应将该系列放在products表中。如果产品可以属于多个系列,则应使用连接表(您的结构)。

至于您的查询,这很好。我会使用更好的表别名:

SELECT p.productID, p.code, ??.img
FROM products p INNER JOIN
     families_products fp
     ON f.productID = fp.productID
WHERE fp.familyID = ' . $families[$key]["familyID"]

10-05 20:34