假设我们有一个名为的表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'
。我的应用程序会解析这个字符串,并表明我需要- > 1engine
,3belts
,5little bolts
,和4quarts of oil
。
优点-易于创建和理解。
缺点-将使我们对数据的深入内省变得更加困难。(随着时间的推移等费用)
想法2:使用二进制数。例如,参考上面的列表(engine
,belt
,little bolts
,oil
使用8位整数是54),因为在54二进制表示110110
。
优点-数据类型在大小方面是最佳的。另外,我猜想我可以在查询中使用一些棘手的数学技巧来搜索使用的零件(不知道它们是什么,如果我在云端,请纠正我)。
缺点-我不知道如何使用这种方法处理数量。另外,即使使用64位,BIGINT
仍然只能提供表中可以包含的64个部分。我希望有数百个。
有任何想法吗?我正在使用MySQL
。我可能可以使用PostgreSQL
,并且我知道它们具有更灵活的datatypes
likeJSON
和array,但是我不熟悉查询这些查询将如何执行。而且,与它在一起会更容易MySQL
为什么不创建一个关系表?
您可以创建具有以下内容的名为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的意思是“ INTERSECTION”:两个表中都应存在我要查找的数据(通常为id)
IT将为您提供用于构建工作单x的所有零件名称。
假设我们的workorderId = 1,partID = 1,2,3,它将在我们的关系表中表示为:
workorderId | partId
1 | 1
1 | 2
1 | 3
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句