21
P P R R O O G G R R A A M M A A C C I I Ó Ó N N O O R R I I E E N N T T A A D D A A A A O O B B J J E E T T O O S S A A P P L L I I C C A A D D A A A A B B A A S S E E S S D D E E D D A A T T O O S S Por LAURA NOUSSAN LETTRY SISTEMAS DE BASES DE DATOS RELACIONALES Parte 2 Aviso Legal El presente libro electrónico se distribuye bajo Attribution-NonCommercial- NoDerivs 3.0 Unported

Pooabd rdbms 2_lnl_facebook

  • Upload
    lauranl

  • View
    91

  • Download
    2

Embed Size (px)

DESCRIPTION

POOABD-RDBMS- Parte 2 (Object Oriented Programming Applied to Databases - Systems Managment Databases Relational - Part 2)

Citation preview

Page 1: Pooabd rdbms 2_lnl_facebook

PPPRRROOOGGGRRRAAAMMMAAACCCIIIÓÓÓNNN OOORRRIIIEEENNNTTTAAADDDAAA AAA OOOBBBJJJEEETTTOOOSSS

AAAPPPLLLIIICCCAAADDDAAA AAA BBBAAASSSEEESSS DDDEEE DDDAAATTTOOOSSS

Por

LAURA NOUSSAN LETTRY

SISTEMAS DE BASES DE DATOS RELACIONALES

Parte 2

Aviso Legal El presente libro electrónico

se distribuye bajo Attribution-NonCommercial-

NoDerivs 3.0 Unported

Page 2: Pooabd rdbms 2_lnl_facebook

PPOOOO AAPPLLIICCAADDAA AA BBAASSEESS DDEE DDAATTOOSS

ÍNDICE

SISTEMAS DE BASES DE DATOS RELACIONALES – PARTE 2

Introducción

1. SQL (Lenguaje de Consultas Estructurado). Concepto y Sintaxis. Tipos de Lenguaje SQL: DML y DDL.

2. SQL – DML: Sentencia SELECT: básica, con proyección, con restricción y mixta; distintos casos sobre una tabla o más tablas. Utilización de cláusulas para ordenamiento y agrupamiento. Sentencia INSERT, Sentencia UPDATE y Sentencia DELETE.

3. SQL – DDL: Sentencias CREATE, ALTER, RENAME y DROP aplicadas a Tablas y Vistas.

1 2

11

ACTIVIDADES Unidad 1 Tareas

Parte 2 Lectura, trabajos, prácticas propuestas en el Website de la Materia.

(*): En el Website de la materia:

http://www.lnoussanl.com.ar/java&bd

FUENTES Bibliográficas Consultadas

1. Ayuda en línea MySQL Community Edition

2. Ayuda en línea SQL Server y Libros en Pantalla

BIBLIOGRAFÍA para el Alumno

1. NOUSSAN LETTRY, Laura y otros, Secuencia Didáctica de Comandos SQL - Ejemplos y Resultados (Cátedra de Gestión de Datos, 3º Año, Ingeniería en Sistemas de Información UTN – FRM)

2. NOUSSAN LETTRY, Laura, Conexiones JDBC con MySQL y SQL Server (Mendoza, 2013)

3. BrowserSQL versión 3.1 y su Tutorial

4. MySQL Community Edition y WorkBench

5. SQL Server Express Edition

(*)

http://www.lnoussanl.com.ar/javabd/

Page 3: Pooabd rdbms 2_lnl_facebook

PPOOOO AAPPLLIICCAADDAA AA BBAASSEESS DDEE DDAATTOOSS

SISTEMAS DE BASES DE DATOS RELACIONALES – PARTE 2

INTRODUCCIÓN

Ahora, que ya hemos encarado el mundo de los Sistemas de Bases de Datos Relacionales desde un sustento teórico práctico, lo que haremos es seguir los pasos necesarios para crear un Sistema de Bases de Datos relacional físico.

Para ello utilizaremos dos DBMS que actualmente son muy utilizados:

MySQL y SQL Server Express

Aprenderán también que en el mundo real no siempre se siguen los estándares y que además el software, como casi todo en la vida, ambos tienen sus ventajas y desventajas; lo que es cierto también para otros RDBMS como son Oracle o DB2.

