sql - 规范化和多值字段

标签 sql ms-access database-design

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

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

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

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

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

“value”指的是comment“column”的多个comment value,access实际上存储为一个单独的表。值如何存储的细节 - 表,它的 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 权限。同样,管理工具不适用于多值字段。

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

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

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

关于sql - 规范化和多值字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14425165/

相关文章:

variables - 如何使用 VBA 遍历 MS Access 记录集并将变量分配给结果?

c# - 处理大型数据库的最佳方式?

mysql - 版本化每个字段与历史日期字段?

php - MySQL、SQL、PHP 我可以从由第三个连接的两个表中获取数据吗

ms-access - 将Excel文件导入Access表运行时错误 '-2147352565 (8002000b)'

mysql - 为什么我的子查询无法访问外部查询中的列

SQL : Create a full record from 2 tables

mysql - InnoDB 一对一(或无)关系问题

sql - SQL 中的子查询和连接

sql - Oracle CASE 表达式文档问题