我刚刚开始学习数据库/ SQL之类的旅程。我决定为我工作的公司之一制作一些数据库,并帮助我们组织一些。
其中一个表格将简单地包含我们库存中包含的所有单个部分,其中包含以下列:PartNumber,Description和StockQty。
另一个表格将包含我们制作的所有硬件套件。所有这些都是由我们库存中的零件组合而成。
我最初的想法是拥有以下列:PartNumber,KitName,Part1Number,Part1Qty,... PartNnumber,PartNQty等。Parts列中的数字将是第一个表中项目的部分编号。
因此,由于并非所有套件都具有相同数量的零件,我只需知道最大套件中有多少零件,并制作多个零件列。但是如果我必须添加一个包含更多零件的新套件呢?
有更好的方法吗?
任何建议都将不胜感激!
谢谢!
答案 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产品:
表B部分:
表C关系:
我希望你能理解这个例子。继续使用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你的设计。