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
Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top