Base de datos multivalor (UniVerse): SM (MV) frente a SM (VS) y ASSOC()
-
19-09-2019 - |
Pregunta
Tengo una pregunta sacada de la pagina 16 de Informe técnico sobre bases de datos relacionales anidadas de IBM, estoy confundido por qué en el siguiente CREATE
comando utilizan MV/MS/MS en lugar de MV/MV/MS, cuando ambos ORDER_#
, y PART_#
son uno a muchos relaciones..No entiendo qué significa valor frente a subvalor en el diseño de bases de datos que no son 1nf.También me gustaría saber más sobre el ASSOC ()
cláusula.
Página 16 del documento técnico sobre bases de datos relacionales anidadas de IBM (ligeras modificaciones en los espacios en blanco)
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")
);
Las bases de datos relacionales anidadas de IBM implementan tablas anidadas como atributos repetidos y grupos repetidos de atributos asociados.Las cláusulas SM especifican que el atributo se repite (de múltiples valores: "MV") o de un grupo repetido (de múltiples subvalores: "MS").La cláusula ASSOC asocia los atributos dentro de una tabla anidada.Si lo desea, las bases de datos relacionales anidadas de IBM pueden admitir varias tablas anidadas dentro de una tabla base.Se necesitaría la siguiente instrucción SQL estándar para procesar las tablas 1NF de la Figura 5 y producir el informe que se muestra en la Figura 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
Solución
Seguiré adelante y responderé mi propia pregunta, mientras sigo Administración UniVerse SQL de IBM para DBA Encontré el código para CREATE TABLE
en la página 55.
ACT_NO INTEGER FORMAT '5R' PRIMARY KEY
BADGE_NO INTEGER FORMAT '5R' PRIMARY KEY
ANIMAL_ID INTEGER FORMAT '5L' PRIMARY KEY
(ver distraer nota al margen a continuación) Esto me divirtió al principio, pero esencialmente creo que se trata de una directiva de columna igual que una directiva de tabla como PRIMARY ( ACT_NO, BADGE_NO, ANIMAL_ID )
Más tarde en la página 5-19, vi esto
ALTER TABLE LIVESTOCK.T ADD ASSOC VAC_ASSOC (
VAC_TYPE KEY, VAC_DATE, VAC_NEXT, VAC_CERT
);
Lo que me lleva a creer que agregar ASSOC (VAC_ASSOC)
a una columna sería lo mismo...como esto
CREATE TABLE LIVESTOCK.T (
VAC_TYPE ... ASSOC ("VAC_ASSOC")
VAC_DATE ... ASSOC ("VAC_ASSOC")
VAC_NEXT ... ASSOC ("VAC_ASSOC")
VAC_cERT ... ASSOC ("VAC_ASSOC")
);
De todos modos, no estoy 100% seguro de tener razón, pero supongo que el orden no importa y que, en lugar de ser una asociación intransitiva, son simplemente una agrupación insensible al orden.
¡Adelante!Con la segunda parte de la pregunta relativa a MS
y MV
, Por mi vida, no puedo entender de dónde diablos sacó IBM esta sintaxis.Creo que es imaginario.No tengo acceso a una máquina de desarrollo en la que pueda jugar para probar esto, pero no puedo encontrarlo (el término MV) en la versión 10.1 anterior o en la nueva. Referencia de SQL de Universo 10.3
nota al margen Para aquellos que no están acostumbrados a UniVerse, 5R
y 5L
significa 5 caracteres justificados a la derecha o a la izquierda.Así es, una función de visualización integrada en los metadatos de la tabla...Busque en Google UniVerse FORMAT (o FMT) para obtener más información.
Otros consejos
Para que sepas, Atributo Valor múltiple y Sub-varios valores proviene de la forma de estructurar sus datos.
En esencia, todos los datos se almacenan en un árbol de clases. Universo es una base de datos de varios valores. En general, no funciona de la manera que decir en cuanto relacionales DBs de la función de trabajo de SQL.
Cada registro puede tener varios atributos.
Cada atributo puede tener múltiples valores múltiples.
Cada valores múltiples puede tener múltiples sub-múltiples valores.
Por lo tanto, si tengo un disco llamado FRED
A continuación, FRED <1,2,3> se refiere a la primera atributo, la posición 2 de valores múltiples y 3 posición subvalue.
Para leer mas sobre esto, usted necesita aprender más acerca de cómo funciona el universo. La sección de SQL es sólo una parte lateral de la misma. Le sugiero que lea los otros manuales para entender lo que está trabajando.
editar
En esencia, el código anterior le está diciendo que:
pueden haber múltiples pedidos por cliente. Estos se almacenan en un nivel en el MV 'mesa'
pueden haber múltiples partes por orden. Estos se almacenan en el nivel de MS en la 'tabla'
pueden haber múltiples qtys por pedido. Estos se almacenan en el nivel de MS en la 'mesa'. ya que están en el mismo nivel, aunque son 1-n para las órdenes, que son 1-1 en lo que respecta a las partes.