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

时间:2011-03-11 16:34:05

标签: sql database-design

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

其中一个表格将简单地包含我们库存中包含的所有单个部分,其中包含以下列:PartNumber,Description和StockQty。

另一个表格将包含我们制作的所有硬件套件。所有这些都是由我们库存中的零件组合而成。

我最初的想法是拥有以下列:PartNumber,KitName,Part1Number,Part1Qty,... PartNnumber,PartNQty等。Parts列中的数字将是第一个表中项目的部分编号。

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

有更好的方法吗?

任何建议都将不胜感激!

谢谢!

4 个答案:

答案 0 :(得分:13)

你应该将你的第二张桌子分成两个新的桌子,一个用于套件,另一个用于属于套件的部件。

需要的表格:

PARTS(PartNumber, Description, StockQty)
KITS(KitNumber, KitName)
KITSPARTS(KitNumber, PartNumber, PartQty)

这样,您可以为属于工具包的每个唯一部分向KITSPARTS表添加一个条目。

示例数据:

PARTS
1, "Apple", 1
2, "Orange", 2

KITS
1, "Salad"

KITSPARTS
1, 1, 1
1, 2, 1

样本数据模拟了一个单独的工具包“沙拉”,有两个部分; 1“Apple”和1“Orange”。

答案 1 :(得分:3)

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

表A产品:

  • ID 1,名称“car”
  • ID 2,名称“bicycle”

表B部分:

  • ID 1,名称“wheel”
  • 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来加速你的成功。

答案 2 :(得分:2)

++对于上面的答案。

您现在应该开始考虑这些表的。每个表都应该有某些,用于唯一地标识一行 - 明智地完成这将确保您不会获得会导致数据混乱的重复行。

这是一个非常简单的例子。

CREATE TABLE Parts (
    [PartNumber] INT
    , [PartDescription] VARCHAR(50)
)

PartNumber列将构成一个非常好的PRIMARY KEY(假设你将没有两个部分具有相同的PartNumber)一个唯一定义行并且具有含义的属性本身就是一个NATURAL的例子KEY

CREATE TABLE Kits (
    [KitNumber] INT
    , [KitDescription] VARCHAR(50)
)

再次 - KitNumber将是一个很好的主键。如果没有工具包的NATURAL KEY,那么您可能会使KitNumber成为一个简单的自动增量代理密钥。

现在到了更复杂的表格。模拟零件和套件之间链接的模型。 (套件由零件组成)。

CREATE TABLE KitParts (
    [KitNumber] INT
    , [PartNumber] INT
    )

因此,该表中包含的唯一信息是套件和零件之间的链接。 PRIMARY KEY应该是什么?

如果您考虑唯一标识行的事物是两列的COMBINATION。因此NATURAL KEY都是([KitNumber]和[PartNumber])。这称为复合键。

此表还应添加一些FOREIGN KEY约束。例如,[KitNumber]永远不应包含Kits表中不存在的值.......

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

答案 3 :(得分:1)

正如其他人所说,你需要normalize你的设计。