Base de données multi-valeurs (UniVerse) - SM (MV) vs SM (VS) et ASSOC ()
-
19-09-2019 - |
Question
J'ai une question tirée de 16 pg de Nested IBM Base de données relationnelle Livre blanc, je suis confus pourquoi la commande ci-dessous de CREATE
ils utilisent MV / MS / MS plutôt que MV / MV / MS, lorsque les deux ORDER_#
et PART_#
sont biunivoque beaucoup relations .. Je ne comprends pas quelle valeur, par rapport signifie que la sous-valeur dans la conception de base de données non-1NF. Je voudrais aussi savoir pour en savoir plus sur la clause ASSOC ()
.
Pg 16 de la base de données d'IBM Nested Relational Livre blanc (légère Modifications de blancs)
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")
);
Les bases de données relationnelles imbriquées IBM mettre en œuvre des tables imbriquées comme la répétition des attributs et répéter groupes d'attributs qui sont associés. Les clauses SM spécifient que l'attribut est soit répéter (multivalué - "MV"), ou un groupe répétitif (multi-subvalued - "MS"). La clause ASSOC associe les attributs dans une table imbriquée. Si vous le souhaitez, les bases de données relationnelles imbriquées IBM peut prendre en charge plusieurs tables imbriquées dans une table de base. L'instruction SQL standard suivante serait nécessaire pour traiter les tables 1FN de la figure 5 pour produire le rapport montre la 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
La solution
Je vais aller de l'avant et de répondre à ma propre question, tout en poursuivant UniVerse administration SQL d'IBM pour CBM je suis tombé sur le code pour CREATE TABLE
sur 55 pg.
ACT_NO INTEGER FORMAT '5R' PRIMARY KEY
BADGE_NO INTEGER FORMAT '5R' PRIMARY KEY
ANIMAL_ID INTEGER FORMAT '5L' PRIMARY KEY
(voir distrayant note côté ci-dessous) Cela m'a amusé au début, mais essentiellement je crois que ce soit une directive colonne identique à une directive de table comme PRIMARY ( ACT_NO, BADGE_NO, ANIMAL_ID )
Plus tard à la page 5-19, j'ai vu cette
ALTER TABLE LIVESTOCK.T ADD ASSOC VAC_ASSOC (
VAC_TYPE KEY, VAC_DATE, VAC_NEXT, VAC_CERT
);
Ce qui me porte à croire que le virement de bord ASSOC (VAC_ASSOC)
à une colonne serait le même ... comme celui-ci
CREATE TABLE LIVESTOCK.T (
VAC_TYPE ... ASSOC ("VAC_ASSOC")
VAC_DATE ... ASSOC ("VAC_ASSOC")
VAC_NEXT ... ASSOC ("VAC_ASSOC")
VAC_cERT ... ASSOC ("VAC_ASSOC")
);
Quoi qu'il en soit, je ne suis pas 100% sûr que je ne me trompe pas, mais je devine l'ordre n'a pas d'importance, et que ceux-ci plutôt que d'être une association intransitif ils sont juste un groupe d'ordre insensible à la casse.
Onward! Avec la deuxième partie de la question relative à MS
et MV
, je pour la vie de moi ne peut pas savoir où l'enfer IBM a cette syntaxe de. Je crois qu'il est imaginaire. Je n'ai pas accès à une machine de dev je peux jouer sur le tester, mais je ne peux pas le trouver (le terme MV) dans l'ancien ou le nouveau 10.1 UniVerse 10.3 de référence SQL
note côté pour ceux qui ne sont pas utilisés pour UNIVERS 5R
et 5L
signifie 5 caractères à droite ou à gauche justifié. Ce droit est une fonction d'affichage intégré dans la table des données méta ... Google pour FORMAT UniVerse (ou FMT) pour plus d'informations.
Autres conseils
Juste pour que vous le savez, attribut, et sous-valeurs multiples valeurs multiples vient de la façon dont ils structurent leurs données.
Pour l'essentiel, toutes les données sont stockées dans un arbre de toutes sortes. Est une base de données UniVerse multiples. En général, cela ne fonctionne pas de la manière de dire que DB relationnelles de la fonction de travail SQL.
Chaque enregistrement peut avoir plusieurs attributs.
Chaque attribut peut avoir plusieurs valeurs multiples.
Chaque multivaleur peut avoir plusieurs sous-multivalues.
Alors, si j'ai un dossier appelé FRED
Ensuite, FRED <1,2,3> fait référence au 1er attribut, la position 2 et 3 multivaleur position subvalue.
Pour en savoir plus à ce sujet, vous devez en savoir plus sur la façon dont fonctionne UniVerse. La section SQL est juste une partie latérale de celui-ci. Je vous suggère de lire les autres manuels pour comprendre ce que vous travaillez.
EDIT
Pour l'essentiel, le code vous dit ci-dessus que:
peut de multiples commandes par client. Ceux-ci sont stockés à un niveau MV dans la « table »
peut de multiples parties par ordre. Ceux-ci sont stockés au niveau de MS dans la « table »
peut être multiples qtys par commande. Ceux-ci sont stockés au niveau MS dans la « table ». car ils sont au même niveau, même si elles sont 1-n pour les commandes, ils sont 1-1 en ce qui concerne les parties.