真正的 TL;DR 是添加一个名为“@”的“PH”类型的字典项,并将所需的列放在那里。如果您想使用“SELECT *”,您还需要一个“@SELECT”条目。请注意,多值和单值字段在这里可能无法很好地发挥作用,因为它们应该被视为单独的表。查看标题为“UniVerse 文件和 SQL”的 UniVerse 文档“DBA 的 SQL 管理”的第 6 章,以深入了解这一点。
诸如 UniVerse 之类的 Pick 风格数据结构是原始的 NOSQL,因为它们存在于以前 ANSI SQL 还不是标准并且存储元数据的空间价格非常非常高的时候。
从 UniVerse 中执行 SQL 是很棘手的,因为 SQL 中的数据类型是明确定义的,而 Universe 中的数据和字典是独立的结构,它们是独立存储的,有时甚至是相互独立使用的。当您阅读或写作时,您可以使用字典作为一种键来确定您正在使用的数据类型,但没有什么说您必须这样做。此外,查询语言允许您随时更改您正在使用的字典,并且不符合字典结构的数据只会以意想不到的方式显示,而不是爆炸性地爆炸。这可能令人难以置信的自由或导致疯狂,但这是另一个话题。
为了使 UniVerse 与 SQL 配合得很好,您必须以这样一种方式定义 Dictionary 以使其与数据的底层结构挂钩。当您从 Universe 读取一条记录时,您实际上是在读取一个完整的数据集,其中包含 1 个或多个表嵌套最多 3 层。对于您的情况,我会将您要访问的所有“D”和“I”类型字段放入字典的“@”PH 记录中。在“@”中,它们是否是多值的并不重要。这将使这些字段可用于 SQL 引用,但根据您的字典,您仍然可能会遇到数据问题。
如果你想做“SELECT * FROM foo;” 您需要有一个“@SELECT”语句,它是“@”记录的子集,仅包含单值字段。您需要为每个包含相关字段的多值关联创建 PH 记录,然后加入以获得一个统一的查询。请记住,即使使用所有这些 SQL,在 TCL 提示符下的响应与通过 ODBC 输出的响应不同。
这是一个简单的例子。NAME 和 EMAIL 是单值的,DATE 和 AMOUNT 是多值的。
@
PH
NAME EMAIL DATE AMOUNT
@SELECT
PH
NAME EMAIL
ORDERS
PH
DATE AMOUNT
祝你好运!