Database 多值数据库(宇宙)——SM(MV)与SM(vs)和ASSOC()

Database 多值数据库(宇宙)——SM(MV)与SM(vs)和ASSOC(),database,u2,universe,multivalue-database,pick,Database,U2,Universe,Multivalue Database,Pick,我有一个来自第16页的问题,我很困惑为什么在下面的CREATE命令中他们使用MV/MS/MS而不是MV/MV/MS,而ORDER#和PART#都是一对多关系。。我不明白在非1nf数据库设计中,值vs子值意味着什么。我还想知道更多关于ASSOC()子句的信息 IBM嵌套关系数据库白皮书第16页(略微修改空格) IBM嵌套关系数据库将嵌套表实现为重复属性和 重复关联的属性组。SM子句指定属性为重复(多值--“MV”)或重复组(多子值--“MS”)。ASSOC子句将嵌套表中的属性关联起来。如果需要,I

我有一个来自第16页的问题,我很困惑为什么在下面的
CREATE
命令中他们使用MV/MS/MS而不是MV/MV/MS,而
ORDER#
PART#
都是一对多关系。。我不明白在非1nf数据库设计中,值vs子值意味着什么。我还想知道更多关于
ASSOC()
子句的信息

IBM嵌套关系数据库白皮书第16页(略微修改空格) IBM嵌套关系数据库将嵌套表实现为重复属性和 重复关联的属性组。SM子句指定属性为重复(多值--“MV”)或重复组(多子值--“MS”)。ASSOC子句将嵌套表中的属性关联起来。如果需要,IBM嵌套关系数据库可以在一个基表中支持多个嵌套表。处理图5的1NF表以生成图6所示的报告需要以下标准SQL语句:

    SELECT CUSTOMER_TABLE.CUST#, CUST_NAME, ORDER_TABLE.ORDER_#, PART_#, QTY
    FROM CUSTOMER_TABLE, ORDER_TABLE, ORDER_CUST
    WHERE CUSTOMER_TABLE.CUST_# = ORDER_CUST.CUST_# AND ORDER_CUST.ORDER_# =
    ORDER _TABLE.ORDER_#;

                                       Nested Table
                Customer #       Customer Name Order #        Part #   Qty.
                AA2340987        Zedco, Inc.      93-1123     037617   81
                                                              053135   36
                                                  93-1154     063364   32
                                                              087905   39
                GV1203948        Alphabravo       93-2321     006776   72
                                                              055622   81
                                                              067587   29
                MT1238979        Trisoar          93-2342     005449   33
                                                              036893   52
                                                              06525    29
                                                  93-4596     090643   33

我将继续回答我自己的问题,在继续学习的过程中,我在第55页遇到了
CREATE TABLE
的代码

ACT_NO INTEGER FORMAT '5R' PRIMARY KEY
BADGE_NO INTEGER FORMAT '5R' PRIMARY KEY
ANIMAL_ID INTEGER FORMAT '5L' PRIMARY KEY
(请参阅下面分散注意力的旁注)起初这让我很开心,但本质上我认为这是一个列指令,与表指令相同,如
PRIMARY(ACT\u NO,BADGE\u NO,ANIMAL\u ID)

后来在第5-19页,我看到了这个

ALTER TABLE LIVESTOCK.T ADD ASSOC VAC_ASSOC (
    VAC_TYPE KEY, VAC_DATE, VAC_NEXT, VAC_CERT
);
这让我相信,将
ASSOC(VAC_ASSOC)
附加到列上也是一样的。。。像这样

CREATE TABLE LIVESTOCK.T (
    VAC_TYPE ... ASSOC ("VAC_ASSOC")
    VAC_DATE ... ASSOC ("VAC_ASSOC")
    VAC_NEXT ... ASSOC ("VAC_ASSOC")
    VAC_cERT ... ASSOC ("VAC_ASSOC")
);
无论如何,我不是100%确定我是对的,但我猜顺序并不重要,它们不是一个不及物关联,而是一个顺序不敏感的分组

向前!问题的第二部分是关于
MS
MV
的,我一辈子都搞不清楚IBM从哪里得到了这种语法。我相信这是虚构的。我没有权限使用开发机器来测试这一点,但在旧的10.1或新的10.1中找不到它(术语MV)


旁注:对于那些不习惯于将
5R
5L
进行全局化的人,其右对齐或左对齐的字符数为5个。没错,表元数据中内置了一个显示功能。。。Google for UniVerse FORMAT(或FMT)获取更多信息。

正如您所知,属性、多值和次多值都来自于它们构造数据的方式

本质上,所有数据都存储在一个排序树中。 UniVerse是一个多值数据库。一般来说,它不像SQL work函数的关系数据库那样工作

每个记录可以有多个属性

每个属性可以有多个多值

每个多值可以有多个子多值

如果我有一张叫弗雷德的唱片

然后,FRED表示第1个属性、2个多值位置和3个子值位置

要想了解更多,你需要更多地了解宇宙是如何运作的。SQL部分只是它的一部分。我建议您阅读其他手册,以了解您的工作内容

编辑

本质上,上面的代码告诉您:

每个客户可能有多个订单。这些存储在“表”中的MV级

每个订单可能有多个零件。这些数据以MS级别存储在“表”中


每个订单可能有多个QTY。这些数据以MS级别存储在“表”中。由于它们处于同一级别,虽然订单为1-n,但零件为1-1。

我承认理解此代码有困难,但我想我已经不知道为什么它被标记为“SM”:pI有您刚才在问题中粘贴的定义。。显然,这些定义不足以让我很好地理解。而且,对于这个问题,我也在文档中寻找答案——文档是问题的来源。那么,让我们重申一下这个问题:一份订单可以有两个零件,但每个零件只能有一个数量?那么为什么part
MS
?是的,这意味着MS总是连接到MV,并且每个关联大概只能有一个MV?而且,你永远无法获得子值?你可以有多个MV,每个MV都有自己的MSs。MS只能有一个父MV。是的,U2只直接支持3个级别。但是,例如,您可以将每个MS作为链接到其他记录属性的键(这些记录属性都可以有自己的MVs和MS)。我希望我没有失去你!在这些小评论框中很难清晰地思考:)关联的顺序是当您发布列表foo assoc_name时它将显示的顺序。assoc_名称作为短语存储在DICT foo中。
CREATE TABLE LIVESTOCK.T (
    VAC_TYPE ... ASSOC ("VAC_ASSOC")
    VAC_DATE ... ASSOC ("VAC_ASSOC")
    VAC_NEXT ... ASSOC ("VAC_ASSOC")
    VAC_cERT ... ASSOC ("VAC_ASSOC")
);