这个问题可能很容易回答,但由于我在数据库设计方面没有太多经验,所以我被困住了。我甚至不知道如何谷歌这个因为我不知道术语....
我有一个带有两个表的mysql数据库,在第一个表中我需要对第二个表进行MULTIPLE引用。我该怎么用?我可以选择与Enum的多个匹配项吗?或者我应该使用逗号分隔列表和varchar?
|MAIN TABLE
|==========================================
| id (primary index)
| date (tstamp)
| product name (varchar)
| componentids (int, enum, varchar ???)
|===========================================
|COMPONENTS TABLE
|===========================================
| componentid (int)
| name (varchar)
| info (varchar)
|===========================================
所以可能出现这种情况:
|MAIN TABLE
|=====================================================
| id | 1 | 2 |
| date | 34958734958 | 349587123138 |
| product name | A test product | A second product |
| componentids | 2,3 | 1,2 |
|=====================================================
|COMPONENTS TABLE
|========================================================
| componentid | 1 | 2 | 3 |
| name | Component 1 | Component 2 | Component 1 |
| info | info. text | info. text | info. text |
|========================================================
如何以有效的方式实现这一目标?
非常感谢你的帮助!
答案 0 :(得分:1)
你所追求的是多对多的关系。每个组件可以属于多个产品,每个产品可以有多个组件。我强烈建议使用第三个表格,也许称为product_components。
你的主表有(id,date,name) 您的组件表有(ID,名称,信息) 您的product_components表有(product_id,component_id)。每个都是一个外键,分别引用主表和组件表。
这维护了“参照完整性”,这意味着产品无法引用不存在的组件(例如,如果您尝试,数据库将引发错误)。
是的,您可以通过这种方式选择与一种产品相关的多个组件。
SELECT components.*
FROM components
JOIN product_components
ON components.id = product_components.component_id
WHERE product_components.product_id = <some product id>
答案 1 :(得分:0)
没有以逗号分隔的列表或varchar。那不是关系方式。
该怎么办? main
表格中的每一行component
都有很多行,反之亦然?
一对多关系意味着将外键添加到许多表并加入两个:
select *
from main
join component
on main.componentid = component.componentid
这将匹配主表中的所有行及其组件对应部分。