我有一个问题来自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