多值数据库 (UniVerse) -- SM (MV) 与 SM (VS) 和 ASSOC()
我有一个来自 IBM 的嵌套关系的第 16 页的问题数据库白皮书,我很困惑为什么在下面的CREATE
命令中他们使用MV/MS/MS而不是MV/MV/MS,当两者ORDER_#
和 PART_#
是一对多关系。我不明白值和子值在非 1nf 数据库设计中意味着什么。我还想了解有关 ASSOC ()
子句的更多信息。
IBM 嵌套关系数据库白皮书第 16 页(略有空格修改)
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")
);
IBM 嵌套关系数据库将嵌套表实现为重复属性和 重复关联的属性组。 SM 子句指定该属性是重复(多值 - “MV”)或重复组(多子值 - “MS”)。 ASSOC 子句将嵌套表中的属性关联起来。如果需要,IBM 嵌套关系数据库可以支持基表中的多个嵌套表。需要使用以下标准 SQL 语句来处理图 5 的 1NF 表以生成图 6 所示的报告:
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
I have a question taken from pg 16 of IBM's Nested Relational Database White Paper, I'm confused why in the below CREATE
command they use MV/MS/MS rather than MV/MV/MS, when both ORDER_#
, and PART_#
are one-to-many relationships.. I don't understand what value, vs sub-value means in non-1nf database design. I'd also like to know to know more about the ASSOC ()
clause.
Pg 16 of IBM's Nested Relational Database White Paper (slight whitespace modifications)
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")
);
The IBM nested relational databases implement nested tables as repeating attributes and
repeating groups of attributes that are associated. The SM clauses specify that the attribute is either repeating (multivalued--"MV") or a repeating group (multi-subvalued--"MS"). The ASSOC clause associates the attributes within a nested table. If desired, the IBM nested relational databases can support several nested tables within a base table. The following standard SQL statement would be required to process the 1NF tables of Figure 5 to produce the report shown in Figure 6:
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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我将继续回答我自己的问题,同时追求 IBM 针对 DBA 的 UniVerse SQL 管理 我在第 55 页遇到了
CREATE TABLE
代码。(请参阅令人分心的
>旁注下面)一开始这让我很有趣,但本质上我相信这是一个列指令,与
PRIMARY ( ACT_NO, BADGE_NO, ANIMAL_ID )
稍后页面中的 5-19,我看到了这个,这让我相信在列上附加
ASSOC (VAC_ASSOC)
是一样的......就像这样无论如何,我不是 100% 确定我是是的,但我猜顺序并不重要,而且这些不是不及物关联,而是对顺序不敏感的分组。
向前!对于与
MS
和MV
相关的问题的第二部分,我一生都无法弄清楚 IBM 到底从哪里得到这个语法。我相信这是想象出来的。我无法访问可以用来测试这一点的开发机器,但我在旧的 10.1 或新的 UniVerse 10.3 SQL 参考旁注给那些不习惯 UniVerse
5R 和
5L
表示右对齐或左对齐 5 个字符。这就是表元数据中内置的显示功能...Google 搜索 UniVerse FORMAT(或 FMT)以获取更多信息。I'll go ahead and answer my own question, while pursuing IBM's UniVerse SQL Administration for DBAs I came across code for
CREATE TABLE
on pg 55.(see distracting side note below) This amused me at first, but essentially I believe this to be a column directive the same as a table directive like
PRIMARY ( ACT_NO, BADGE_NO, ANIMAL_ID )
Later on page 5-19, I saw this
Which leads me to believe that tacking on
ASSOC (VAC_ASSOC)
to a column would be the same... like thisAnyway, I'm not 100% sure I'm right, but I'm guessing the order doesn't matter, and that rather than these being an intransitive association they're just a order-insensitive grouping.
Onward! With the second part of the question pertaining to
MS
andMV
, I for the life of me can not figure out where the hell IBM got this syntax from. I believe it to be imaginary. I don't have access to a dev machine I can play on to test this out, but I can't find it (the term MV) in the old 10.1 or the new UniVerse 10.3 SQL Referenceside note for those not used to UniVerse the
5R
and5L
mean 5 characters right or left justified. That's right a display feature built into the table meta data... Google for UniVerse FORMAT (or FMT) for more info.如您所知,属性、多值和子多值来自它们构建数据的方式。
本质上,所有数据都存储在排序树中。
UniVerse 是一个多值数据库。一般来说,它不像关系型数据库的SQL工作功能那样工作。
每条记录可以有多个属性。
每个属性可以有多个多值。
每个多值可以有多个子多值。
因此,如果我有一条名为 FRED 的记录
,则 FRED<1,2,3>指的是第 1 个属性、2 个多值位置和 3 个子值位置。
要了解更多信息,您需要了解有关 UniVerse 工作原理的更多信息。 SQL部分只是它的一个侧面部分。我建议您阅读其他手册以了解您正在使用的内容。
编辑
本质上,上面的代码告诉您:
每个客户可能有多个订单。这些以 MV 级别存储在“表”中。
每个订单可能有多个部件。这些存储在 MS 级别的“表”中。
每个订单可能有多个数量。这些信息存储在 MS 级别的“表”中。由于是同一级别,虽然订单上是1-n,但零件上却是1-1。
Just so you know, Attribute, Multivalue and Sub-Multivalue comes from the way they structure their data.
Essentially, all data is stored in a tree of sorts.
UniVerse is a Multivalue Database. Generally, it does not work in the say way as Relational DBs of the SQL work function.
Each record can have multiple attributes.
Each attribute can have multiple multivalues.
Each multivalue can have multiple sub-multivalues.
So, if I have a record called FRED
Then, FRED<1,2,3> refers to the 1st attribute, 2 multivalue position and 3 subvalue position.
To read more about it, you need to learn more about how UniVerse works. The SQL section is just a side part of it. I suggest you read the other manuals to understand what you are working with.
EDIT
Essentially, the code above is telling you that:
There may be multiple orders per client. These are stored at an MV level in the 'table'
There may be multiple parts per order. These are stored at the MS level in the 'table'
There may be multiple qtys per order. These are stored at the MS level in the 'table'. since they are at the same level, although they are 1-n for orders, they are 1-1 in regards to parts.