首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数据库设计问题(未知的列数?)

数据库设计问题(未知的列数?)
EN

Stack Overflow用户
提问于 2011-03-12 00:34:05
回答 4查看 1.4K关注 0票数 0

我才刚刚开始学习数据库/SQL之类的东西。我决定为我工作的一家公司制作一些数据库作为练习,并帮助我们组织一些。

其中一个表将简单地包含我们库存中的所有单个部件,这些部件的列如下: PartNumber、Description和StockQty。

另一个表将包含我们制造的所有硬件工具包。所有这些都是由我们库存中的部件组合而成的。

我最初的想法是有这样的专栏: PartNumber,KitName,Part1Number,Part1Qty,...PartNnumber、PartNQty等。parts列中的数字将是第一个表中项目的零件号。

因此,由于不是所有的工具包都有相同数量的部件,我只需要知道最大的工具包中有多少部件,并制作那么多部件列。但是,如果我必须添加一个包含更多部件的新工具包呢?

有没有更好的方法来做这件事?

如有任何建议,我们将不胜感激!

谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-12 00:39:57

您应该将第二个表拆分为两个新表,一个用于工具包,另一个用于属于工具包的部分。

所需的表:

代码语言:javascript
复制
PARTS(PartNumber, Description, StockQty)
KITS(KitNumber, KitName)
KITSPARTS(KitNumber, PartNumber, PartQty)

这样,您就可以为属于套件的每个唯一部件向KITSPARTS表中添加一个条目。

示例数据:

代码语言:javascript
复制
PARTS
1, "Apple", 1
2, "Orange", 2

KITS
1, "Salad"

KITSPARTS
1, 1, 1
1, 2, 1

示例数据模拟了一个单独的工具包"Salad",它包含两个部分:1个"Apple“和1个"Orange”。

票数 13
EN

Stack Overflow用户

发布于 2011-03-12 00:41:05

这是关系数据库设计中的一个非常基本的问题。解决方案很简单:创建一个包含表A和表B之间关系的第三个表。

表A产品:

自行车ID% 1,名称"car"

  • ID % 2,名称“

表B部分:

  • ID % 1,名称“

  • ID% 2,名称"seat"

表C关系:

  • ID % 1,产品1,部件1,数量4
  • ID % 2,产品% 2,部件1,数量% 2
  • ID % 3,产品% 1,部件2,数量% 4
  • ID % 4,产品% 2,部件2,数量% 1

我希望你能理解这个例子。继续学习SQL,并享受学习的乐趣!我可以推荐你买一本介绍基本SQL知识的好书,这样你就可以更快地使用SQL。

票数 3
EN

Stack Overflow用户

发布于 2011-03-12 01:13:54

++获取上面的答案。

您现在应该开始考虑这些表的键了。每个表都应该有一些东西可以唯一地标识一行--合理地这样做可以确保您不会得到重复的行,因为这样会弄乱您的数据。

这里有一个非常简单的例子。

代码语言:javascript
复制
CREATE TABLE Parts (
    [PartNumber] INT
    , [PartDescription] VARCHAR(50)
)

PartNumber列将成为一个非常好的主键(假设没有两个部分具有相同的PartNumber)唯一定义行并且本身具有意义的属性就是自然键的一个示例

代码语言:javascript
复制
CREATE TABLE Kits (
    [KitNumber] INT
    , [KitDescription] VARCHAR(50)
)

同样-- KitNumber将是一个很好的主键。如果没有用于工具包的自然键,那么您可能会使KitNumber成为一个简单的自动递增代理键。

现在来看更复杂的表。对部件和套件之间的链接进行建模的模型。(套件由部件组成)。

代码语言:javascript
复制
CREATE TABLE KitParts (
    [KitNumber] INT
    , [PartNumber] INT
    )

因此,此表包含的唯一信息是套件和部件之间的链接。主键应该是什么?

如果您考虑到唯一标识一行的东西是这两列的组合。因此,自然密钥是两者(KitNumber和PartNumber)。这称为组合键。

此外,此表还应添加一些外键约束。例如,KitNumber不应该包含不存在于工具箱表中的值。

祝好运。欢迎使用SQL开发。

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

https://stackoverflow.com/questions/5275611

复制
相关文章

相似问题

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