3

我的学生在访问中使用多值字段时遇到问题,因此对规范化感到困惑。

这是我能弄明白的。给定一对多的关系,例如

Articles    Comments
--------    --------
artID{PK}   commID{PK}
text        text
            artID{FK}

Access 可以将此信息存储到一个表中,例如

Articles
--------
artID{PK}
text
comment
   + value

“value”指的是评论“column”的多个评论值,它实际上存储为单独的表。值如何存储的细节 - 表,它的 PK 和 FK - 是完全隐藏的,但是可以查询多值字段,例如在上面的示例中使用查询

INSERT INTO article( [comment].Value )
VALUES ('thank you')
WHERE artID = 1;

但是查询并没有完全揭示实现多值字段的隐藏表的底层结构。

鉴于此(在我看来是灾难) - 我的问题是如何帮助数据库设计和规范化的新手了解 Access 为他们提供了什么,为什么它可能没有帮助,并且这不是忽略关系基础知识的理由模型。进一步来说:

  • 除了上述查询之外,还有更好的方法来揭示多值字段背后的结构吗?
  • 有没有很好的例子说明多值字段不够好,并显示了明确规范化的优势?
  • 是否有直接的方法来获得 Access 多值的多选视觉输出,但基于单独的显式表?

谢谢!

4

6 回答 6

4

我不能给你使用这个功能的建议,因为我从来没有使用过它;但是,我可以给你不使用它的理由。

  • 我想完全控制我正在做的事情。多值字段不是这种情况,因此我不使用它们。

  • 此功能不可扩展。例如,如果您想在评论中添加日期字段怎么办?

  • 有时需要将 Access(后端)数据库升级为“大”数据库(SQL Server、Oracle)。这些数据库不提供这样的功能。通常由客户决定必须使用哪个数据库。最近,我不得不将使用 Oracle 后端的 Access 应用程序(前端)迁移到 SQL-Server 后端,因为我的客户决定放弃他的 Oracle 服务器。因此,最好限制自己仅使用常用功能。

  • 对于编辑查找表等常见任务,我创建了通用表单。我现有的解决方案不适用于多值字段。

  • 我有一个(自制)工具,可以将开发人员站点上的数据库结构更改与客户站点上的数据库同步。此工具无法处理多值字段。

  • 我有用于安全管理的工具,可以授予对表的 SELECT、INSERT、UPDATE 和 DELETE 权限或撤销它们。同样,管理工具不适用于多值字段。

  • 有一个单独的评论表格可以让您快速检查所有评论(通过打开表格)。您不能对多值字段执行此操作。

  • 您不会在数据库图中看到文章和评论之间的一对一关系。

  • 使用单独的表,您可以选择是否要将删除级联到详细信息表。如果你不这样做,你将无法删除一篇文章,只要它附有评论。如果您想保护评论不被无意删除,这可能是可取的。

于 2013-01-20T17:12:14.680 回答
2

认识到物理关系和逻辑关系之间的区别很重要。今天,整个 Internet 和 Web 服务 (SOAP) 在很大程度上实现了一种本质上是多值的数据格式。

当您使用关系数据库(例如 Access)表示多值数据时,您在幕后使用的是传统的(且合法的)关系。我不能强调这样,那么在 Access 中使用多值列实际上是一个合法的关系模型。

表没有暴露的事实并不能否定这个问题。事实上,如果您将发票(主记录和重复详细信息)表示为 XML 数据立方体,那么我们会看到两件事:

1) 您可以使用 Access 等关系数据库构建和表示该发票 2) 这种标准化的关系数据模型也可以表示为单个 xml 字符串。3) 删除 XML 记录(或字符串)意味着子行(发票详细信息)的级联删除必须发生。

因此,虽然确实将多值字段添加到 Access 以处理 SharePoint,但最重要的是要意识到可以将此类数据映射到关系数据库(如果您不能这样做,那么 Access 将无法使用该 XML使用关系数据库表作为 ACCESS CURRENTLY DOES RIGHT NOW 的数据)。

对于 XML 和 SharePoint 等网络,消费、管理和利用此类数据的需求不仅普遍存在,而且实际上是 Internet 的基本内容。

随着越来越多的数据变得复杂,我们发现多值数据在使用中的需求呈爆炸式增长。因此,任何使用所谓的“时尚”互联网的人都在依赖和使用实际上是非常常见的 XML 并且本质上是多值(复杂)的数据。

只要保留逻辑(非物理)关系数据模型,就可以使用多值列来表示此类数据,这正是 Access 正在做的事情(它将关系数据模型映射到复杂模型)。请注意,复杂 (xml) 数据模型本质上不一定是关系模型。但是,如果您要将此类数据映射到 Access,则复杂的多值模型必须符合关系数据模型。

这正是 Access 中发生的事情。

没有公开这样一个正确和合法的数学关系模型这一事实在这里没有什么问题。我们是否建议因为 Excel 不公开使用的二进制代码,所以用户永远不会了解计算机?或者也许我们都必须用汇编程序进行编程,这样我们才能正确地学习计算机的工作原理。