Una diferencia básica entre ambos es que MySQL es multiplataforma; es decir puede correr sobre Sistemas Operativos basados en Windows como en Sistemas Operativos basados en Linux, motivo por el cual, y por ser de distribución gratuita, bajo determinadas circunstancias, es el RDBMS más utilizado en la Web.

La versión SQL Server corre sobre Sistemas Operativos Windows y la versión Express por cuanto es de distribución gratuita.

Para poder utilizar SQL en forma independiente del DBMS, de modo tal que nos sirva para fines didácticos, hemos utilizado un software que hemos desarrollado: BrowserSQL versión 3.1.

Dicho software permite conectarse a Access, MySQL y SQL Server y está disponible para su descarga en forma gratuita juntamente con su tutorial desde nuestro sitio web: http://www.lauranoussanlettry.com.ar

Page 4: Pooabd rdbms 2_lnl_facebook

PPOOOO AAPPLLIICCAADDAA AA BBAASSEESS DDEE DDAATTOOSS

Sistemas de Bases de Datos Relacionales – parte 2 pág. 1/18

SISTEMAS DE BASES DE DATOS RELACIONALES

1- SQL (Lenguaje de Consultas Estructurado)

SQL. Concepto

SQL es un lenguaje de alto nivel creado para el tratamiento de datos almacenados en bases de datos relacionales.

Es un lenguaje de tipo declarativo; es decir, no es procedural o imperativo, y permite trabajar con datos a nivel de conjunto, a diferencia de los lenguajes imperativos que trabajan en torno al registro individual y que requieren de lógica procedural para el tratamiento de los datos.

Está basado en álgebra relacional y cálculo relacional orientado a tuplas.

Sus instrucciones básicas se pueden dividir en dos grupos:

1. DDL (Data Definition Language): conjunto de instrucciones que permiten definir tablas, índices, etc.

2. DML (Data Manipulation Language): se utilizan para actualizar información en la base de datos (insertar, eliminar o modificar filas en tablas) y para extraer información de la misma mediante consultas.

Además de estos grupos existen otros, cuyas instrucciones permiten realizar otras operaciones aplicadas al DBMS y/o a sus bases de datos, siendo uno de los más importantes la creación de usuarios, sus roles y niveles de seguridad; que por su complejidad y extensión, exceden el desarrollo de la materia.

Sintaxis SQL

Toda la definición de la sintaxis y uso de SQL está incluida en estándares que van actualizándose periódicamente. Actualmente el último estándar publicado por la ISO es de 2013 (http://www.iso.org/iso/home/search.htm?qt=SQL&sort=rel&type=simple&published=on) puesto que debido a los avances tecnológicos se sigue trabajando en el lenguaje, inclusive en los OODBMS, por lo tanto no todos los papers y estándares se refieren a RDBMS.

Muchos de los RDBMSs del mercado satisfacen gran parte de estándares anteriores (SQL/92, SQL/99) y otros este último estándar. Pero además, varios de los RDBMSs líderes en el mercado tales como DB2 de IBM, ORACLE, SQL Server de Microsoft y otros, tienen funcionalidades que van más allá de los estándares y, en base a estas funcionalidades, muchas veces se elaboran nuevos estándares.

Para encarar el estudio de la sintaxis SQL se utilizará el material disponible en la bibliografía y que puede descargarse desde el sitio web: Secuencia Didáctica

Tipos de Lenguajes SQL: DML y DDL Como ya vimos, SQL se divide en dos grandes grupos de sentencias: SQL-DDL y SQL-DML, pero no son las únicas, existen otras, que no veremos aquí. Ahora ¿qué sentencias están incluidas en SQL-DDL y cuáles en SQL-DML?

LENGUAJE SQL SENTENCIAS OBJETOS

SQL-DDL

CREATE ALTER

RENAME DROP

Tablas, vistas e índices

SELECT (en cualquiera de sus formas)

Tablas y vistas

SQL-DML INSERT UPDATE DELETE

Tablas, vistas e índices

Pr

of. L

aura

Nou

ssan

Let

try

Page 5: Pooabd rdbms 2_lnl_facebook

PPOOOO AAPPLLIICCAADDAA AA BBAASSEESS DDEE DDAATTOOSS

Sistemas de Bases de Datos Relacionales – parte 2 pág. 2/18

2. SQL – DML: Sentencias SELECT, INSERT, UPDATE y DELETE

Por una cuestión diáctica empezaremos con las sentencias básicas que se utilizan manipular los datos de las tablas de una base de datos.

Las sentencias que utilizaremos y que mostramos en los diferentes ejemplos suponen la previa creación de los objetos, lo que se verá recién en el desarrollo de SQL-DDL.

Los ejemplos se han llevado a cabo utilizando el BrowserSQL, por lo que recomendamos leer el Tutorial.

Como guía, las conexiones con un controlador o driver JDBC puro se debe indicar:

1) el DBMS

