【问题标题】:Creating a database structure where one column has multiple values?创建一个一列有多个值的数据库结构?
【发布时间】:2013-09-17 16:03:45
【问题描述】:

我有一个使用 MS Access 作为前端并使用 VB 编码的 SQL 数据库。每天从 Excel 电子表格中导入数据,格式为:

期刊日期、IO 帐户、金额、发布日期、行描述、用户 ID、检查日期、凭证

凭证数据在 Excel 电子表格中采用如下格式: 1111111;2222222;3333333

凭证可以有任意数量的凭证编号(通常为 1 到 13 个不同的编号),每个编号用分号分隔。此外,每个数字的物理长度可能不同。然后我需要将这些凭证号链接到多个不同的表。我接手这个项目时使用的数据结构以分号分隔的形式存储凭证,并解析字符串以链接到其他表。我正准备改造这个数据库,我不想像这种格式存储数据,因为我知道它违反了 1NF。

我知道我可能应该使用外键,但我不确定如何使用不同的 Voucher 数据。当数据来自 Excel 时,我能够在 Access 中使用 VB 以任何可能的方式解析数据,我只是不知道如何存储它以关联我的表。

该项目的目标是匹配与每张不同凭证相关的所有内容,并查看金额是否匹配。目前,该过程需要 5 到 10 分钟来拆分凭证并跨表比较数据。

如果您需要更多信息,请告诉我。任何意见,将不胜感激。 谢谢!


编辑-让我更清楚:

这是一个示例凭证:2988670;2990020;2989130;2991597;ONL112382

表中有多个条目(称为 T1),此凭证具有不同的金额。每个数值(不包括 ONL 编号)对应于另一个表(称为 T2)。如果这 4 个数字中的每一个都在 T2 中,则称它们为“匹配”。如果它们匹配并且 T2 中的金额之和等于 T1 中的金额之和,则它们是“匹配没有差异”。

有时凭证如下所示:ED414596

在这种情况下,我必须将此值与一个完全不同的表(称为 T3)进行比较。它包括与上述相同的匹配过程。

*假设凭证以多种方式出现,需要与多个表格进行比较。

【问题讨论】:

  • 您的问题是什么?如果您的问题是“我应该”,答案可能是否定的。将凭证数据解析为单独的值,并将其放入自己的表中,并通过外键链接到 Journal 表。
  • 您可以有 13 个voucher 字段,或者您可以有一个包含FK_IDVoucher 数字的查找表。两者都优于在一个字段中存储多个值,后者优于前者。
  • 所以是代金券表?一张有 13 个不同数字的代金券怎么样?我需要 13 个不同的列吗?
  • 如果我需要存储超过 13 个数字怎么办?代金券中的代金券编号不应有上限,因为它一直在变化。

标签: sql sql-server vb.net ms-access data-structures


【解决方案1】:

您的凭证表将有一个voucherID 和一个voucherNumber,这将允许voucherID 可以根据需要重复多次。 voucherID 将是您的第一个表的外键,两列一起将是该表的 PK。

【讨论】:

  • 所以像这样:ID 1 - 1111111, ID 1 - 2222222, ID 1 - 3333333 用于凭证 1111111;2222222;3333333?然后当我将凭证存储在我的主表中时,我会将其存储为 1?
  • 好吧,这似乎是个好主意。不敢相信我想不到。我会不断更新这篇文章。谢谢!
  • 效果很好!谢谢大家!
猜你喜欢
  • 1970-01-01
  • 2011-04-29
  • 1970-01-01
  • 1970-01-01
  • 2015-05-15
  • 1970-01-01
  • 2021-10-21
  • 2021-01-22
  • 1970-01-01
相关资源
最近更新 更多