【问题标题】:Does Microsoft Access 2003 contain sets or multisets?Microsoft Access 2003 是否包含集合或多集合?
【发布时间】:2009-11-11 18:12:07
【问题描述】:

我正在尝试确认或否认您是否可以将 MS Access 2003 中的表列定义为集合。似乎这个 在 Office 2007 中实现的 - 您可以定义一个列以在查询/查找中具有“多选列表”,但此功能似乎是新的 access 2007 文件格式所独有的据我所知。

换个说法,MS Access 2003 是否有相当于 SQL 语句的功能:

CREATE TABLE mytable (foo VARCHAR(10), bar VARCHAR(5) MULTISET); 

或者是否有一个聪明的解决方法来实现类似的东西?我会接受提供有关 Access 2003 中任何集合构造函数的信息的答案。

【问题讨论】:

    标签: ms-access database-design set ms-access-2003


    【解决方案1】:

    您指的是 Access 数据库引擎的 multivalued data types 吗?如果是这样,那么是的,这些是 ACE (2007) 版本引擎的新功能,并且在作为 Access2003 版本引擎的 Jet 4.0 中不可用。

    FWIW 我在 Access2007 中使用 ANSI-92 查询模式(OLE DB,引擎类型 = 5)尝试了您的 SQL,但无法识别 MULTISET 关键字。

    请注意,您可能不需要也不想要多值类型。一个特别的批评是 Access Database SQL DML 表达式服务没有被改变以考虑多值类型。另外,请看这篇文章Multivalued datatypes considered harmful

    两个 Suraj [Poozhiyil,MS Access 项目经理],我同意 全心全意地认为开发人员不会 需要使用多值字段。 懂数据库的人 已经有好办法了 实施多对多 关系,不会获得任何好处 来自多值字段。

    所以,我的明确而肯定的建议是 开发人员不要使用多值 字段。他们没有什么可以提供给我们的 除了潜在的疼痛。

    更新:

    MULTISET 是一个正式的新数据类型 从 SQL:2003 开始​​,所以我 猜测添加的部分原因 它在 Access 2007 中是完全 符合 SQL 标准

    这几乎很有趣。 Access 团队没有表现出对添加符合任何 SQL 标准的 SQL 语法的兴趣。

    [当 SQL Server 团队为其 4.0 版本修改 Jet 时,他们希望获得 SQL-92 合规性,但被 Windows 团队阻止,因为他们的组件依赖于一些仍然不合规的功能......但那是另一个故事。访问团队拥有自己的代码库私人人员,因此他们没有这样的借口……除非 SharePoint 团队现在有不当影响?我跑题了……]

    考虑一下关于 SQL2003 标准的文档中的这句话:

    MULTISET 类型的值可以是 通过枚举创建 单个元素或通过提供 通过查询的元素 表达;例如,

    MULTISET[1, 2, 3, 4]

    MULTISET( SELECT grades FROM courses )

    ...相反,多重集值可以是 在FROM 中用作表参考 使用UNNEST 运算符的子句。

    访问团队没有向 ACE SQL DML 语法添加任何新表达式或任何运算符。所以,不,这与 SQL 标准无关,与 SharePoint 无关。

    David W. Fenton:不,[支持 多值类型] 被添加到 ACCDB 格式(不是 ACE,如 @onedaywhen 说...)

    考虑一下the Access Team's own blog的这句话:

    我们添加到新的主要功能 访问引擎支持“复杂 数据”。

    这绝对是一个引擎功能!

    【讨论】:

    • 多值字段...我同意你的说法,这是一个奇怪的想法!我什至无法理解为什么它是在 Access 2007 中实现的。在处理关系数据库时,这绝对是一个误导和令人困惑的概念
    • 实际上我们的开发人员类型就像接管一个使用多值的用户创建的解决方案。这称为计费时间。
    • 是的,多值数据类型正是我在 Access 2007 中使用的。仅供参考,MULTISET 是一种新的数据类型,正式以 SQL:2003 sigmod.org/record/issues/0403/E.JimAndrew-standard.pdf 开头 - 所以我猜测部分在 Access 2007 中添加它的原因是完全符合 SQL 标准。它在 Oracle 中已经存在了一段时间(这是我的例子的来源) - 抱歉应该提到这一点。我之前使用过 MULTISETS 将表格设置为位掩码。非常方便。
    • 不,它是以 ACCDB 格式添加的(不是 ACE,正如 @onedaywhen 所说——这是一个特定于文件格式的功能,而不是数据库引擎功能)以与 Sharepoint 兼容。添加了 A2007 中的所有新字段类型以实现 Sharepoint 兼容性。 A2010 中的大多数很酷的新功能都是为了与 Sharepoint 兼容。我似乎注意到了一种模式......
    • @David W. Fenton:他们如何在不更改引擎的情况下将此功能添加到“文件格式”?!
    猜你喜欢
    • 2013-04-20
    • 2017-06-04
    • 2011-07-12
    • 1970-01-01
    • 2015-01-30
    • 1970-01-01
    • 2022-01-04
    • 2017-03-26
    相关资源
    最近更新 更多