我有一个表通过外键连接到另一个表;
如果我将查看mysql上的第三个表,则字段包含外键的id号。
我的问题是,存储的值可能是名称本身而不是ID吗?或者是否可以在我的第三个表上添加一个名为Brand_name的字段,这是一个VARCHAR,它将显示第一个表中的确切品牌名称。示例我的第三个表的值将是'1','3','ID为品牌的品牌名称。 3' , '25'; - 如果是的话,我不知道该怎么做。
答案 0 :(得分:1)
没有什么能阻止你这样做。你只需要在“第三个表”中添加一个brand_name
字段......要求提出的问题是:你为什么要这样做?
brands
_________________________
| brand_id | brand_name |
| 1 | brand1 |
| 2 | brand2 |
| 3 | brand3 |
| 4 | brand4 |
| 5 | brand5 |
-------------------------
lines
_________________________
| line_id | line_name |
| 1 | line1 |
| 2 | line2 |
| 3 | line3 |
| 4 | line4 |
| 5 | line5 |
-------------------------
linked
_________________________________________________
| id | line_id | brand_id | brand_name |
| 1 | 5 | 1 | brand1 |
| 2 | 5 | 2 | brand2 |
| 3 | 4 | 2 | brand2 |
| 4 | 4 | 3 | brand3 |
| 5 | 4 | 3 | brand3 |
| 6 | 3 | 4 | brand4 |
| 7 | 3 | 4 | brand4 |
| 8 | 2 | 4 | brand4 |
| 9 | 2 | 5 | brand5 |
| 10 | 1 | 5 | brand5 |
------------------------------------------------
这是你建议的设置。现在,如果我们:
SELECT brand_id, brand_name FROM linked WHERE line_id = 4;
我们会得到:
_________________________
| brand_id | brand_name |
| 2 | brand2 |
| 3 | brand3 |
| 3 | brand3 |
-------------------------
但是没有重复数据也可以实现同样的目标(在大型数据库中,拥有类似的重复数据是非常不合理的),并且每次使用以下品牌名称更改时都无需更新链接和品牌表:
SELECT linked.brand_id, brands.brand_name
FROM brands, linked
WHERE linked.line_id = 4 AND brands.brand_id = linked.brand_id;
_________________________
| brand_id | brand_name |
| 2 | brand2 |
| 3 | brand3 |
| 3 | brand3 |
-------------------------
答案不需要那么久。我很开心制作桌子。