Vista previa del material en texto
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO FACULTAD DE INGENIERÍA Lab. de Bases de Datos Grupo: 07 - Semestre: 2022-1 Práctica 8: Lenguaje de Manipulación de Datos y Transacciones FECHA DE ENTREGA: 03/11/2021 Profesor: López Pelcastre Martha M.I Alumno: N.L: 26 Téllez González Jorge Luis N.L: 23 Solano González Felipe de Jesús Facultad de Ingenierı́a Lab. de Bases de Datos Índice 1. Objetivo 3 2. Introducción 3 3. Desarrollo 6 3.1. Requerimientos implementados sobre la BD . . . . . . . . . . . . . . . . . . . . . . . . . 6 3.2. Inserciones de renglones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 3.2.1. Con encabezados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 3.2.2. Sin encabezados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3.3. Inserción con transacciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 3.4. Actualizar columnas con UPDATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 3.4.1. Actualizar 1 columna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 3.4.2. Actualizar 2 columnas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.5. Eliminación de registros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.5.1. Usando DELETE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.5.2. Usando TRUNCATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.6. Eliminar un renglón usando una condición . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.7. Comportamiento transaccional con COMMIT, ROLLBACK y SAVE . . . . . . . . . . . . 18 3.8. Poblado de tablas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.8.1. Segunda ejecución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 4. Conclusiones 26 LATEX 2 Facultad de Ingenierı́a Lab. de Bases de Datos 1. Objetivo El alumno comprenderá y confirmará el uso del lenguaje SQL para realizar la administración de los datos empleando las instrucciones INSERT, UPDATE y DELETE. Comprenderá las principales caracterı́sticas de una transacción, comprobará y configurará los dife- rentes niveles de aislamiento empleados por un RDBMS. 2. Introducción DML (Lenguaje de manipulación de datos) Lenguaje de Manipulación de Datos (Data Manipulation Language, DML) es un lenguaje proporcionado por los sistemas gestores de bases de datos que permite a los usuarios de la misma llevar a cabo las tareas de consulta o modificación de los datos contenidos en las Bases de Datos del Sistema Gestor de Bases de Datos. El lenguaje de manipulación de datos más popular hoy en dı́a es SQL, usado para recuperar y manipular datos en una base de datos relacional. Otros ejemplos de DML son los usados por bases de datos IMS/DL1, CODASYL u otras. Utilizando instrucciones de SQL, permite a los usuarios introducir datos para poste- riormente realizar tareas de consultas o modificación de los datos que contienen las Bases de Datos. Clasificación de los DML Lenguajes de consulta procedimentales En este tipo de lenguaje el usuario da instrucciones al sistema para que realice una serie de procedimientos u operaciones en la base de datos para calcular un resultado final. Lenguajes de consulta no procedimentales En los lenguajes no procedimentales el usuario describe la información deseada sin un procedimiento especı́fico para obtener esa información. LATEX 3 Facultad de Ingenierı́a Lab. de Bases de Datos Sentencias básicas La sentencias básicas utilizadas para la manipulación de datos son la siguientes: INSERT — INSERTAR Una sentencia INSERT de SQL agrega uno o más registros a una (y sólo una) tabla en una base de datos relacional. Existen de manera genral dos formas para ingresar datos a una tabla. Con encabezados y sin encabezados. Con encabezados INSERT INTO ’nombre_tabla’ (’columna1’,[’columna2,... ’]) VALUES (’valor1’, [’valor2,...’]) Como se observa, cada valor se asocia a un nombre de columna, es decir que depende del orden de los encabezados. Sin encabezados INSERT INTO tabla VALUES (’valor1’,’valor2’) Para este caso no se da el nombre de las columnas, y los valores son insertados en el orden de como fueron creados los atributos UPDATE — ACTUALIZAR Como su nombre lo dice, esta sentencia sirve para actualizar los registros de una tabla, además permite incluir condiciones para modificar registros especı́ficos. Su sintaxis es la siguiente: UPDATE nombre_tabla SET columna1 = ’nuevo_valor’ WHERE columna2 = ’valor2’; Nótese que las condiciones pueden estar asociadas a la misma columna u otra. DELETE — BORRAR Esta sentencia permite borrar las columnas de una tabla o todos los datos de la mis- LATEX 4 Facultad de Ingenierı́a Lab. de Bases de Datos ma, en caso de que se requiera borrar registros especı́ficos es posible añadir condi- ciones. Su sintaxis es la siguiente: DELETE FROM mi_tabla WHERE ’columna’ = ’valor’; Cabe destacar que se debe tener cuidado con el uso de esta sentencia. TRUNCATE — BORRAR Esta sentencia se utiliza para eliminar o borrar los datos que contiene una tabla. Es útil cuando sólo se quiere borrar los datos, pero no se quiere borrar la tabla. Este comando deja vacı́a una tabla, es decir, sin datos. Cabe destacar que esta sentencia permite validar laintegridad referencial de los datos. TRUNCATE TABLE ’nombre_tabla’; Transacciones Las transacciones en SQL son unidades o secuencias de trabajo realizadas de forma orde- nada y separada en una base de datos. Normalmente representan cualquier cambio en la base de datos, y tienen dos objetivos principales: Proporcionar secuencias de trabajo fiables que permitan poder recuperarse fácilmen- te ante errorres y mantener una base de datos consistente incluso frente a fallos del sistema. Proporcionar aislamiento entre programas accediendo a la vez a la base de datos. Existen tres comandos básicos de control en las transacciones SQL: COMMIT. Para guardar los cambios. ROLLBACK. Para abandonar la transacción y deshacer los cambios que se hubieran hecho en la transacción. SAVEPOINT. Crea checkpoints, puntos concretos en la transacción donde poder deshacer la transacción hasta esos puntos. LATEX 5 Facultad de Ingenierı́a Lab. de Bases de Datos 3. Desarrollo 3.1. Requerimientos implementados sobre la BD La primer actividad a realizar en la práctica es la realización de un conjunto de modi- ficaciones sobre la base de datos generada en la Práctica 7 [Tienda de Instrumentos Musicales], utilizando las sentencias INSERT, UPDATE y DELETE. En total, se realiza- ron las siguientes actividades: Inserciones de renglones con y sin encabezados de columnas e inserción con paráme- tros. Inserción con selección. Actualizar dos columnas en un comando. Actualizar una columna con una condición. Eliminar todos los renglones, utilizar opcionalmente TRUNCATE. Eliminar un renglón utilizando una condición. 3.2. Inserciones de renglones La primer actividad a realiza consiste en la inserción de renglones o registros en la base de datos utilizando el comando INSERT. Para esto, existen 2 alternativas que se verán a continuación: 3.2.1. Con encabezados La inserción de registros con encabezados requiere que, al momento de realizar insercio- nes, se especifiquen de forma explı́cita TODOS los campos o columnas que compondrán al nuevo registro a insertar, usando la sintaxis: INSERT into esquema.NOMBRE (a1, a2, a3,...) Para ilustrar lo anterior, se realiza la inserción de 3 registros dentro de la tabla LATEX 6 Facultad de Ingenierı́a Lab. de Bases de Datos INSTRUMENTO especificando el valor de cada campo. Nótese que al agregar los instru- mentos no se añade su stock, ya que este tendrá por defecto un valor 5 al no especificarse dentro de la inserción (restricción especificada durante la práctica anterior). Además, no es necesarioañadir la llave primaria dentro de la inserción, ya que esta se generará au- tomáticamente considerando el IDENTITY empleado para crear la restricción de PK. Al ejecutar las lı́neas de código, se tendrán en total 4 registros dentro de la tabla. Antes de colocar cada registro se escribe la palabra values, y después, cada registro a introducir con sus campos especificados en orden, separando cada registro individual con comas a excepción del último. Figura 1: Inserción con encabezados en INSTRUMENTO. LATEX 7 Facultad de Ingenierı́a Lab. de Bases de Datos ´ 3.2.2. Sin encabezados En la siguiente captura se observa una inserción sin hacer uso de encabezados: Figura 2: Inserción sin encabezados en PERCUSION. Se puede aprecia una diferencia con respecto al método anterior de inserción, sien- do el hecho que de que no deben escribirse explı́citamente dentro de la sentencia con INSERT los campos de cada registro a insertar. En este caso, se realiza una inserción de 4 registros dentro de la tabla PERCUSION. Un detalle importante a considerar es que PERCUSION, al ser un subtipo de INS- TRUMENTO, recibe como PK un identificador proveniente de la tabla INSTRUMENTO, entonces, en la inserción anterior el valor para el identificador de cada registro de PER- CUSION debe de coincidir con el ID identificador de un registro existente dentro de INSTRUMENTO. Por ejemplo, si se quiere insertar en PERCUSION el registro (5, ’D’), pero no existe un instrumento con ID=5, la inserción arrojará como resultado un error. LATEX 8 Facultad de Ingenierı́a Lab. de Bases de Datos Figura 3: Error obtenido al tratar de insertar un registro sin existir el ID para un instrumento. 3.3. Inserción con transacciones La siguiente actividad a realizar consiste en la inserción de 3 registros sin encabezado de proveedores de instrumentos musicales dentro de la tabla PROVEEDOR, verificando que los atributos de cada registro se encuentren debidamente llenados y en orden (a excepción de la PK que se genera automáticamente). A diferencia de las inserciones previas, en esta ocasión se introduce el uso de tran- sacciones que, como se abordó previamente, se tratan de agrupamientos de instrucciones que se ejecutan exitosamente por completo, o no se ejecutan. Entonces, para realizar tal agrupamiento se especifica la siguiente sintaxis: BEGIN transaction --instrucciones agrupadas. COMMIT/ROLLBACK transaction ROLLBACK es utilizado cuando se quiere hacer una prueba con la transacción y verificar que genera los resultados deseados, sin realizar los cambios propiamente sobre la base, mientras que COMMIT se emplea cuando se desea que los cambios generados por la transacción se consoliden sobre los datos presentes en la base. En este caso, se insertan los 3 registros dentro de un solo INSERT y se verifica con SELECT el resultado de la operación, y finalmente, se consolida con COMMIT; como puede verse en la imagen anterior donde ya pueden apreciarse los nuevos registros dentro de la tabla PROVEEDOR. LATEX 9 Facultad de Ingenierı́a Lab. de Bases de Datos Figura 4: Inserciones sin encabezado utilizando una transacción. Durante la clase, el orden de los datos original era incorrecto estando los CURP en el lugar de los RFC y viceversa. Como se realiza sin encabezado. el orden para añadir los campos debe de seguirse de forma estricta según lo muestre el orden de los campos en la tabla (visualizándola dentro del Object Explorer), ya que de lo contrario se puede cometer el error de añadir valores que no corresponden a los campos de los registros; como ocurrió en las inserciones de algunas compañeros del laboratorio donde aparecı́a un error de truncado al colocar el RFC donde debı́a colocarse la CURP entrando en conflicto con el tamaño máximo de la cadena de caracteres en cada campo. 3.4. Actualizar columnas con UPDATE Ahora, en lugar de realizar inserciones de registros nuevos, se realizarán modificaciones sobre las columnas ya existentes dentro de una tabla haciendo uso del comando UPDATE. A continuación, se detallan dos posibles casos de actualización de columnas utilizando transacciones para verificar o consolidar los cambios según sea necesario. 3.4.1. Actualizar 1 columna En este caso se realiza la actualización sobre la columna paı́s dentro de la tabla PROVEE- DOR, modificando para cada uno de los registros presentes en la tabla su valor en paı́s para que su valor sea MEXICO. Una vez que se añade UPDATE y el nombre de la tabla, LATEX 10 Facultad de Ingenierı́a Lab. de Bases de Datos con SET se especifica la columna a actualizar y el valor con el que se desea sobreescribir el campo en cada registro de la tabla. Al contar la PK con IDENTITY, esta no se especifica al añadir el registro. Figura 5: Actualización de una sola columna en todos los registros de la tabla PROVEEDOR. Este cambio no se consolida con COMMIT y, en cambio, se emplea ROLLBACK, ya que el cambio anterior afecta a todos los registros al no contener alguna condición de cambio, y puede darse el caso de que algunos proveedores sean extranjeros, por tanto, el cambio anterior provocarı́a la aparición de registros inconsistentes. 3.4.2. Actualizar 2 columnas Ahora, en este ejemplo se realiza el cambio de dos columnas dentro de una sola tran- sacción y un único UPDATE. Para esto, se solicita actualizar los datos de la tienda TOP MUSIC, modificando el valor de su calle con el texto INGENIEROS y su numero con el valor 345. Para ubicar el registro a modificar, se realiza un SELECT * sobre la tabla TIENDA que seleccione todos los registros que tengan por valor en nombre la cadena TOP MUSIC. Identificado, ahora con el comando UPDATE se especifica nuevamente la tabla TIENDA, y con SET se declaran los campos a modificar con sus nuevos valores y, finalmente, LATEX 11 Facultad de Ingenierı́a Lab. de Bases de Datos se añade un WHERE especificando que el UPDATE se realice en los registros donde nombre= ’TOP MUSIC’. Figura 6: Actualización de 2 columnas en un registro con el nombre especificado. A diferencia del caso anterior, los cambios únicamente afectan a un solo registro al especificarse con exactitud por medio de WHERE que la modificación solo debe reali- zarse en los registros que tengan TOP MUSIC por nombre (Que solo es 1 y es único para cada tienda). Esto es verificable haciendo uso de ROLLBACK al ejecutar la transacción como se observa en [6]. En la siguiente imagen se observan los cambios realizados restringiendo por medio de SELECT y WHERE que la visualización de los datos únicamente incluya a los regis- tros con el nombre de TOP MUSIC. De esta forma, se visualiza con facilidad el registro original y de nuevo el registro pero ahora con los cambios que se realizarı́an si la tran- sacción se consolidara en la base. Para efectos de la práctica, se termina consolidando el cambio con COMMIT. LATEX 12 Facultad de Ingenierı́a Lab. de Bases de Datos 3.5. Eliminación de registros 3.5.1. Usando DELETE En este ejemplo se muestra el procedimiento de borrado de un registro de la tabla TIEN- DA. Observando la estructura lógica de la base de datos, es observable que la tabla TIEN- DA contiene una dependencia de FK en el sentido de que una tienda tiene 1 o más em- pleados laborando dentro de ella. En este caso particular, se muestra el borrado de una tienda que no tiene actualmente empleados asociados a ella. Entonces, haciendo un SELECT * en la tabla empleadoTienda se observa que las tiendas 4, 5 y 6 tienen empleaddos asociados, quedando las tiendas 11 y 1004 (el número varı́a de acuerdo a cada base) o bien, INSTRUMENTOS OK y LOS MEJORES INSTRU- MENTOS como las tiendas registradas sin empleados. Se selecciona la tienda 11 vacı́a para fines de ejecución y, al obtener el resultado del SELECT, se observa que no existe ningún empleado de la tienda que tenga como FK idTienda=11 resultando la selección vacı́a. Entonces, dentro de una transacción se procede a usar DELETE especificando la tienda yWHERE para detallar el ID de la tienda a eliminar. Una vez más se verifican las tablas TIENDA y empleadoTienda donde la tienda 11 correspondiente a INSTRUMEN- TOS OK ha sido eliminada de la tabla TIENDA de la base de datos. Figura 7: SELECT sobre las tiendas y los empleados para verificar aquellas sin empleados asociados. El borrado anterior es exitoso ya que, como se observó, la tienda eliminada no contenı́a ningún empleado que tuviese una dependencia de FK que hiciera referencia a la tienda en cuestión. Si hubiese sido el caso de que algún empleado tuviese en su campo idTienda el valor 11, el resultado obtenido hubiera sido un error por parte del manejador. En el LATEX 13 Facultad de Ingenierı́a Lab. de Bases de Datos Figura 8: Eliminación de la tienda sin empleados con idTienda=11. siguiente ejemplo, se muestra el error obtenido al tratar de eliminar la tienda con idTien- da=4; con el manejador indicando que existe un conflicto de FK al tratar de ejecutar el DELETE. Si la restricción FK de idTienda en la tabla empleadoTienda hubiese sido creada especificando la instrucción CASCADE en su creación, este problema no hubiese apa- recido. En cambio, como en este caso no fue ası́, las modificaciones no se propagan y el resultado es un conflicto directo entre la instrucción con DELETE y la restricción de FK al tratar de de preservarse la integridad de los datos. En conclusión, si se quisiese entonces eliminar una tienda que contenga empleados, en primer lugar deberán eliminarse todos los empleados que tengan asociada la tienda en cuestión por medio de una FK, y finalmente, ya que la tienda ya no contenga ningún empleado asociado por FK con el ID de la tienda a eliminar, se procede a su eliminación LATEX 14 Facultad de Ingenierı́a Lab. de Bases de Datos Figura 9: Error obtenido al tratar de eliminar una tienda que contiene empleados asociados. de la forma que se vio en el ejemplo anterior. 3.5.2. Usando TRUNCATE En este ejemplo, se realiza la eliminación de los registros de las tablas PROVEEDOR y empleadoTienda haciendo uso de la instrucción TRUNCATE. Dentro de una transacción, en primer lugar con SELECT * se verifica el estado actual de ambas tablas, y luego, se elimina por completo los registros de la tabla PROVEEDOR haciendo uso de DELETE, y luego, se eliminan los registros de empleadoTienda pero utilizando TRUNCATE table. Finalmente, se verifica el resultado de nuevo con SELECT * sobre ambas tablas. DELETE y TRUNCATE, a pesar de que en papel parecen realizar la misma ac- ción, tienen diferencias clave entre ambos que permite distinguirlos. En principio, a dife- rencia de DELETE, la instrucción TRUNCATE no admite el borrado selectivo de datos haciendo uso de sentencias condicionales (con WHERE), y por tanto, borra todos y cada uno de los registros de la tabla indicada sin excepción. Además, TRUNCATE no puede ser utilizado cuando se presentan conflictos por la presencia de referencias de FK en la LATEX 15 Facultad de Ingenierı́a Lab. de Bases de Datos Figura 10: Eliminación de registros en la tabla Proveedor y empleadoTienda. tabla a eliminar. Por otra parte, tanto TRUNCATE como DELETE permiten validar la integridad referencial de los datos. Figura 11: Error al tratar de eliminar una tabla referenciada por un constraint de FK. Como se observa en la imagen anterior, la integridad referencial derivada del constraint de FK impide su eliminación haciendo uso de TRUNCATE (verifica si la PK de la tabla se ha propagado a otra tabla como FK y campo de otra tabla); aunque si se modifica la lı́nea y se usa DELETE en su lugar se ejecutará con éxito y la transacción se completará sin errores. LATEX 16 Facultad de Ingenierı́a Lab. de Bases de Datos 3.6. Eliminar un renglón usando una condición Ahora, se aborda la eliminación de un renglón o registro haciendo uso de una condi- cional con WHERE. En la siguiente transacción, se muestra la eliminación del registro con razonSocial=’STRATUS MUSICAL’ o CURP=’FRNJ789623HY4JU988’ de la tabla PROVEEDOR haciendo uso de DELETE. Figura 12: Eliminación de un renglón con DELETE y WHERE. Como se observa, al tratarse de una condiciónal con disyunción OR, se eliminarán los registros que cumplan con A o B, siendo estas condiciones las especificadas al inicio para los campos razonSocial y CURP. Verificando el resultado, se observa que se han eliminado 2 registros de proveedores de la tabla, quedando únicamente el registro que no cumple ni con A ni con B en los dos campos especificados. LATEX 17 Facultad de Ingenierı́a Lab. de Bases de Datos 3.7. Comportamiento transaccional con COMMIT, ROLLBACK y SAVE En la última actividad realizada durante la sesión del laboratorio se abordó más a pro- fundidad ciertas particularidades del uso de transacciones. Una de ellas es la posibilidad de utilizar una caracterı́stica dentro de ellas denominada puntos de salvado, que son sen- tencias dentro de las transacciones que permiten englobar un conjunto de sentencias in- ternamente, de forma que los resultados de esas instrucciones se preserven en caso de realizarse un rollback hacia ese punto en cuestión. En primer lugar, dentro de la tabla estatus se insertan dentro de ella 2 registros correspondientes a los estatus posibles para un pedido de una tienda de instrumentos. Luego, dentro de la transacción se inicia revisando con SELECT el contenido de la tabla estatus, y luego, se insertan nuevamente otros 2 estatus al catálogo de estatus y se verifica nuevamente la inserción correcta. Después de todas estas instrucciones, se escribe SAVE TRAN y un nombre para indicar un nuevo punto de salvado (o Savepoint). Con esto, todas las transacciones anteriores al punto de salvado quedarán englobadas en el savepoint punto1. Pasado el punto1, se realiza un UPDATE en la tabla estatus y se cambia el valor del campo descripcion en el registro que tiene a la cadena CANCELADO por EN AUTO- RIZACION. Luego, se revisa el contenido nuevamente de estatus y después aparece una sentencia ’ROLLBACK TRANSACION PUNTO1’. Este rollback tiene una particula- ridad, y es que únicamente afectará a aquellas transacciones que estén posteriormente a la declaración del savepoint point1; lo cual se reflejará en el hecho de que al ejecutar la transacción tal cual, al mostrar los resultados de la misma (ya sea con rollback o commit al final), el UPDATE escrito tras punto1 no se verá reflejado como si nunca hubiese sido escrito en la transacción. Como se observa en el resultado de la ejecución, tras el punto1 se realiza el UPDA- TE y el cambio se ve reflejado en el registro con idEstatus=4 y mostrado en pantalla al usar SELECT * en la tabla, sin embargo, haciendo uso del ROLLBACK hacia el punto1, este UPDATE ya no aparece al concluir exitosamente la ejecución de la transacción. Por otra parte, todos los cambios realizados por las instrucciones escritas antes de la declara- ción del punto de salvado son preservadas y, si se realiza un COMMIT, se verán reflejadas en la tabla estatus. LATEX 18 Facultad de Ingenierı́a Lab. de Bases de Datos Figura 13: Resultado de la ejecución de la transacción. 3.8. Poblado de tablas Para la actividad en casa de la práctica presente, se solicita realizar el poblado de tablas en la base, considerando lo siguiente: Insertar 3 registros de instrumentos en cada subtipo, en total 9 instrumentos. 6 pedidos con al menos 2 instrumentos, de los cuales 2 pedidos serán en proceso, 1 pedido incompleto y 3 pedidos en autorización. 3 empleados por tienda. Para realizar las tres actividades, se implementa el uso de transacciones para veri- ficar que los cambios hechos en un inicio con ROLLBACK y después consolidarlos con COMMIT. Entonces, la primer tarea a realizar consiste en el llenado de la tabla INSTRU- MENTO y se insertan los siguientes registros. LATEX 19 Facultad de Ingenierı́a Lab. de Bases de Datos Figura 14: Registros de instrumentos propuestos con sus subtipos definidos. Todo esto seengloba dentro de una transacción, la cual al ejecutarla produce el siguiente resultado exitoso: Figura 15: Inserción exitosa de los nuevos registros en el supertipo y el subtipo. LATEX 20 Facultad de Ingenierı́a Lab. de Bases de Datos Figura 16: Vista de las tablas actualizadas. Para esta inserción, en primer lugar se añaden todos los registros de instrumentos en el supertipo, y después, se añade cada uno en el subtipo que corresponde; esto debido a que se requiere crear en primer lugar los registros dentro detro del supertipo ya que de lo contrario la inserción resultarı́a en un error al requerirse la PK del instrumento en primer lugar. Hecho esto, se pasa a realizar los 6 pedidos solicitados con sus consideraciones. De igual forma, se utiliza un INSERT INTO con los valores a especificar, y una vez llenados los campos de cada uno, se efectúa la transacción. Nótese que se especifica cada llave foránea, las cuales deben de existir en primer lugar y corresponder a tiendas, proveedores y estatus que existan dentro de las tablas. LATEX 21 Facultad de Ingenierı́a Lab. de Bases de Datos Figura 17: Vista de las tablas actualizadas. Ahora, una vez hechos los pedidos se realiza el llenado de la tabla intermedia pro- ducto de la relación m:n entre PEDIDO e INSTRUMENTO. Considerando los valores insertados en INSTRUMENTO y los pedidos insertados, se realizan las siguientes inser- ciones: Figura 18: Inserciones de pedidos con sus instrumentos asociados a la compra. El resultado al ejecutar esta transacción es el siguiente, donde cada registro de la tabla intermedia permite llevar un registro de los instrumentos incluidos en cada pedido (que pueden ser más de uno): LATEX 22 Facultad de Ingenierı́a Lab. de Bases de Datos Figura 19: Desglose de los instrumentos asociados a cada pedido. Finalmente, se realiza la inserción de 11 empleados dentro de la tabla empleado- Tienda, considerando que cada una de las tiendas debe tener asociados como mı́nimo un total de 3 empleados. Los registros empleados se generaron de forma aleatoria para propósitos del ejercicio: Figura 20: Inserciones de empleados con su tienda asociada. Es importante señalar que se tuvieron en cuenta los empleados existentes que ya LATEX 23 Facultad de Ingenierı́a Lab. de Bases de Datos tenı́an una relación con alguna tienda, entonces, el resultado obtenido tras realizar la in- serción anterior es el siguiente: Figura 21: Resultado de la transacción para insertar empleados. LATEX 24 Facultad de Ingenierı́a Lab. de Bases de Datos 3.8.1. Segunda ejecución A continuación se anexan las capturas de pantalla del integrante de la brigada Solano González Felipe de Jesús ejecutando las lı́neas de código añadidas en el script para realizar la actividad en casa de la práctica 8: Insertar 3 registros de instrumentos en cada subtipo En la siguiente imagen, se muestra como se insertan los valores en los subtipos y se hace la consulta para observar el cambio. Figura 22: Lllenado de los subtipos. 6 pedidos con al menos 2 instrumentos, de los cuales 2 pedidos serán en proceso, 1 pedido incompleto y 3 pedidos en autorización. Primero se llena la tabla PEDIDO con los instrumentos y estatus requeridos. En las imágenes se muestra la ejecución del script y tabla de pedidos llena. Figura 23: Lllenado de la tabla pedido. LATEX 25 Facultad de Ingenierı́a Lab. de Bases de Datos Después se llena la tabla intermedia asociada a los pedidos recien añadidos. Figura 24: Lllenado de la tabla intermedia entre PEDIDO e INSTRUMENTO. 3 empleados por tienda. Por último, se llena la tabla con tres empleados para cada tienda. Figura 25: Lllenado de la tabla de los empleados por tienda. 4. Conclusiones Solano González Felipe de Jesús: La práctica ayudó a reforzar los conocimientos adquiridos en la práctica anterior. En general, las sentencias utilizadas para el desarrollo de la práctica dejan en claro la forma adecuada de insertar, actualizar y borrar datos, por supuesto, tomando en cuenta diferentes condiciones. También, los diferentes ejercicios realizados ayudan LATEX 26 Facultad de Ingenierı́a Lab. de Bases de Datos a comprender el uso de las sentencias para diferentes casos, ası́ como su correcta sintaxis. Uno de los puntos más importantes revisados en la práctica fue el uso de las transac- ciones, una herramienta bastante útil que nos permite poder observar, comprender y simular los cambios a la base de datos. Además, se hizo énfasis en la diferencia que existe entre las sentencias de borrar o eliminar tablas o datos. En conclusión, se puede mencionar que los objetivos de la práctica se cumplen por- que se comprendió y utilizó las sentencias básicas para la manipulación de datos en lenguaje SQL. También, se comprendió el uso de las transacciones ası́ como las diferentes sentencias que las complementan. Téllez González Jorge Luis: El trabajo realizado durante la práctica permitió afianzar los conocimientos iniciales que se fueron adquiriendo durante la práctica anterior que introdujo el uso de los comandos básicos para dar forma a la base de datos en el manejador de SQL Server. En esta práctica, considero especialmente importante mencionar que el concepto de transacción fue particularmente útil para realizar la actividad de tarea, ya que permitió poder experimentar la realización de cambios en los registros de la base sin el riesgo de realizar un paso erroneo que resulte en pérdidas que, si bien en el ambiente controlado en el que estamos son meramente anecdóticos, en un entorno productivo pueden resultar en graves, o incluso, fatales. También, vale la pena mencionar que se observaron las diferentes formas de in- sertar registros, modificarlos (ası́ como las columnas) o incluso eliminar registros, observando los dos métodos disponibles y sus diferencias; siendo un detalle clave el observar las diferencias entre DELETE y TRANSACTION respecto al uso de con- dicionales para el borrado selectivo y teniendo cada uno su caso de uso dependiendo el alcance de los registros a eliminar en una o más tablas. Por lo tanto, considerando que se han asimilado los fundamentos básicos para la inserción, actualización y eliminación de registros dentro de la base, y además, se ha aplicado el uso de transacciones para el llenado de las tablas junto con los conceptos LATEX 27 Facultad de Ingenierı́a Lab. de Bases de Datos anteriores, es posible afirmar que los objetivos de esta práctica han sido cumplidos con total éxito. Referencias [1] Diferencias entre DDL, DML y DCL. Recuperado de: https://www. todopostgresql.com/diferencias-entre-ddl-dml-y-dcl/. Fecha de consulta: 03/11/2021. [2] Lenguaje de manipulación de datos. Recuperado de: https://es.wikipedia. org/wiki/Lenguaje_de_manipulaci%C3%B3n_de_datos. Fecha de consulta: 03/11/2021. [3] SQL — DDL, DQL, DML, DCL and TCL Commands. Recuperado de: https: //www.geeksforgeeks.org/sql-ddl-dql-dml-dcl-tcl-commands/. Fecha de consulta: 26/10/2021. [4] SQL TRANSACTIONS. Recuperado de: https://www.geeksforgeeks.org/ sql-transactions/. Fecha de consulta: 04/10/2021. [5] López-Belmonte, P. and Solana, A. (2009). Administración de bases de datos con SQL Server 2008. Luarna Ediciones, S.L., 1st edition. Los créditos de las fotografı́as pertenecen a sus respectivos autores. © LATEX 28 https://www.todopostgresql.com/diferencias-entre-ddl-dml-y-dcl/ https://www.todopostgresql.com/diferencias-entre-ddl-dml-y-dcl/ https://es.wikipedia.org/wiki/Lenguaje_de_manipulaci%C3%B3n_de_datos https://es.wikipedia.org/wiki/Lenguaje_de_manipulaci%C3%B3n_de_datos https://www.geeksforgeeks.org/sql-ddl-dql-dml-dcl-tcl-commands/ https://www.geeksforgeeks.org/sql-ddl-dql-dml-dcl-tcl-commands/ https://www.geeksforgeeks.org/sql-transactions/ https://www.geeksforgeeks.org/sql-transactions/ Objetivo Introducción Desarrollo Requerimientos implementados sobre la BD Inserciones de renglones Con encabezados Sin encabezados Insercióncon transacciones Actualizar columnas con UPDATE Actualizar 1 columna Actualizar 2 columnas Eliminación de registros Usando DELETE Usando TRUNCATE Eliminar un renglón usando una condición Comportamiento transaccional con COMMIT, ROLLBACK y SAVE Poblado de tablas Segunda ejecución Conclusiones