2) el usuario

3) su contraseña

La cadena de conexión para el DBMS es en forma genérica así:

jdbc:nombre_dbms://servidor:puerto

� MySQL: jdbc:mysqlL://localhost:3306/nombre_base_datos

� SQL Server: jdbc:sqlserver://localhost:1433;databaseName=nombre_base_datos

Los puertos consignados son los que se instalan y configuran por omisión. En el caso de SQL Server la configuración del puerto y de la capa de red TCP/IP es más complicado. Recomiendo leer la bibliografía recomendada sobre configuración del DBMS.

Sentencia SELECT sobre una tabla:

Sentencia básica

Sintaxis: SELECT * FROM tabla El resultado de esta sentencia es el total de los registros de la tabla

Ejemplo: mostrar todos los registros o tuplas de la tabla Localidades

Pr

of. L

aura

Nou

ssan

Let

try

Page 6: Pooabd rdbms 2_lnl_facebook

PPOOOO AAPPLLIICCAADDAA AA BBAASSEESS DDEE DDAATTOOSS

Sistemas de Bases de Datos Relacionales – parte 2 pág. 3/18

La misma consulta utilizando SQL Server

Sentencia SELECT con proyección

Sintaxis: SELECT col1,col4,col6 FROM tabla

El resultado de aplicar esta sentencia es que obtenemos todas las filas pero se muestran sólo las columnas indicadas.

Ejemplo: mostrar el DNI, apellido y nombre de los alumnos

Prof

. Lau

ra N

ouss

an L

ettry

Page 7: Pooabd rdbms 2_lnl_facebook

PPOOOO AAPPLLIICCAADDAA AA BBAASSEESS DDEE DDAATTOOSS

Sistemas de Bases de Datos Relacionales – parte 2 pág. 4/18

Sentencia SELECT con restricción

Sintaxis: SELECT * FROM tabla WHERE condición El resultado de aplicar la sentencia es que se devuelven sólo las filas o tuplas que coinciden con la condición.

Ejemplo: mostrar los alumnos cuya idlocalidad es igual o mayor a 2

Sentencia SELECT mixta

Sintaxis: SELECT col1,col4,col6 FROM tabla WHERE condición El resultado de esta sentencia es que se devuelven las tuplas que coinciden con la expresión de la condición y sólo se muestran los datos de las columnas o atributos indicados.

Ejemplo: mostrar el dni, apellido, nombre de los alumnos cuyo idlocalidad es igual a 1

Prof

. Lau

ra N

ouss

an L

ettry

Page 8: Pooabd rdbms 2_lnl_facebook

PPOOOO AAPPLLIICCAADDAA AA BBAASSEESS DDEE DDAATTOOSS

Sistemas de Bases de Datos Relacionales – parte 2 pág. 5/18

Sentencia SELECT sobre más de una tabla En este caso utilizaremos la Unión de tipo join, es decir aplicaremos las nociones teóricas vistas sobre claves primarias y foráneas.

Sintaxis: SELECT tabla1.col2, tabla2.col1, tabla3.col2 FROM tabla1, tabla2, tabla3 WHERE tabla1.id_clave = tabla2.id_clave AND tabla2.id_clave = tabla3.id_clave

Ejemplo: mostrar el dni, apellido, nombre, dirección y nombre de la localidad de los alumnos

En este ejemplo la unión es de dos tablas. Así mismo hemos utilizado alias de tablas, lo cual hace mucho más fácil la escritura y también la consulta más rápida.

