多值数据库(UniVerse) - SM(MV)vs SM(VS)和ASSOC()

时间:2010-01-07 19:22:08

标签: database u2 universe multivalue-database pick

我从IBM's Nested Relational Database White Paper的第16页提出了一个问题,我很困惑为什么在下面的CREATE命令中他们使用MV / MS / MS而不是MV / MV / MS,两者都是{ {1}}和ORDER_#一对多关系。我不明白在非1nf数据库设计中,vs子值意味着什么值。我也想知道更多关于PART_#条款的信息。

IBM嵌套关系数据库白皮书第16页(轻微的空白修改)

ASSOC ()

IBM嵌套关系数据库将嵌套表实现为重复属性和 重复关联的属性组。 SM子句指定属性是重复(多值 - “MV”)还是重复组(多子值 - “MS”)。 ASSOC子句关联嵌套表中的属性。如果需要,IBM嵌套关系数据库可以支持基表中的多个嵌套表。需要以下标准SQL语句来处理图5的1NF表,以生成如图6所示的报告:

    CREATE TABLE NESTED_TABLE (
      CUST# CHAR (9) DISP ("Customer #),
      CUST_NAME CHAR (40) DISP ("Customer Name"),
      ORDER_# NUMBER (6) DISP ("Order #") SM ("MV") ASSOC ("ORDERS"),
      PART_# NUMBER (6) DISP (Part #") SM ("MS") ASSOC ("ORDERS"),
      QTY NUMBER (3) DISP ("Qty.") SM ("MS") ASSOC ("ORDERS")
    );

2 个答案:

答案 0 :(得分:1)

我会继续回答我自己的问题,同时追求IBM's UniVerse SQL Administration for DBAs我在第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_NO, BADGE_NO, ANIMAL_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%肯定我是对的,但我猜测顺序无关紧要,而不是这些是不及物的关联,它们只是一个对顺序不敏感的分组。

冠!关于MSMV的问题的第二部分,我对于我的生活无法弄清楚IBM从何处获得这种语法。我相信这是虚构的。我无法访问我可以使用的开发机器来测试它,但我在旧的10.1或新的UniVerse 10.3 SQL Reference

中找不到它(术语MV) 对于那些不习惯UniVerse的人来说,

旁注 5R5L意味着左右对齐5个字符。这是表元数据中内置的显示功能... Google for UniVerse FORMAT(或FMT)获取更多信息。

答案 1 :(得分:1)

您知道,Attribute,Multivalue和Sub-Multivalue来自他们构建数据的方式。

基本上,所有数据都存储在各种树中。 UniVerse是一个多值数据库。通常,它不像SQL工作函数的关系数据库那样工作。

每条记录都可以有多个属性。

每个属性都可以包含多个多值。

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

所以,如果我有一个名为FRED的记录

然后,FRED< 1,2,3>指第一个属性,2个多值位置和3个子值位置。

要了解有关它的更多信息,您需要了解有关UniVerse如何工作的更多信息。 SQL部分只是它的一部分。我建议你阅读其他手册以了解你正在使用的是什么。

修改

基本上,上面的代码告诉你:

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

每个订单可以 多个部分。它们存储在“表”中的MS级别

每个订单可能多个qtys。它们存储在“表”中的MS级别。因为它们处于同一水平,虽然它们的订单是1-n,但就零件来说它们是1-1。