1

我已经用 PICK 编程了几个月,并且仍在调整以考虑仅使用多值数组的编程解决方案。PICK 本身并不为数据库或内存中的操作提供任何其他数据结构* (为了论证,忽略维度数组,因为它们仍然是一种“数组”)

模仿其他数据结构有哪些创造性的方法?我可以想象实现散列/字典或链表的方法,使用数组和例程来操作它们。这里的一个问题是它会很快变得复杂,因为数据结构的接口在概念上不能被简化为一个对象。

是否有任何易于实现的算法,人们用来创建独特的数据结构?


我的系统:我正在 PICK 中为 Epicor Eclipse 的附加组件编写例程,它位于 UniVerse 之上。我知道 UniVerse 有一个 C# 接口,但它们不适用于我的大部分工作。

4

2 回答 2

1

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 类型。

于 2015-05-11T17:19:36.947 回答
1

我需要更多地了解您正在尝试做什么,但还有其他数据类型。

如果您想将其他语言与其他数据结构一起使用,请查看 U2 Common Clients。

但是,如果您正在考虑在 UniVerse 中进行服务器端开发,请访问 Rocket Software 网站,并获取“Rocket UniVerse Basic Extensions”手册:第 10 章:U2 动态对象第 8 章:XML 文档和 UniVerse 文件之间的数据传输。

您可能还想查看“Rocket UniVerse GCI 指南”“通用调用接口 (GCI) 充当从 UniVerse BASIC 到外部子例程的网关。GCI 通过参数和数组在子例程之间传递数据。”

http://docs.rocketsoftware.com/nxt/gateway.dll?f=templates $fn=default.htm

最后,虽然它仍处于 Beta 阶段,但您可能感兴趣的是使用 Python 和 BASIC 进行 MultiValue 开发。我在 10 月份的 CMUG(科罗拉多多值用户组)会议上介绍了这个。

https://vimeo.com/109520035

迈克·拉科夫斯基

火箭软件

于 2015-05-14T15:17:54.540 回答