我们假设我们有一个名为Workorders
的表和另一个名为Parts
的表。我希望在Workorders
中有一个名为parts_required
的列。此列将包含一个项目,告诉我该工作订单所需的部分。理想情况下,这也包含数量,但如果需要,第二列可以包含数量信息。
Workorders
看起来像
WorkorderID date parts_required
1 2/24 ?
2 2/25 ?
3 3/16 ?
4 4/20 ?
5 5/13 ?
6 5/14 ?
7 7/8 ?
Parts
看起来像
PartID name cost
1 engine 100
2 belt 5
3 big bolt 1
4 little bolt 0.5
5 quart oil 8
6 Band-aid 0.1
创意1 :创建一个类似'1-1:2-3:4-5:5-4'
的字符串。我的应用程序将解析此字符串并显示我需要 - > 1 engine
,3 belts
,5 little bolts
和4 quarts of oil
。
优点 - 足够简单,可以创建和理解。
缺点 - 将对我们的数据进行深入反省更加困难。 (成本随着时间的推移等)
创意2 :使用二进制数字。例如,使用8位整数引用上面的列表(engine
,belt
,little bolts
,oil
)将是54,因为二进制表示中的54是{ {1}}。
优点 - 数据类型最适合大小。此外,我猜我可以在我的查询中使用棘手的数学技巧来搜索所使用的部分(不知道那些是什么,如果我在这里的云中,请纠正我)。
缺点 - 我不知道如何使用此方法处理数量。此外,即使使用64位110110
仍然只给我64个可以在我的表中的部分。我期待数百个。
有什么想法吗?我正在使用BIGINT
。我可以使用MySQL
,我知道他们有更PostgreSQL
datatypes
更像JSON
和数组,但我不熟悉那些查询会如何执行。使用MySQL
答案 0 :(得分:1)
为什么不创建关系表?
您可以使用以下内容创建名为Workorders_Parts的表:
| workorderId,partId |
因此,当您想要从特定工单中获取所有部件时,只需键入:
select p.name
from parts p inner join workorders_parts wp on wp.partId = p.partId
where wp.workorderId = x;
查询的内容是:
告诉我属于workorderId = x的部件的名称,并列在表workorders_parts
中
记住INNER JOIN意味着“交叉”换句话说:我正在寻找的数据应该存在于两个表中(通常是id)
IT将为您提供用于构建工作订单x的所有部件名称。
假设我们有workorderId = 1,partID = 1,2,3,它将在我们的关系表中表示为:
workorderId | PARTID
1 | 1
1 | 2
1 | 3个