Ejemplo: mostrar los alumnos inscriptos en las materias, indicando el nombre de la materia, el dni, el apellido y el nombre de los alumnos

Notar que para que se pueda llevar a cabo la consulta es necesario unir tres tablas.

Ahora, por ahí sería mejor ordenar los resultados por nombre de materia, cosa que se puede llevar a cabo con la siguiente senencia

Prof

. Lau

ra N

ouss

an L

ettry

Page 9: Pooabd rdbms 2_lnl_facebook

PPOOOO AAPPLLIICCAADDAA AA BBAASSEESS DDEE DDAATTOOSS

Sistemas de Bases de Datos Relacionales – parte 2 pág. 6/18

Cláusula ORDER BY La sintaxis de esta cláusula es … ORDER BY col1,col2 [ ASC | DESC] siendo predeterminada la ordenación ascendente.

Ejemplo: el mismo ejemplo anterior ordenando en forma ascendente la consulta en función del nombre de la materia

Si también quisiéramos ordenar por apellido:

Pr

of. L

aura

Nou

ssan

Let

try

Page 10: Pooabd rdbms 2_lnl_facebook

PPOOOO AAPPLLIICCAADDAA AA BBAASSEESS DDEE DDAATTOOSS

Sistemas de Bases de Datos Relacionales – parte 2 pág. 7/18

Cláusula LIKE Esta cláusula permite realizar una restricción donde la condición implica la comparación entre cadenas. Básicamente la sintaxis utiliza el carácter comodín %. Hay tres casos básicos. Tomaremos como ejemplo la tabla alumnos y el atributo nombre o el atributo apellido. Caso 1: conocer los alumnos cuyo nombre empieza con la letra M

SELECT * FROM alumnos WHERE nombre LIKE ‘M%’ Las comillas indican que es una cadena y el símbolo % después de la letra M indica al DBMS que no interesa el resto de la cadena.

Caso 2: conocer los alumnos cuyo apellido termina en EZ, la consulta será:

SELECT * FROM alumnos WHERE apellido LIKE ‘%EZ’

Prof

. Lau

ra N

ouss

an L

ettry

Page 11: Pooabd rdbms 2_lnl_facebook

PPOOOO AAPPLLIICCAADDAA AA BBAASSEESS DDEE DDAATTOOSS

Sistemas de Bases de Datos Relacionales – parte 2 pág. 8/18

Caso 3: si se quiere saber qué alumnos tienen en el apellido la CH

SELECT * FROM alumnos WHERE apellido LIKE ‘%CH%’

Como podemos ver no hay ningún alumno que concuerde con la consulta

Sentencia INSERT: Esta sentencia sirve para agregar registros a una tabla. La sintaxis es:

Sintaxis: INSERT INTO nombreTabla (atributo1,atributo2, …, atributon) VALUES(valor_atributo1, valor_atributo2, …, valor_atributon)

Como material complementario se distribuyen los archivos de script. Dichos archivos han seguido la secuencia lógica de inserción; esto quiere decir, que para insertar datos en las tablas tenemos que tener en cuenta el diseño lógico, en particular el MER: hay que empezar por las tablas primarias y recién después por las tablas derivadas o dependientes.

En base a nuestro modelo de datos la secuencia sería así: Tabla Localidades, Tabla Alumnos, Tabla Materias y finalmente la Tabla Notas; que es la que hemos seguido en los archivos de Scripts.

También se podría haber partido de esta manera: Tabla Materias, Tabla Localidades, Tabla Alumnos y finalmente la Tabla Notas, pero nos ha parecido más didáctica la primera alternativa.

Aprovecharemos la oportunidad para agregar un alumno que pueda cumplir con la condición de la consulta anterior.

El alumno a ingresar tendrá estos datos: dni: 45200104, apellido: SANCHEZ, nombre: JUAN IGNACIO, la fecha de nacimiento: 28/12/1995, la direccion: San Luis 355, idlocalidad=1, email: [email protected] y telefono: 4235444 La sentencia por lo tanto es: INSERT INTO ALUMNOS(DNI, APELLIDO, NOMBRE, FECHA_NAC, EMAIL, TELEFONO, DIRECCION, IDLOCALIDAD) VALUES(45200104,'SANCHEZ','JUAN IGNACIO','1995/12/28','San Luis 355','[email protected]','4235444') Pr

of. L

aura

Nou

ssan

Let

try

Page 12: Pooabd rdbms 2_lnl_facebook

PPOOOO AAPPLLIICCAADDAA AA BBAASSEESS DDEE DDAATTOOSS

Sistemas de Bases de Datos Relacionales – parte 2 pág. 9/18

Hemos insertado el alumno en la base de datos que tenemos en MySQL. Si se hace una consulta sobre la tabla tendremos el alumno en cuestión agregado:

Notar que en la cadena de conexión, en lugar de utilizar el nombre del servidor hemos escrito localhost; o sea es lo mismo en este DBMS, por cómo está configurado. Ahora si aplicamos el tercer caso de la sentencia con LIKE, nos debería devolver un solo registro, el que acabamos de ingresar.

Prof

. Lau

ra N

ouss

an L

ettry

Page 13: Pooabd rdbms 2_lnl_facebook

PPOOOO AAPPLLIICCAADDAA AA BBAASSEESS DDEE DDAATTOOSS

Sistemas de Bases de Datos Relacionales – parte 2 pág. 10/18

Sentencia UPDATE: Esta sentencia nos permite modificar uno o más registros que ya existen en la tabla.

La sintaxis para modificar un registro en particular es:

Sintaxis: UPDATE nombreTabla SET atributo1=nuevo_valor_atributo1, atributo3=nuevo_valor_atributo3, atributon = nuevo_valor_atributon WHERE atributo_que_esPK=valor

Para modificar más de un registro implica que no nos interesa la clave primaria sino que se cumpla una condición particular con uno o más atributos. Esto lo veremos con ejemplos, ya que así es mucho más claro.

Vamos a modificar un dni, que a su vez es clave primaria puesto que está mal ingresado. En teste caso también hay que tener en cuenta que si el alumno está inscripto en las materias, habrá que modificar también la tabla Notas, ya que en esta tabla dni es una clave foránea.

Prof

. Lau

ra N

ouss

an L

ettry

Page 14: Pooabd rdbms 2_lnl_facebook

PPOOOO AAPPLLIICCAADDAA AA BBAASSEESS DDEE DDAATTOOSS

Sistemas de Bases de Datos Relacionales – parte 2 pág. 11/18

DELETE: La sentencia básica para eliminar un registro tiene la siguiente sintaxis:

Sintaxis: DELETE FROM nombreTabla WHERE atributo_que_esPK=valor

Hay que tener mucho cuidado!! Porque si nos olvidamos de establecer qué registro queremos borrar, y hacemos algo así:

DELETE FROM nombreTabla ¡¡¡OJO!! Porque eliminaríamos todos los registros de la tabla.

Hay una situación particular donde no se pueden borrar los registros de la tabla. Sería el caso de la tabla Notas, que es dependiente de la Tabla Alumnos. Esto se debe al diseño lógico y físico de la base de datos, y a las normas de integridad referencial que hemos utilizado por omisión. Es así que, mientras existan alumnos, no se podrán borrar sus notas.

3. SQL – DDL: Sentencias CREATE, ALTER, DROP y RENAME

Las sentencias que vamos a ver son: CREATE, ALTER, DROP y RENAME El ejemplo está basado en el diseño lógico y físico para la BD Escuela. Los mismos se han llevado a cabo utilizando el BrowserSQL así como los dos DBMS: MySQL y SQL Server, ya que ambos DBMS cuentan con un entorno visual ágil y fácil además de utilizar. En el website hay dos videos que muestran cómo ejecutar las sentencias de declaración de datos, tanto para el caso de MySQL como de SQL Server

Sentencia CREATE Esta sentencia nos permite crear la misma base de datos, crear tablas, vistas, etc. En los ejemplos veremos la creación de la Base de Datos Escuela. CREACIÓN DE LA BASE DE DATOS

CREATE nombreBD

CREACIÓN DE TABLAS La sentencia tiene esta sintaxis:

