Salta el contingut

DAM - DAW - MP 0484 Bases de Dades - NF3

Pràctica 16: - Seqüències - empresa

Aquesta pràctica la podem realitzar a la base test.

Abans de començar crearem una còpia de la taula DEPARTMENTS i l’anomenarem DEP i una còpia d’EMPLOYEES i l’anomenarem EMP (per si no le tinguéssim)

CREATE OR REPLACE TABLE DEP 
    AS SELECT * FROM empresa.DEPARTMENTS;
CREATE OR REPLACE TABLE EMP 
    AS SELECT * FROM empresa.EMPLOYEES;
  1. Crea una seqüència per a utilitzar-la com a columna de clau primària de la taula DEP. La seqüència ha de començar en 200 i tenir un valor màxim de 1000. Fes que la seqüència augmenti de 10 en 10. Assigna a la seqüència el nom DEP_ID_SEQ.

    Possible Solució
    CREATE SEQUENCE DEP_ID_SEQ
        START WITH 200
        MAXVALUE 1000
        INCREMENT BY 10;
    
  2. Escriu una consulta per a mostrar el nom de totes les seqüències creades a la nostra base (consulta la taula TABLES de la base INFORMATION_SCHEMA on el camp TABLE_TYPE ens indica el tipus d’Objecte). Després fes un DESCRIBE de la la seqüència (com si fos una taula) i fes un SELECT d’aquesta per esbrinar els següents valors

    minimum_value maximum_value start_value increment
    ??? 1000 200 10
    Possible Solució
    • Quins tipus de taules hi ha a TABLES?

      SELECT DISTCINT TABLE_TYPE FROM information_schema.TABLES;
      
      Possible sortida
      +-------------+
      | TABLE_TYPE  |
      +-------------+
      | SYSTEM VIEW |
      | BASE TABLE  |
      | VIEW        |
      | SEQUENCE    |
      +-------------+
      
    • Quines seqüències tenim?

      SELECT *
      FROM information_schema.TABLES
      WHERE TABLE_TYPE = 'SEQUENCE'
      
      Possible sortida
         TABLE_CATALOG: def
          TABLE_SCHEMA: test
            TABLE_NAME: dep_id_seq
            TABLE_TYPE: SEQUENCE
                ENGINE: InnoDB
               VERSION: 10
            ROW_FORMAT: Fixed
            TABLE_ROWS: 1
        AVG_ROW_LENGTH: 16384
           DATA_LENGTH: 16384
       MAX_DATA_LENGTH: 0
          INDEX_LENGTH: 0
             DATA_FREE: 0
        AUTO_INCREMENT: NULL
           CREATE_TIME: 2024-02-20 18:45:12
           UPDATE_TIME: NULL
            CHECK_TIME: NULL
       TABLE_COLLATION: utf8mb4_general_ci
              CHECKSUM: NULL
        CREATE_OPTIONS:
         TABLE_COMMENT:
      MAX_INDEX_LENGTH: 0
             TEMPORARY: N
      
    • Describe de la seqüència:

      DESCRIBE dep_id_seq;
      
    • SELECT dels camps...

      SELECT minimum_value, maximum_value, start_value, increment
      FROM dep_id_seq;
      
  3. Crea la clau primària de la taula EMP pel camp EMPLOYEE_ID.

    Possible solució
    ALTER TABLE EMP 
        ADD CONSTRAINT PK_EMP PRIMARY KEY(EMPLOYEE_ID);
    
  4. Crea un índex (no únic) pel camp LAST_NAME.

    Possible solució
    CREATE INDEX I_EMP_LAST_NAME ON EMP(LAST_NAME);
    

    o fins i tot

    ALTER TABLE EMP ADD INDEX I_EMP_LAST_NAME (LAST_NAME);
    
  5. Crea un índex no únic a la columna de clau forana (DEPARTMENT_ID) a la taula EMP.

    Possible Solució
    CREATE INDEX I_EMP_DEPARTMENT_ID ON EMP(DEPARTMENT_ID);
    

    o fins i tot

    ALTER TABLE EMP ADD INDEX I_EMP_DEPARTMENT_ID (DEPARTMENT_ID);
    
  6. Visualitza els índex i la unicitat d’aquests en el diccionari de dades (information_schema.statistics) per la taula EMP.

    Possible solució
    SELECT TABLE_SCHEMA, TABLE_NAME, NON_UNIQUE, INDEX_SCHEMA, INDEX_NAME
    FROM information_schema.statistics 
    WHERE TABLE_NAME = 'EMP';
    
    Possible sortida
    +--------------+------------+------------+--------------+---------------------+
    | TABLE_SCHEMA | TABLE_NAME | NON_UNIQUE | INDEX_SCHEMA | INDEX_NAME          |
    +--------------+------------+------------+--------------+---------------------+
    | test         | emp        |          0 | test         | PRIMARY             |
    | test         | emp        |          1 | test         | I_EMP_LAST_NAME     |
    | test         | emp        |          1 | test         | I_EMP_DEPARTMENT_ID |
    +--------------+------------+------------+--------------+---------------------+