假设我们有一个名为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.1Idea 1:创建类似于'1-1:2-3:4-5:5-4'的字符串。我的应用程序将解析这个字符串,并显示我需要->1 engine、3 belts、5 little bolts和4 quarts of oil。
Pros -足够简单,可以创建和理解。
Cons --将使深入反思我们的数据变得更加困难。(费用随时间的推移等)
Idea 2:使用二进制数字。例如,使用8位整数引用上面的列表(engine、belt、little bolts、oil)将是54,因为二进制表示中的54是110110。
Pros -数据类型在尺寸方面是最优的.此外,我猜想在我的查询中有一些棘手的数学技巧可以用来搜索所使用的部分(不知道它们是什么,如果我在这里的话,请纠正我)。
Cons -我不知道如何使用这种方法处理数量。而且,即使使用64位的BIGINT,也只能给出64个可以放在我的表中的部件。我估计会有几百人。
有什么想法吗?我正在使用MySQL。我可能能够使用PostgreSQL,而且我知道它们有更灵活的datatypes,如JSON和数组,但我不熟悉如何查询这些查询。而且,与MySQL待在一起会容易得多。
发布于 2015-01-16 17:10:03
为什么不创建一个关系表呢?
您可以创建一个名为Workorders_Parts的表,其内容如下:
工作秩序,工作秩序
因此,当您想从特定的工作顺序获取所有部件时,只需键入:
select p.name
from parts p inner join workorders_parts wp on wp.partId = p.partId
where wp.workorderId = x;查询的内容是:
告诉我属于workorderId=x并列在表workorders_parts中的部件的名称
记住内部连接意味着“交集”,换句话说:我正在寻找的数据应该存在于两个表中(通常是id)

它将为您提供用于构建workorder x的所有部件名称。
假设我们有workorderId =1和partID = 1,2,3,它将在关系表中表示为:
workorderId x- partId
1-1-1
1/2
1/3
https://stackoverflow.com/questions/27989047
复制相似问题