访问表配置

时间:2013-10-22 15:57:06

标签: ms-access database-table

我是新手,我需要对我设置两个表的方式有所了解。我从事跟踪设备采购业务。我有一个表,主要单位,数量,品牌/型号信息以及其他一些购买细节。我们有与每个主要单位相关的唯一编号。所以说我们想订购一个T.V.那个数字是12345.好吧,现在我们需要单独跟踪配件,我认为最好有一个单独的配件表。我遇到的问题是,因为可能会有不同数量的配件和不同的数量,它会丢掉我的数字。当我运行查询或报告时,它显示主单元的多个记录。

我希望查询像这样单独列出行。

 ID    Desc    Qty    Type
12345   TV      3   Main Unit 
12345   Cable   3   Accessory 
12345   Mount   2   Accessory 

相反,它会将第一行列出两次,因此看起来总共有6个单位。

12345   TV   3   Accessory   Cable   3 
12345   TV   3   Accessory   Mount   2 

这可能是一个简单的解决方案,我只是有一个大脑放屁或者我应该把配件放在主桌上,我不确定。任何建议/见解将不胜感激。

2 个答案:

答案 0 :(得分:0)

如果主表中的每个单元都有许多附件,那么两者之间需要多对一的关系。

将外键列添加到附件表,并将其设置为主表所属项目的主键。

create table main (
    id identity, 
    primary key(id)
);

create table accessory (
    id identity,
    parent_id int,
    primary key(id),
    foreign key(parent_id) references main
);

所以现在你在main中创建行,每行都有自己的主键id。我们称之为main(id)。您将拥有与主键和外键值关联的附件行。我们称它们为附件(id,parent_id)。

INSERT行进入main会给你main(1)。

将三行插入附件中,与main中的第一行相关联,为您提供附件(1,1),附件(2,1),附件(3,1)。

使用JOIN将它们组合在一起:

select *
from accessory
join main
on accessory.parent_id = main.id

我认为您将遇到Access问题,因为它专为非技术人员设计,他们不熟悉关系数据库或SQL。如果您正在使用UI创建表,则必须正确添加关联外键,否则它将无效。

答案 1 :(得分:0)

正如我上面所说,你实际上是在处理多对多关系。因此,您将需要一个“人行横道”表。以下是设置方法:

1)电视桌将有TVID(主键,唯一),电视名称,数量,制造商等......

2)附件表将具有AccessoryID(主键,唯一),附件名称,数量,制造商等...

3)Crosswalk表将具有TVID和AccessoryID,没有主键。您可以在此输入您可能拥有的每个TVID和AccessoryID组合。 例如:

TVID         AccessoryID
12345         666
12345         777
12345         888
55555         777
55555         888

假设12345是TV1而55555是TV 2.现在你知道TV1可以使用附件号666,777和888,而TV2可以使用附件号777和888。

从电视桌到Crosswalk桌的一对多。从附件表到Crosswalk表的一对多。

啵-YAH!那应该可以解决你的问题。如果你不知道如何在那之后让你的查询工作,请告诉我,我会看看我是否可以在剩下的时间里为你提供指导。