CREATE nombreTabla ( atributo1 [NOT NULL][DEFAULT], atributo2 [NOT NULL][DEFAULT], … atributoN [NOT NULL][DEFAULT], CONSTRAINT nombrePK PRIMARY KEY(atributoPK), [CONSTRAINT nombreFK FOREIGN KEY(atributoFK) REFERENCES nombreTablaR (atributoPK_tablaR)])

El presente ejemplo tiene por finalidad crear una tabla para usuarios. El diseño lógico me indica que la tabla usuarios debe tener dos atributos por lo menos:

� nom_usuario: que sería de tipo alfanumérico, con un máximo de 8 caracteres, y sería la clave primaria

� clave: que representaría la clave o contraseña del usuario y supondremos que el dominio es alfanumérico. Aquí lo importante es que la clave siempre tiene que tener 8 caracteres, además de ser un campo obligatorio.

El diseño físico: Nom_usuario: tipo de datos: VARCHAR(8), es la clave primaria que se nombra PK_USUARIO Pr

of. L

aura

Nou

ssan

Let

try

Page 15: Pooabd rdbms 2_lnl_facebook

PPOOOO AAPPLLIICCAADDAA AA BBAASSEESS DDEE DDAATTOOSS

Sistemas de Bases de Datos Relacionales – parte 2 pág. 12/18

Clave: tipo de datos: VARCHAR(8), NOT NULL y hay que establecer una restricción (CONSTRAINT) de tipo CHECK para que el usuario siempre ingrese una clave que tenga 8 caracteres y no menos o más. La sentencia SQ �

CREATE TABLE USUARIOS(nom_usuario VARCHAR(8), clave VARCHAR(8) NOT NULL, CONSTRAINT PK_USUARIO PRIMARY KEY(nom_usuario), CONSTRAINT CHK_clave CHECK(len(clave)=8))

Veremos que ejecutamos la sentencia CREATE en los dos DBMS

Como no da error, el CONSTRAINT CHEK funciona. Por lo que haremos dos inserciones, una correcta y otra no. Esto significa, que si funciona la restricción, sólo se debería insertar el primer INSERT y no el segundo.

Sin embargo se puede apreciar que nada es perfecto en el mundo real. En el caso de SQL Server se parsea la restricción CHECK y realmente está previsto por el DBMS ya que no permite realizar la segunda inserción.

En cambio en MySQL pues se parsea la sentencia pero la misma es ignorada por el DBMS.

Hay dos alternativas, por lo general, para solucionar este tipo de situaciones, donde lo que queremos es que el usuario no ingrese cualquier valor: en algunos casos se puede utilizar la sentencia DEFAULT (para aquellos atributos que tal vez el usuario pueda dejar en blanco y que no sean super relevantes de modo que el DBMS no largue una excepción y se pueda insertar o modificar un registro), en el caso Pr

of. L

aura

Nou

ssan

Let

try

Page 16: Pooabd rdbms 2_lnl_facebook

PPOOOO AAPPLLIICCAADDAA AA BBAASSEESS DDEE DDAATTOOSS

Sistemas de Bases de Datos Relacionales – parte 2 pág. 13/18

planteado, en MySQL, a nivel de base de datos es usar un TRIGGER; la otra alternativa es manejar este tipo de situaciones mediante la programación de la aplicación Java.

Podemos ver que se insertó nomás, a pesar del CHECK

Prof

. Lau

ra N

ouss

an L

ettry

Page 17: Pooabd rdbms 2_lnl_facebook

PPOOOO AAPPLLIICCAADDAA AA BBAASSEESS DDEE DDAATTOOSS

Sistemas de Bases de Datos Relacionales – parte 2 pág. 14/18

Podemos ver que la segunda sentencia no se insertó, tampoco nos avisó nada el DBMS. Si vamos al SQL Managment Studio veremos que está agregada la restricción como parte de la estructura de la tabla:

Podemos apreciar dos cosas: aparece el CHECK como restricción dentro de la estructura de la tabla y además podeos comprobar que la tabla sólo tiene un registro.

