我最近接触到了新的Access 2007功能,即多值字段。我的初步印象是,在单个字段中使用多个值是一个不好的想法。传统上,如果您想允许记录在一个字段中具有多个值,则需要创建另外两个表并使用外键将它们链接起来。这样可以轻松查询,并确保重复的值引用相同的项目。在单元格中保留列表似乎违反了数据库的目的。
是否有适合这些字段的好用途,而不让我感到不舒服?
我最近接触到了新的Access 2007功能,即多值字段。我的初步印象是,在单个字段中使用多个值是一个不好的想法。传统上,如果您想允许记录在一个字段中具有多个值,则需要创建另外两个表并使用外键将它们链接起来。这样可以轻松查询,并确保重复的值引用相同的项目。在单元格中保留列表似乎违反了数据库的目的。
是否有适合这些字段的好用途,而不让我感到不舒服?
请参见:
多值数据类型被认为是有害的:一种数据类型可以有多大的危险性?
我和Access程序经理Suraj Poozhiyil进行了长时间的交谈...... Suraj和我都完全同意开发人员不需要使用多值字段。已经了解数据库的人们已经有了很好的实现多对多关系的方法,他们不会从多值字段中获得任何好处。
因此,我的明确而确定的建议是,开发人员不要使用多值字段。除了潜在的痛苦之外,它们没有提供任何好处。
Access市场的一个大部分是非开发人员,但有一定技术水平的用户。他们可能不理解归一化的价值,但可以使某些功能正常工作。他们只需要简单易用的东西,而这比自由文本字段更好,因为在自由文本字段中,人们输入的内容是希望他们都输入相同的内容。
随着他们了解得更多,他们可能开始使用其他表和外键。但是,有时候多值字段就足够了。
死后发帖...我认为当线程刚开始时,问题应该被修改,但我现在不会经历编辑过程。
问题是“多值字段是个好主意吗?”
真正应该问的问题是“关系数据库管理系统中的多值字段是一个好主意吗?”
正如其他人所指出的,有一个支持多值字段的整个MVDBMS模型。我是这个领域的专家,已经使用这个模型工作了30多年。当然,在我看来,对于每天使用这个平台的其他人来说,这是一个好主意。而且,Caché不仅有一个很棒的多维模型,而且还支持MVDBMS模型。所以在这方面,问题的答案是YES。
但对于RDBMS,特别是MS ACCESS,答案几乎肯定是否定的,因为RDBMS模型和该平台本身都不支持这个概念。
我认为被接受的答案是正确的,因为它不仅回答了提出的问题,还回答了原本想要问的问题。但是要一丝不苟地说,针对确切的问题,被接受的答案是不正确的。
我相信真正的答案是“只有DBMS平台支持它才是个好主意,MVDBMS和其他NoSQL平台是YES,RDBMS则是NO。”
坚决说不!
如果你正在学习SQL,就要学习正确的方法并规范你的表格。如果你懂得数据库设计,就要做好它。不是每个功能都必须被使用。
我真的不喜欢多值字段。也许他们这样做是为了更容易地与其他多值系统(如旧的PICK/Unidata系统)进行接口。我敢打赌,将使用此新功能频繁的Access数据库升级到SQL Server一定很有趣。