归根结底,谁在乎,为什么这很重要?今天人们驾驶自动驾驶汽车这一事实并没有抛弃他们使用不同齿轮来操作汽车的概念。我们关闭整个社会的想法是因为有人要驾驶自动驾驶汽车,或者在这种情况下使用复杂的数据,这对我们来说是愚蠢的。

因此请记住,Access 中确实存在对 SQL 的扩展来查询多值数据,但这里也指出了这些基础表并未公开。但是,如前所述,公开此类表仍然需要一个不更改或混淆级联删除,因为需要该功能来维护复杂数据模型 (xml) 和使用两个相关表来表示这些数据。

换句话说,如果您取消了用户使用参照完整性选项的能力,您可以使用相关表来表示复杂的数据模型。RI 选项必须保持这些隐藏表中的设置,否则此类数据将无法返回到使用它的 XML 或复杂数据模型。

如前所述,关于用户被教导汽油如何与氧气反应以学习驾驶汽车,或使用文字处理器并被迫学习关系模型并公开基础表在这里没有什么意义。

然而,这里关于这些表被暴露的观点是合理的担忧。

真正的问题是 SQL 服务器和 Oracle 等无法使用或表示复杂数据,而访问可以使用此类数据。

如前所述,复杂的数据船早就启航了!XML、soap 和互联网的基本技术都是基于这种复杂的数据模型。

实际上,SQL Server、Oracle 和大多数数据库无法使用这种多值数据来表示它,而无需用户以关系方式创建和建模此类数据,这是 SQL Server 等的一大缺点。

Access 在使用这些数据的能力方面是独一无二的。

因此,对于使用智能手机、iPad 或网络的任何人,您都在使用围绕复杂数据构建的基本技术,而 Access 现在允许这样做。

鉴于越来越多的数据本质上是复杂的,该行业的其他公司很可能不得不效仿。如果数据库行业不发生变化,那么主流的传统关系数据库系统就不会成为这些数据的安息之地。

目前正在迅速发生一种远离将数据存储在相关表中的趋势,SharePoint 甚至 Google 文档等产品就是这一概念的证明。因此,Access 只是对市场压力做出反应,其他数据库供应商很可能不得不效仿或干脆放弃成为称为互联网的“时尚”的一部分。

XML 和复杂的数据结构现在是我们行业的主要内容和事实——这不是我们都应该逃避的问题,但实际上应该接受。

Albert D. Kallal (Access MVP)
Edmonton, Alberta Canada
kallal@msn.com
于 2013-01-21T01:35:48.000 回答
2

技术讨论很有趣。我认为真正的问题在于学生的理解。因为它在 Access 中可用,学生会使用它,并且最初它可能会为一些设计问题提供简单的解决方案。当他们尝试使用数据时,负面因素将在稍后发生。也许一个演示问题的简单示例会说服一些学生避免使用多值字段?也许以另一种更有用的格式存储数据的示例会有所帮助?

祝你好运 !

彼得布拉德

于 2013-01-21T10:06:37.700 回答
1

MS Access 在简化数据库管理和抽象出大量复杂性方面做得很好。然而,这使得 dbms 概念的学习有点困难。您是否尝试过使用其他“标准”dbms 工具,如 MySQL(甚至 sqlite)。从学习的角度来看,他们可能会更好。

于 2013-01-20T16:32:06.473 回答
0

我知道这篇文章很旧。但是,它与我在该主题上看到的所有其他帖子都不完全相同。这个有人为使用多值字段提供了一个很好的案例......

作为一个仍在努力尝试访问 Access 的人,我发现支持和反对使用多值字段的讨论非常令人沮丧。

我正在努力解决这一切,但如果每个人都反对他们,还有什么替代方法?似乎在每个搜索结果中,我发现每个人要么告诉你如何使用多值字段和控件,要么告诉你它们有多可怕和错误。许多人提到他们的替代品,但没有人说“这是一个例子”。我是来学习这些东西的。虽然我知道对于这些论坛中的很多人来说这是一个更简单的概念,但我真的可以用一些例子来看看。

我正处于必须决定走哪条路的地步。比较使用多值字段和替代项以及使用控件选择多个值的示例会很棒。

还是我错了,您可以选择多个项目的组合框的功能只能通过 Access 获得?

于 2015-03-03T17:59:38.220 回答
0

我想先解决你的最后一个问题。有一种方法可以提供父子关系的视觉呈现。它被称为子表单。如果您获得有关 Access 中的子表单的帮助,它将解释该概念。
我在一个项目中使用了子表单,我想在表单中显示事务标题,并在子表单中显示事务详细信息。即使数据存储在两个规范化表中,也没有什么可以阻碍这种结构。

当然,这会影响屏幕,而不是数据库。这就是重点。规范化与存储和检索有关,与数据的其他用途无关。

于 2017-12-20T15:46:15.773 回答