BD2-2020 - LABORATORIO 2 - Identity, Case, Insert, Truncate
BD2-2020 - LABORATORIO 2 - Identity, Case, Insert, Truncate
BD2-2020 - LABORATORIO 2 - Identity, Case, Insert, Truncate
IDENTITY
TRUNCATE TABLE
En cada uno de los puntos listados, haga exactamente lo que se le solicita, aun cuando
sienta que algo está mal.
Guarde todos sus scrip, debidamente etiquetado cada problema, en un archivo llamado
LAB2.sql
1- Cree la base de datos LAB_2. Y a proceda a crear dentro de ésta, la tabla llamada
libros que contiene los siguientes atributos:
cod_lib (entero) defina el código como llave primaria
espec (cadena 15)
titulo (cadena de 30 caracteres de longitud y no nulo)
autor (cadena de 20),
editorial (cadena de 15) y
precio (float)
3- Modifique el registro cuyo autor sea igual a "Connolly", por "Connolly y Begg" .
Muestre como realizo el cambio y como quedo ahora su tabla.
4. Nuevamente se detecta un error en los datos que requiere modificación. El libro con
código 106 es del área de sistemas y se registró como de literatura. Muestre como realiza
el cambio y como quedan ahora sus datos en la tabla
5. Actualice el precio del libro de "Borges " a 27 dólares. Muestre como hizo el cambio y
muestre los datos
6- Actualice todos los registros que contengan en el campo editorial el valor "McGraw Hill"
por MGH. Muestre como realizo la actualización y la tabla resultante.
En muchas ocasiones nos encontramos con tablas como estas, que no están normalizadas y que
por tanto, están sujetas a tener inconsistencias, una mayor cantidad de errores o datos
redundantes.
En la medida que la tabla descrita va creciendo, puede ocurrir que algunos datos como la
editorial y la especialidad, que son repetitivos pueden ser insertados de manera diferente
(ejemplo: Mcgraw Hill, MCGraw Hill, Mc Graw Hill etc). Causando que el DBMS asuma
que es otra editorial y no brinda información confiable al realizar las consultas. Esto es
producto de una creación de tabla sin un análisis previo.
La buena práctica nos dice que debemos normalizarlo y dividir esta gran tabla para que cada
tabla tenga solo los datos propios de ella.
Si analizamos, vemos que la llave de la tabla cod_libro no determina a la editorial del libro por
tanto, esta debe ser una tabla aparte.
Cod_edi Nombre_edit
t
1 McGraw Hill
2 Pearson
3 Elmerce
De igual forma, el código del libro no determina la especialidad del
libro, por tanto, esta debe ser una nueva tabla.
Cod_espe Nombre_espec
c
1 sistemas
2 literatura
3 matemáticas
Para enmendar el daño, se ha decido cambiar la estructura de la tabla inicial y trabajar con tres
tablas relacionales.
Se deberá crear una tabla para la editorial y otra tabla para las especialidades (ver indicaciones
de creación en los puntos 7 y 8).
7. Primero crearemos la tabla de Editoriales, que contendrá un código de editorial y el
nombre de la editorial. Seguir instrucciones detalladas en párrafo siguiente, para tal fin
Cod_edi Nombre_edit
t
1 Elmerce
2 MGH
3 Pearson
CREATE TABLE …
(codigo_editorial int Identity
Constraint nombre_constraint primary key (codigo_editorial) ,
……
Sintaxis
IDENTITY (inicio , incremento)
IDENTITY (100, 2)
El primer código que se inserta será el 100 y luego 102, 104 y así sucesivamente.
NOTA: Algunos manejadores como MySQL usan auto increment en lugar de identity,
pero realizan la misma función
Una vez creada la tabla, procederemos a incluir el nombre de la editorial, pero lo haremos a
partir de la tabla de libros que ya tenemos, de tal forma que los datos sean tomados
directamente de la tabla existente “libro”. Esta nueva tabla tiene una correspondencia unívoca, a
cada código de editorial le corresponderá un valor único de nombre de editorial. Debemos
cerciorarnos de que no aparezcan repetidos.
Realice la inserción a través de una consulta (select) a la tabla libros. Muestre la instrucción
y la tabla resultante.
8 - Ahora proceda a crear la tabla de especialidades. Esta tabla tendrá un código de especialidad
(generado automáticamente con IDENTITY) y el nombre de la especialidad.
Cod_espe Nombre_espec
c
1 literatura
2 matemáticas
3 sistemas
Defina el código de especialidad como la llave primaria y defina este dato como entero.
Ahora haga que esta tabla tome los valores de las especialidades de la tabla libros.
(sabemos que pueden hacerlo uno a uno ya que son pocos datos, pero deseamos que se haga a
partir de la existente, suponiendo que lugar de 3 filas se tuvieran 10000).
Muestre:
Las instrucciones realizadas para crear la tabla,
Las instrucciones realizadas para insertar los datos y finalmente,
Liste los datos contenidos en la tabla especialidades.
9 - Ahora debemos incorporar a la tabla libro los códigos que permiten hacer la conexión a las
tablas especialidad y editorial respectivamente. (estas columnas serán FK en esta tabla ya que
servirán de enlaces para conocer los nombres de las editoriales y la especialidad. La restricción
de FK será colocada posteriormente. En este momento sólo adicionaremos las columnas y los
datos que conectan Libro con las otras dos nuevas tablas )
Puede adicionar ambas columnas en un solo Alter, colocando comas entre las columnas
Puede hacer el borrado de las dos columnas, con un solo alter, separando con comas las
columnas a borrar.
Muestre las instrucciones realizadas y la salida obtenida después de hacer los cambios
solicitados.
11. Realice los enlaces de integridad referencial (unión de tablas PK con FK) a través de un sólo
alter que separe con comas (,) los dos constraint adicionados.
Muestre las instrucciones y genere el diagrama de base de datos que permita visualizar los
enlaces realizados.
Tanto el Truncate como Delete nos permiten borrar todos los datos de una tabla, sin embargo el Truncate
es un comando DDL en tanto Delete DML. Esto indica que el Delete borra los datos mas no las estructuras
definidas en tanto que el truncate produce un borrado total.
En el ejemplo en cuestión, al ser definido un campo con identity, si borramos el último registro insertado
(por ejemplo 5), el SQL mantiene el último valor introducido por el identity (5) y la siguiente inserción será
(6) es decir el siguiente de donde había quedado (sin importar que el previo fue borrado).
Lo mismo ocurre si hago un delete a toda la tabla. El identity mantendrá el último valor que fue insertado
antes del borrado y continuará con el siguiente.
El truncate por su parte si inicializará los valores, pero sólo puede aplicarse si deseamos borrar todos los
datos de la tabla, ya que no permite el uso del where.
12- Proceda a borrar todos los datos de la tabla de editoriales con el DELETE. Muestre los
comandos que fueron necesarios para tal fin y con un select muestre la tabla vacía.
13- Proceda a insertar los datos Elmerse, MGH y Pearson como nuevas editoriales. (recuerde
que la tabla tiene definida un identity para el código, por lo que no debemos captarlo). Liste los
valores insertados. Que observa con el dato generado por el identity?
14. Proceda a borrar todos los datos de la tabla de editoriales con el TRUNCATE TABLE.
Muestre los comandos que fueron necesarios para tal fin y la tabla vacía.
15. - Proceda a insertar los datos Elmerse, MGH y Pearson como nuevas editoriales. (recuerde
que la tabla tiene definida un identity para el código, por lo que no debemos captarlo). Liste los
valores insertados. Que observa con el dato generado por el identity?
16. Que instrucción necesita para borrar la estructura de la tabla. Borre las tres tablas. Muestre
instrucción necesaria y capture el explorador de objetos, mostrando que no existen ya las tabla.