Salta el contingut

DAM - DAW - MP 0484 Bases de Dades - NF3

Pràctica 14: - EXERCICIS DDL

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

  1. Crea una taula DEPART basant-te en la següent informació. Confirma que s'ha creat la taula.

    Nom Columna Tipus de clau Nul/Únic Taula de claus foranes Columna de claus foranes Tipus de dada Longitud
    CODI_DEP PRIMARY KEY INT 2
    NOM VARCHAR 20

    En MariaDB i MySQL, la longitud dels numeros no es té en compte. Mana el tipus.

    Possible Solució
    CREATE TABLE DEPART(
           CODI_DEP INT(2) PRIMARY KEY,
           NOM VARCHAR(20) 
    );
    DESCRIBE DEPART;
    

    o bé si volem donar-li nom a la Clau Primària (que en MariaDB/MySQL no ens farà cas)

    CREATE TABLE DEPART(
           CODI_DEP INT(2),
           NOM VARCHAR(20),
               CONSTRAINT PK_DEPART PRIMARY KEY(CODI_DEP)
    );
    DESCRIBE DEPART;
    
  2. Crea una taula EMPLEAT basant-te amb el següent esquema:

    Nom Columna Tipus de clau Nul/Únic Taula de claus foranes Columna de claus foranes Tipus de dada Longitud
    CODI_EMP PRIMARY KEY INT 4
    NOM VARCHAR 25
    OFICI VARCHAR 12
    CODI_DEP DEPART CODI_DEP INT 2
    Possible Solució
    CREATE TABLE EMPLEAT(
           CODI_EMP INT(4) PRIMARY KEY,
           NOM VARCHAR(25), 
           OFICI VARCHAR(12),
           CODI_DEP INT(2),
           FOREIGN KEY (CODI_DEP) REFERENCES DEPART(CODI_DEP)
    );
    DESCRIBE EMPLEAT;
    

    o bé si volem donar-li nom a la Clau Primària (que en MariaDB/MySQL no ens farà cas) i a la clau forana

    CREATE TABLE EMPLEAT(
           CODI_EMP INT(4),
           NOM VARCHAR(25), 
           OFICI VARCHAR(12),
           CODI_DEP INT(2),
           CONSTRAINT PK_EMPLEAT PRIMARY KEY(CODI_EMP),
           CONSTRAINT FK_EMPLEAT_DEPART FOREIGN KEY(CODI_DEP) REFERENCES DEPART(CODI_DEP)
    );
    DESCRIBE EMPLEAT;
    
  3. Modifica la taula EMPLEAT per permetre que el camp NOM tingui una mida de 30 caràcters.

    Possible solució
    ALTER TABLE EMPLEAT 
          MODIFY NOM VARCHAR(30);
    DESCRIBE EMPLEAT;
    
  4. Comprova que les taules EMPLEAT i DEPART s’han creat al diccionari de dades

    Possible solució
    SELECT TABLE_NAME, TABLE_SCHEMA, TABLE_TYPE
    FROM information_schema.tables
    WHERE TABLE_NAME IN ('EMPLEAT', 'DEPART');
    
  5. Crea una taula EMPL2 basant-te amb el següent esquema:

    Nom Columna Tipus de clau Nul/Únic Taula de claus foranes Columna de claus foranes Tipus de dada Longitud
    NUM PRIMARY KEY NOT NULL INT 4
    NOM VARCHAR 25
    OFICI VARCHAR 12
    SOU DECIMAL 11,2
    CODI_DEP DEPART CODI_DEP INT 4

    En MariaDB i MySQL, la longitud dels numeros no es té en compte. Mana el tipus. Per tant, una columna INT(4) pot referenciar una columna INT(2) d'una altra taula.

    Possible Solució
    CREATE TABLE EMPL2(
           CODI_EMP INT(4),
           NOM VARCHAR(25), 
           OFICI VARCHAR(12),
           SOU DECIMAL(11,2),
           CODI_DEP INT(4),
           CONSTRAINT PK_EMPL2 PRIMARY KEY(CODI_EMP),
           CONSTRAINT FK_EMPL2_DEPART FOREIGN KEY(CODI_DEP) REFERENCES DEPART(CODI_DEP)
    );
    DESCRIBE EMPL2;
    
  6. Elimina la taula EMPLEAT. Confirma que s’ha esborrat consultant el diccionari de dades.

    Possible solució
    DROP TABLE EMPLEAT;
    SELECT TABLE_NAME, TABLE_SCHEMA, TABLE_TYPE
    FROM information_schema.tables
    WHERE TABLE_NAME IN ('EMPLEAT', 'DEPART', 'EMPL2');
    
  7. Canvia el nom de la taula EMPL2 per EMPLEAT. Confirma que s’ha fet el canvi consultant el diccionari de dades.

    Possible solució
    RENAME TABLE EMPL2 TO EMPLEAT;
    SELECT TABLE_NAME, TABLE_SCHEMA, TABLE_TYPE
    FROM information_schema.tables
    WHERE TABLE_NAME IN ('EMPLEAT', 'DEPART', 'EMPL2');
    
  8. Elimina la columna SOU de la taula EMPLEAT. Confirma que s’ha fet la modificació de la taula.

    Possible solució
    ALTER TABLE EMPLEAT DROP COLUMN SOU;
    DESCRIBE EMPLEAT;
    
  9. Elimina les taules EMPLEAT i DEPART.

    Possible solució
    DROP TABLE EMPLEAT;
    DROP TABLE DEPART;
    

    o bé en una sola comanda

    DROP TABLE EMPLEAT, DEPART;
    

    Compte amb l'ordre de les taules. No podem eliminar una taula que té claus foranes apuntant a ella, per tant, cal eliminar primer les taules filles

    Error en cas d'elimiar abans una taula pare
    ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails