1

我正在使用 Access 创建一个数据库。这只是一个测试数据库,类似于我的要求,所以我可以在创建一个用于工作之前提高我的技能。我为一所虚构的学校创建了一个数据库,因为这是一个很好的操场和丰富的数据(许多学生有很多科目,有很多老师,等等)。

问题 1 使用 Lookup 列和多对多关联表之间有什么区别(如果有)?示例:我有表“教师”和“主题”。很多老师都有很多科目。我可以并且已经创建了一个表“Teacher_Subject”并使用它运行查询。然后,我在教师表中创建了一个查找列,其中包含来自主题的数据。查找列似乎取代了 teacher_subject 表。(尽管关系数据在查找表和teacher_subject 之间显然是重复的,并且可能会有所不同)。哪一个是“更好”的选择?使用查找表有问题吗?(我意识到这是一个非常“普遍”的问题。感谢链接到其他资源和回答说“这取决于......”)

问题 2 查找表吸引我的地方如下: 在为教师输入科目创建表单时,通过查找,我可以简单地创建复选框并单击教师的科目“开”或“关”。每次单击打开/关闭都会在查找列中创建/删除一条记录(它替换了teacher_subject)。如果我使用来自教师主题查询的表单,其中教师作为主表单,主题作为子表单,我会遇到这个问题:在子表单中,我可以选择教师在炸弹框中的每个主题,即单击,向下滚动,选择,转到下一行,单击,向下滚动等(需要很长时间)或者我可以创建一个列表框,列出每行中的所有可用主题,但只允许我选择一个。(占用太多空间)。是否有可能为teacher_subject 设置一个点击打开/关闭列表框,

注意 - 我知道零 SQL 或 VB。如果正确的答案是“您需要为此了解 SQL”,那就太好了。我只需要知道。

谢谢!

4

4 回答 4

2

表格中的查找列会给你带来更多的压力而不是快乐。除非您需要它们用于 Sharepoint,否则应避免使用它们。您不妨阅读http://r937.com/relational.htmlhttp://www.mvps.org/access/tencommandments.htm

于 2010-05-07T16:45:21.633 回答
1

我不会使用它们。你的例子很好,但有局限性。当您需要从主题表中引用名称以外的另一个字段时,您会怎么做?您如何区分仅在学期基础上提供的科目?

如果没有一些丑陋的编码,您将无法计算每个老师分配了多少科目。

另一个限制是,当您开始确定在给定学年期间谁教授了哪些课程时。

于 2010-05-07T17:56:18.673 回答
1

我对你的第二个问题有点不清楚,但在我看来你需要一个带有下拉列表的子表单。

如果你想做复选框的事情,它很快就会变得复杂得多。对我来说,你是从用户界面开始,然后倒退到结构上,而不是朝着另一个方向发展。

我不愿提及它,但就全面披露而言,您应该知道在 A2007 和 A2010 中,您有可用的多值字段,并且它们呈现的正是您描述的 UI。但是它们有许多与查找字段相同的问题,并且在代码中使用起来非常复杂。在幕后,它们是通过标准的多对多连接表实现的,但对您来说这一切都是隐藏的。

我希望 MS 将带有复选框控件的列表框与 MV 字段一起用于所有列表框,但是如果列表框控件不是为此而设计的(带有链接子/例如,链接主属性)。

于 2010-05-07T19:04:09.673 回答
0

我试图想出一种方法来从多值字段中为您提供您喜欢的 UI 功能,而无需实际使用多值字段。这对我来说似乎具有挑战性。

我能想到的最接近的方法是使用“列表”选项和复选框字段加载断开连接的记录集。然后根据您在数据表视图中显示的记录集创建一个表单或子表单。它可能看起来类似于绑定到多值字段的组合。在复选框字段的更新后事件中,您需要根据需要在联结表中添加或删除记录的代码。

但是,我不知道这是否是您想要解决的问题。之前您表示愿意在需要时学习 SQL;我建议的方法也需要 VBA。不妨看看 Danny Lesandrini 的文章Create In-Memory ADO Recordsets,看看它是否可以使用。

OTOH,也许最适合您的答案是保留多值字段并继续您的余生。我被困住了。但是现在我们知道您实际上正在使用多值字段,也许其他人可以为您提供更合适的建议。

于 2010-05-08T14:14:31.453 回答