【发布时间】:2018-07-26 10:24:32
【问题描述】:
我正在开发一个访问数据库,在其中一个表输入中,由于使用了一些旧软件,重复项经常出现在(我最终想要的)主键中,原因如下所示:
ID | Fluid | Designer | Team |
--------------------------------------------------
A | Water | John | Piping |
A | Water | James | Piping |
B | Steam | Sam | Piping |
B | Steam | Sam | Modeling |
C | Hydrogen | Joe | Piping |
D | Steam | Joe | Piping |
参考 ID 字段的重复查询产生:
ID | Fluid | Designer | Team |
--------------------------------------------------
A | Water | John | Piping |
A | Water | James | Piping |
B | Steam | Sam | Piping |
B | Steam | Sam | Modeling |
不希望自动删除这些重复项,因为重要的是要知道软件模型更改了设计者或转移到了另一个团队。因此,这些都是人工审核的。
但是,此表可以包含多达 30 个字段,并且查找单个非重复项可能会很麻烦。因此,我想要的输出是:
ID | Fluid | Designer | Team |
--------------------------------------------------
A | | John | |
A | | James | |
B | | | Piping |
B | | | Modeling |
我对 SQL 的经验很少,但我用了一些时间使用 Visual Basic,所以我的猜测是一些标准,例如:
if(record(n)=record(n-1), display("")
但是,从我对 access 和 SQL 的基本了解来看,我知道将 Visual Basic 关联起来是一个苹果与橘子的比较。
我正在运行 MS Access 2007-2010。
编辑: 现在研究标准化(抱歉,我是初学者)。尽管关于我的数据库问题的更多细节。还更新了上面的决赛桌。
我认为我的数据库应该如何工作:
- 从软件导入数据(每天)。这产生了表 1。
- 使用重复查询查找 ID 列中的任何重复项。这是表 2。
- 使用查询生成一个表,该表将显示重复的 ID 以及不重复的相应列。
软件中的错误源于它会将新数据修改为预先存在的数据,但仅删除完全重复的数据。如果说,不同的用户在模型上工作,那么它不会更新当前 ID,而是添加一个新行,其中所有详细信息都相同,但不同的用户除外。
【问题讨论】:
-
你应该规范你的数据库。这是冗余,对你不利。
-
我建议先normalising 你的数据。我最初认为 ID 是 Fluid 的标识符,但 Steam 的 ID 为 B & D。我会将 Fluid、Designer 和 Team 拆分到各自的表中,这样就不会出现数据重复。
-
Steam 不会有 Sam 和 Joe 作为你的决赛桌设计师,或者只是基于重复ID?当您说 30 个字段 时,您的意思是(在谈论数据库时讨厌这样说)30 列?
-
@DarrenBartrup-Cook 是的,我的意思是 30 列。更新了我的帖子以(希望)更有帮助。我在更新的最后一张表中也犯了一个错误。感谢您到目前为止的回复,我正在研究规范化。
标签: database ms-access jet-sql