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

这就是我能做到的。给定一对多关系,例如

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


通过访问,可以将这些信息存储到一个表中,例如

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


“值”指的是注释“列”的多个注释值,该值实际上存储为单独的表。完全隐藏了如何存储值-表,其PK和FK-的细节,但是可以查询多值字段,例如在上面的查询示例中

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


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

考虑到这种情况(我认为是灾难),我的问题是如何帮助数据库设计和规范化的新手了解Access为他们提供了什么,为什么它可能无济于事,并且这不是忽略关系型基础知识的原因模型。进一步来说:


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


谢谢!

最佳答案

我无法给您使用该功能的建议,因为我从未使用过。但是,我可以为您提供不使用它的理由。


我想完全控制自己在做什么。多值字段不是这种情况,因此我不使用它们。
此功能不可扩展。例如,如果您想在评论中添加日期字段怎么办?
有时有必要将Access(后端)数据库升级为“大”数据库(SQL Server,Oracle)。这些数据库不提供这种功能。通常由客户决定必须使用哪个数据库。最近,我不得不使用Oracle后端将Access应用程序(前端)迁移到SQL-Server后端,因为我的客户端决定删除他的Oracle服务器。因此,最好限制自己仅使用通用功能。
对于诸如编辑查询表之类的常见任务,我创建了通用表单。我现有的解决方案不适用于多值字段。
我有一个(自制的)工具,可将开发人员网站上的数据库结构更改与客户网站上的数据库进行同步。该工具无法处理多值字段。
我有用于安全管理的工具,可以授予表上的SELECT,INSERT,UPDATE和DELETE权限或撤消它们。同样,管理工具不适用于多值字段。
拥有单独的注释表可让您快速检查所有注释(通过打开表)。您不能对多值字段执行此操作。
在数据库图中,您将看不到文章和注释之间的1对n关系。
使用单独的表,您可以选择是否要将删除操作级联到详细信息表。如果您不这样做,则只有在其附带评论的情况下,您才能删除该文章。如果要保护注释以免被无意删除,则这可能是理想的。

09-10 17:59