我才刚刚开始学习数据库/SQL之类的东西。我决定为我工作的一家公司制作一些数据库作为练习,并帮助我们组织一些。
其中一个表将简单地包含我们库存中的所有单个部件,这些部件的列如下: PartNumber、Description和StockQty。
另一个表将包含我们制造的所有硬件工具包。所有这些都是由我们库存中的部件组合而成的。
我最初的想法是有这样的专栏: PartNumber,KitName,Part1Number,Part1Qty,...PartNnumber、PartNQty等。parts列中的数字将是第一个表中项目的零件号。
因此,由于不是所有的工具包都有相同数量的部件,我只需要知道最大的工具包中有多少部件,并制作那么多部件列。但是,如果我必须添加一个包含更多部件的新工具包呢?
有没有更好的方法来做这件事?
如有任何建议,我们将不胜感激!
谢谢!
发布于 2011-03-12 00:39:57
您应该将第二个表拆分为两个新表,一个用于工具包,另一个用于属于工具包的部分。
所需的表:
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示例数据模拟了一个单独的工具包"Salad",它包含两个部分:1个"Apple“和1个"Orange”。
发布于 2011-03-12 00:41:05
这是关系数据库设计中的一个非常基本的问题。解决方案很简单:创建一个包含表A和表B之间关系的第三个表。
表A产品:
自行车ID% 1,名称"car"
表B部分:
”
表C关系:
我希望你能理解这个例子。继续学习SQL,并享受学习的乐趣!我可以推荐你买一本介绍基本SQL知识的好书,这样你就可以更快地使用SQL。
发布于 2011-03-12 01:13:54
++获取上面的答案。
您现在应该开始考虑这些表的键了。每个表都应该有一些东西可以唯一地标识一行--合理地这样做可以确保您不会得到重复的行,因为这样会弄乱您的数据。
这里有一个非常简单的例子。
CREATE TABLE Parts (
[PartNumber] INT
, [PartDescription] VARCHAR(50)
)PartNumber列将成为一个非常好的主键(假设没有两个部分具有相同的PartNumber)唯一定义行并且本身具有意义的属性就是自然键的一个示例
CREATE TABLE Kits (
[KitNumber] INT
, [KitDescription] VARCHAR(50)
)同样-- KitNumber将是一个很好的主键。如果没有用于工具包的自然键,那么您可能会使KitNumber成为一个简单的自动递增代理键。
现在来看更复杂的表。对部件和套件之间的链接进行建模的模型。(套件由部件组成)。
CREATE TABLE KitParts (
[KitNumber] INT
, [PartNumber] INT
)因此,此表包含的唯一信息是套件和部件之间的链接。主键应该是什么?
如果您考虑到唯一标识一行的东西是这两列的组合。因此,自然密钥是两者(KitNumber和PartNumber)。这称为组合键。
此外,此表还应添加一些外键约束。例如,KitNumber不应该包含不存在于工具箱表中的值。
祝好运。欢迎使用SQL开发。
https://stackoverflow.com/questions/5275611
复制相似问题