Pick/MultiValue DBMS 允许将多个值存储在单个字段中。
一个常见的示例是街道地址具有单个属性,其中 Street1、Street2 和可能 Street3 作为值。结构如下所示: 01 公司名称 02 Street1]Street2]Street3 03 City 04 State...
这些是相同类型的字段,但它们与其他任何内容无关。另一个类似的结构是具有多个值相关的属性。通常有一个控制属性和任意数量的依赖属性(atb 26 用作随机示例):
26 ShipDate]ShipDate]ShipDate
27 ShipQty]ShipQty]ShipQty
28 ShipVia]ShipVia]ShipVia
应用程序管理 RI,而不是数据库,尽管可以使用触发器来允许数据库强制执行 RI。
RDBMS 开发人员可能不喜欢使用这种结构,因此我们可以将传统的外键用于相关数据。在这种情况下,我们可能会在 Shipping 文件中看到一个带有记录键的属性:
26 1234*01]1234*02]1234*03
所以这些值中的每一个都是另一个文件的键。*00 值是应用程序维护的每个交付的顺序数字 ID。如果其中一个交付后来被标记为未确认,则可以在此处使用它们,因此可以删除该值,留下以下内容:
26 1234*02]1234*03
常见的 MVDBMS 平台允许 SubValues 多一层。这些是有保留地使用的,但它们可能非常有价值。考虑单个属性中的上述运输数据:
26 ShipDate\ShipQty\ShipVia ] ShipDate\ShipQty\ShipVia
第二批货物的 ShipVia 将在代码中引用为Item<26,2,3>
.
一些开发人员更喜欢使用非系统分隔符。只要不会在数据中找到任何东西都是有效的。您通常会看到星号、斜杠、竖线、逗号或其他一些字母数字:
26 ShipDate|ShipQty|ShipVia ] ShipDate|ShipQty|ShipVia
获取第二个 ShipVia 的代码可能是:
Field( Item<26,2> , "|" , 3 )
ShipVia 字段本身可能是表文件的外键,它只有键的 ID 和 atb1 中的 ShipperName。所以我们谈论的是用于两种文件的相同数据结构:事务数据和主要是静态表。它与关系数据库没有什么不同。
是的,您可以创建链接列表,例如,公司记录具有部门的单个属性。这转换为一个部门文件,其中有一个经理的属性。这转化为员工文件,其中为团队成员分配了一个属性。这些 ID 中的每一个也将转换为员工,其中一些员工也可能是拥有自己团队的经理。这种结构用于物料清单、个人拥有下线的多层次营销公司,或用于将风险分解给多个公司的保险,然后每个公司进一步分解风险。
因此,结构有很多多功能性。任何你可以用 RDBMS 或 Key/Value 结构做的事情都可以用 MV 来做。
该答案与您的问题的匹配程度如何?你还想看看其他什么样的例子?
关于对象,QM MVDBMS 确实具有 OO BASIC,并且 Caché DBMS 包括一个 MVDBMS 实现,其中 MV 数据可以作为对象公开。此外,使用 mv.NET 和其他工具,我们可以从字典定义(模式)生成强类型类,这允许与任何关系平台完全相同的 ORM 类型。