Microsoft Access 2003是否包含集或多集?

时间:2009-11-11 18:12:07

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

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

另一方面,MS Access 2003是否具有与SQL语句等效的内容:

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

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

1 个答案:

答案 0 :(得分:4)

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

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

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

  

Suraj [Poozhiyil,MS Access   项目经理],我同意   全心全意地说开发者不这样做   需要使用多值字段。   了解数据库的人   已经有了一个好方法   实施多对多   关系并没有任何好处   来自多值领域。

     

所以,我的明确和一定的建议   开发人员不要使用多值   领域。他们没有什么可以提供给我们   除了潜在的痛苦。

更新:

  

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

这几乎是有趣的。 Access Team对添加符合任何SQL标准的SQL语法没有兴趣。

[当SQL Server团队为其4.0版本修改Jet时,他们希望达到SQL-92合规性​​但是Windows团队阻止这样做,其组件依赖于某些功能仍然不合规......但这是另一个故事。 Access团队拥有自己的私有代码库,所以他们没有这样的借口......除非SharePoint团队现在有不正当的影响力?我离题了......]

从有关SQL2003标准的文档中考虑这个引用:

  

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

     

MULTISET[1, 2, 3, 4]

     

     

MULTISET(            SELECT grades              FROM courses           )

     

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

Access Team尚未向ACE SQL DML语法添加任何新表达式或任何运算符。所以,不,这与SQL标准无关,也与SharePoint有关。

  大卫W.芬顿:不,[支持   添加了多值类型]   ACCDB格式(不是ACE,如   @onedaywhen说...)

请考虑the Access Team's own blog中的这句话:

  

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

这绝对是一个引擎功能!