首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据库模式一个列项引用来自另一个表的许多行。

数据库模式一个列项引用来自另一个表的许多行。
EN

Stack Overflow用户
提问于 2015-01-16 17:02:52
回答 1查看 572关注 0票数 1

假设我们有一个名为Workorders的表和另一个名为Parts的表。我想在Workorders中有一个名为parts_required的专栏。本专栏将包含一个项目,它将告诉我该工作顺序需要哪些部分。理想情况下,这也将包含数量,但第二列可以包含数量信息,如果需要。

Workorders看起来就像

代码语言:javascript
复制
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看起来就像

代码语言:javascript
复制
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

Idea 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位整数引用上面的列表(enginebeltlittle boltsoil)将是54,因为二进制表示中的54是110110

Pros -数据类型在尺寸方面是最优的.此外,我猜想在我的查询中有一些棘手的数学技巧可以用来搜索所使用的部分(不知道它们是什么,如果我在这里的话,请纠正我)。

Cons -我不知道如何使用这种方法处理数量。而且,即使使用64位的BIGINT,也只能给出64个可以放在我的表中的部件。我估计会有几百人。

有什么想法吗?我正在使用MySQL。我可能能够使用PostgreSQL,而且我知道它们有更灵活的datatypes,如JSON和数组,但我不熟悉如何查询这些查询。而且,与MySQL待在一起会容易得多。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-16 17:10:03

为什么不创建一个关系表呢?

您可以创建一个名为Workorders_Parts的表,其内容如下:

工作秩序,工作秩序

因此,当您想从特定的工作顺序获取所有部件时,只需键入:

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27989047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档