Sentencia ALTER Sirve para modificar la estructura de un objeto, por ejemplo, una tabla. Entre los diferentes DBMS suele haber bastante diferencia en la sintaxis de esta sentencia. En el video de Creación de la Base de datos con MySQL se puede apreciar un ejemplo. La sentencia es bastante complicada, pero fácil de implementar cuando de lo que se trata es de crear por ejemplo un atributo nuevo o una nueva clave. No así cuando se trata de modificar la estructura de un atributo. Vamos a modificar la tabla USUARIOS de modo que también tenga otro atributo más, es decir, el correo electrónico A este atributo lo nombraremos correo, de tipo alfanumérico con una longitud máxima de 30 caracteres y no nulo. Pr

of. L

aura

Nou

ssan

Let

try

Page 18: Pooabd rdbms 2_lnl_facebook

PPOOOO AAPPLLIICCAADDAA AA BBAASSEESS DDEE DDAATTOOSS

Sistemas de Bases de Datos Relacionales – parte 2 pág. 15/18

Como podemos ver MySQL nos permite agregar la columna aunque ya tengo datos insertados en la tabla. SQL Server, no lo permite y en su lugar nos devuelve un mensaje bastante largo.

Primero eliminamos todos los registros y luego aplicamos la sentencia ALTER TABLE Prof

. Lau

ra N

ouss

an L

ettry

Page 19: Pooabd rdbms 2_lnl_facebook

PPOOOO AAPPLLIICCAADDAA AA BBAASSEESS DDEE DDAATTOOSS

Sistemas de Bases de Datos Relacionales – parte 2 pág. 16/18

Como se puede ver, para poder agregar la nueva columna tendríamos que eliminar todos los registros. Como esta no es una tabla que tenga derivaciones, pues es lo mejor. Es importante notar sí, que la sintaxis de la sentencia es diferente para los DBMS utilizados como ejemplo.

Sentencia RENAME Permite renombrar un objeto

En el caso que quisiéramos renombrar la tabla USUARIOS, la sentencia RENAME funciona en MySQL pero no en SQL Server

También funciona en otros DBMS como Oracle o DB2

La sintaxis es

Sintaxis para renombrar una tabla: RENAME TABLE nombreTAblaViejo TO nombreTAblaNuevo

Sentencia DROP Esta sentencia permite eliminar un objeto, por ejemplo, una tabla, vista, etc.

Sintaxis para eliminar una tabla: DROP TABLE nombreTabla

Esta sentencia se utiliza de la misma forma tanto en MySQL como en SQL Server.

Si queremos eliminar la tabla USUARIOS, que es una tabla que no tiene relaciones, pues la sentencia que deberíamos utilizar es: DROP TABLE USUARIOS.

Sin embargo, como en el caso de las inserciones, si tenemos que tener en cuenta la estructura lógica de la base de datos. Así como no podemos insertar en la tabla Notas si no tenemos datos en las tablas primarias, Alumnos y Materias; tampoco podemos eliminar la tabla Materias porque se usa en Notas; es decir, si quisiéramos eliminar todas las tablas de la base de datos pues deberíamos empezar por eliminar las tablas derivadas; es decir aquellas que utilizan referencian a otras tablas.

En las siguientes imágenes se muestra esta secuencia lógica, después de haber eliminado la tabla usuarios, eliminamos todas las otras:

Prof

. Lau

ra N

ouss

an L

ettry

Page 20: Pooabd rdbms 2_lnl_facebook

PPOOOO AAPPLLIICCAADDAA AA BBAASSEESS DDEE DDAATTOOSS

Sistemas de Bases de Datos Relacionales – parte 2 pág. 17/18

Hemos eliminado todas las tablas de la base de datos que tenemos en MySQL. Es importante notar que la secuencia de eliminación se corresponde en definitiva con el MER.

Ahora vamos a hacer lo mismo en SQL Server, para lo cual, a propósito empezamos mal: queremos eliminar en primer lugar la tabla MATERIAS, nos da un error que es totalmente lógico puesto que funciona la integridad referencial:

Prof

. Lau

ra N

ouss

an L

ettry

Page 21: Pooabd rdbms 2_lnl_facebook

PPOOOO AAPPLLIICCAADDAA AA BBAASSEESS DDEE DDAATTOOSS

Sistemas de Bases de Datos Relacionales – parte 2 pág. 18/18

Finalmente seguimos la secuencia lógica, y el DBMS puede eliminar las tablas.

Prof

. Lau

ra N

ouss

an L

ettry