Database design MS Access:需要高级设计建议

Database design MS Access:需要高级设计建议,database-design,ms-access,Database Design,Ms Access,我正在做一个访问数据库。此数据库的数据源是Excel电子表格。我需要添加一些功能,允许用户通过运行VBA函数清理原始Excel数据,然后将这些数据导入Access,而无需导入重复记录 我有几个关于如何处理这一问题的问题: 1) 我应该在Excel中编写VBA过程和简单的GUI来清理数据,还是应该将其包含在允许用户将Excel数据导入表的Access表单中?换句话说,数据应该在Access中清理还是在Access之外清理 2) 防止将重复记录导入表的最佳方法是什么?我应该编写VBA代码来实现这一点

我正在做一个访问数据库。此数据库的数据源是Excel电子表格。我需要添加一些功能,允许用户通过运行VBA函数清理原始Excel数据,然后将这些数据导入Access,而无需导入重复记录

我有几个关于如何处理这一问题的问题:

1) 我应该在Excel中编写VBA过程和简单的GUI来清理数据,还是应该将其包含在允许用户将Excel数据导入表的Access表单中?换句话说,数据应该在Access中清理还是在Access之外清理

2) 防止将重复记录导入表的最佳方法是什么?我应该编写VBA代码来实现这一点,还是应该设置表的属性(如果可能的话)

3) 我是否应该允许用户在Excel中清理数据,然后让用户在Access中使用导入向导来添加数据,而不是在表单中编写代码以允许将数据导入数据表


谢谢

如果用户有权访问Excel文件,那么您需要将其视为不受信任/不干净的数据源,因为此时您无法控制它——用户会犯错、忘记说明等

因此,无论您是否在excel中进行任何清理,都必须检查Access中的数据


现在要导入数据并防止重复记录吗?一种方法是创建指向excel文件的链接(即Access将其视为一个表),根据您的要求清理数据,最后创建一个查询excel表的create table查询(选择DISTINCT…),并将结果插入新的访问表。

防止数据库中重复记录的最佳方法是在构成唯一键的列上定义唯一索引

例如,如果您想确保医院系统中每家医院的每个专科不超过一名专家,您可以在假设的HospitalExperties表中执行此操作:

             id                autoincrementing integer primary key
             hospitalid        integer foreign key references hospitals(id)
             physicianid       integer foreign key references physicians(id)
             specialityid      integer foreign key references specialties(id)


             unique composite index on (hospitalid, physicianid, specialtyid)
那么你就不能插入一个副本了


因此,您首先必须确定什么构成了表的副本:当将哪些列的子集放在一起时,会建立记录的唯一性

我是Access程序员,不是Excel程序员,所以我投票支持在Access中做任何事情。作为@kuru kuru na。。。建议,如果用户可以编辑Excel文件,那么在您对其进行清理之后,就不能信任它们保持“干净”,因此我建议在Access中自己进行所有清理

至于导入和避免重复,您需要牢记@Tim的最后一段,即“您首先必须确定什么构成重复”。这可能比听起来更复杂(例如,你会将“Bob Smith”与“Robert Smith”匹配,还是只进行精确匹配?)