MS Access 07 - Q re lookup column vs many-to-many;以多对多形式重复复选框

时间:2010-05-07 16:41:42

标签: database ms-access many-to-many lookupfield

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

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

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

注意 - 我知道零SQL或VB。如果正确的答案是“你需要知道SQL的话”,那就太酷了。我只需要知道。

谢谢!

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

如果没有一些丑陋的编码,你无法计算每位教师分配的科目数。

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

答案 2 :(得分:1)

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

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

我毫不犹豫地提及它,但就完全披露而言,您应该知道在A2007和A2010中,您可以使用多值字段,并且它们与您描述的UI完全一致。但它们与查找字段有许多相同的问题,并且在代码中使用起来相当复杂。在幕后,它们是使用标准的多对多连接表实现的,但它们都是隐藏的。

我希望MS使用复选框控件创建列表框,该控件与可用于所有列表框的MV字段一起使用,但如果列表框控件不是为那个设计的那样,那么将它绑定到多对多连接表会很复杂(带有例如,链接子/链接主属性。

答案 3 :(得分:0)

我试图想出一种方法,在不实际使用多值字段的情况下为您提供您喜欢的多值字段的UI功能。这对我来说似乎很难。

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

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

OTOH,也许对你来说最合适的答案就是保持多值领域并继续你的余生。我被卡住了。但是现在我们知道你实际上在使用多值字段,也许别人可以为你提供更合适的建议。