P. 1
DISEÑO DE BASES DE DATOS EN SQL

DISEÑO DE BASES DE DATOS EN SQL

|Views: 4.248|Likes:
Publicado porkaterin12
diseño de datos
diseño de datos

More info:

Published by: katerin12 on Jun 11, 2009
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as DOC, PDF, TXT or read online from Scribd
See more
See less

05/27/2013

pdf

text

original

DISEÑO DE BASES DE DATOS EN SQL

Seguridad La disponibilidad de los datos puede ser restringida a ciertos usuarios. Según los privilegios que posea cada usuario de la base de datos, podrá acceder a mayor información que otros.

Velocidad Los sistemas DBMS modernos poseen altas velocidades de respuesta y proceso.

Independencia del hardware La mayoría de los sistemas DBMS están disponibles para ser instalados en múltiples plataformas de hardware.

DISEÑO DE BASES DE DATOS EN SQL

Copyright © 2003 SENA - CEV Comunidad Educativa Virtual - Todos los derechos reservados.

DISEÑO DE BASES DE DATOS EN SQL

RESUMEN TAL COMO LO ANUNCIAMOS, A CONTINUACIÓN PRESENTAREMOS UN RESUMEN EN TERMINOLOGÍA DE FÁCIL COMPRESNSION, QUE ILUSTRA LOS PRINCIPALES CONCEPTOS DE LAS BASES DE DATOS Y LAS REGLAS DE CODD LLEVADAS A LA PRACTICA.

Copyright © 2003 SENA - CEV Comunidad Educativa Virtual - Todos los derechos reservados.

DISEÑO DE BASES DE DATOS EN SQL

Insignificancia del orden
La secuencia en la cual los atributos son escritos no debe importar. Podemos escribir el ID del empleado de primero, o el nombre y el apellido de primero, y esto no afectará las relaciones que establezcamos con otras tablas. Por otro lado, los registros deben ser totalmente independiente de su secuencia o posición en la base de datos (dependencia posicional). Esto significa que si intentamos identificar un registro por su posición dentro de la tabla, estaremos creando una llave inválida.

Forma no-normalizada
Los datos, en su forma elemental, no están normalizados. Por lo tanto, lo primero con lo que debemos comenzar es con los datos elementales o básicos que conformarán el diccionario de datos. El diccionario de datos es creado a partir de los documentos o diagramas de flujo de la compañía. Se deben listar los elementos uno debajo del otro. Así, obtendremos la forma no-normalizada para el ejercicio de ARD (Análisis Relacional de Datos), con el cual deberemos obtener al final distintos grupos de elementos. Mas tarde, dichos grupos se combinarán con los grupos de otros documentos al cual tambien se les ha hecho el análisis ARD, y se establecerán relaciones entre ellos.

Copyright © 2003 SENA - CEV Comunidad Educativa Virtual - Todos los derechos reservados.

DISEÑO DE BASES DE DATOS EN SQL

Copyright © 2003 SENA - CEV Comunidad Educativa Virtual - Todos los derechos reservados.

DISEÑO DE BASES DE DATOS EN SQL

REGLAS NO ESCRITAS PARA UN BUEN DISEÑO DE BASE DE DATOS

Mantener los datos bien diferenciados (p.ej., el primero y el último de los nombres van separados). Acercar unas columnas a otras posteriormente sobre la marcha es, en general, bastante fácil, pero separarlas no

Primero, definir la clave primaria. Utilizar un nombre descriptivo (EMPLEADO_ID, no sólo ID).

El uso de nombres descriptivos permite que los nuevos usuarios tengan alguna oportunidad de adivinar lo que es cada una de las columnas (p.ej., utilizar CUENTA_BANCO en lugar de CTBC).

Siempre que sea posible, utilizar una sola columna para la clave primaria;

Copyright © 2003 SENA - CEV Comunidad Educativa Virtual - Todos los derechos reservados.

Unidad 2 - Introducción a SQL.
• • • •

Página 1 - Introducción a SQL. Página 2 - Componentes del SQL. Página 3 - Componentes del SQL (continuación). Página 4 - Consultas.

DISEÑO DE BASES DE DATOS EN SQL

Copyright © 2003 SENA - CEV Comunidad Educativa Virtual - Todos los derechos reservados.

DISEÑO DE BASES DE DATOS EN SQL

ambas son ciertas.

OR Es el "o" lógico. Evalúa dos condicion es y devuelve un valor de verdad si alguna de las dos es cierta.

NOT Negación lógica. Devuelve el valor contrario de la expresión .

Copyright © 2003 SENA - CEV Comunidad Educativa Virtual - Todos los derechos reservados.

DISEÑO DE BASES DE DATOS EN SQL

Esta misma consulta se puede hacer usando el operador BETWEEN. SELECT CEDULA, NOMBRE, APELLIDO, TELEFONO FROM EMPLEADOS WHERE (CIUDAD = "Medellín" AND EDAD BETWEEN 20 AND 30) ORDER BY APELLIDO;

Ahora haremos una consulta mas compleja. Queremos nombre, apellido y teléfono, de las personas residentes en Cali, Bucaramanga, Cúcuta y Pereira que sean mayores de 40 años, y que devenguen un sueldo superior a $350.000, y que ordene la lista por el valor del sueldo.
SELECT NOMBRE, APELLIDO, TELEFONO FROM EMPLEADOS WHERE (CIUDAD IN ("Cali","Bucaramanga","Cúcuta","Pereira") AND EDAD > 40 AND SUELDO > 350000) ORDER BY SUELDO;

Por ultimo, haremos un SELECT mas fuerte. Queremos la información del punto anterior, pero esta vez nos debe mostrar los resultados agrupados por ciudades, respetando el ordenamiento por sueldo. Es decir, nos mostrara 4 grupos de resultados, uno por cada ciudad de la lista, y cada grupito estara ordenado por sueldo. SELECT NOMBRE, APELLIDO, TELEFONO FROM EMPLEADOS WHERE (CIUDAD IN ("Cali","Bucaramanga","Cúcuta","Pereira") AND EDAD > 40 AND SUELDO > 350000) ORDER BY SUELDO GROUP BY CIUDAD; Nótese que simplemente agregamos el operador GROUP BY . Y nótese además que no hay necesidad que CIUDAD este dentro de la lista de campos de SELECT para que el agrupamiento se haga.

Como pueden observar, SQL es un lenguaje extremadamente sencillo. En la próxima unidad veremos comandos DDL, que nos permitirán crear tablas, borrar tablas, y el resto de los comandos DML, que nos permitirán insertar, actualizar y borrar registros en una tabla.

Copyright © 2003 SENA - CEV Comunidad Educativa Virtual - Todos los derechos reservados.

Unidad 3 - Manipuilacion de Datos.
• • • • • • •

Página 1 - Creación de Tablas. Página 2 - Ejemplos de creación de Tablas. Página 3 - Sintaxis del ejemplo de creación de Tablas. Página 4 - Alterar Tablas. Página 5 - Insertar datos en Tablas. Página 6 - Ejemplos de inserción de datos en Tablas. Página 7 - Modificar los datos de una Tabla.

DISEÑO DE BASES DE DATOS EN SQL

CODIGO_ACCESO puede aplicársele la restricción de UNIQUE KEY también, para garantizar la unicidad.

Copyright © 2003 SENA - CEV Comunidad Educativa Virtual - Todos los derechos reservados.

DISEÑO DE BASES DE DATOS EN SQL

Ejemplos de creación de Tablas. A continuación, procederemos a hacer un ejemplo práctico de creación de tablas utilizando las siguientes tres tablas como ejemplo:

Copyright © 2003 SENA - CEV Comunidad Educativa Virtual - Todos los derechos reservados.

DISEÑO DE BASES DE DATOS EN SQL

Sintaxis del ejemplo de creación de Tablas. Teniendo claro el análisis de la base de datos de ejemplo propuesta, y habiendo estudiado la sintaxis de creación de tablas, procedemos a crear nuestras tablas. El orden que usaremos es: 1. CREAR TABLA CIUDADES 2. CREAR TABLA CARGOS 3. CREAR TABLA EMPLEADOS En la sintaxis que veremos a continuación, me he tomado el trabajo de elegir los tipos de dato, tamaños y valores por defecto usando simplemente el sentido común. En la práctica (vida real) el diseñador tiene que escuchar las requisiciones y recomendaciones del cliente que ordena crear la base de datos, antes de aventurarse a elegir tipos, tamaños y valores por defecto de manera arbitraria.

Copyright © 2003 SENA - CEV Comunidad Educativa Virtual - Todos los derechos reservados.

DISEÑO DE BASES DE DATOS EN SQL

Eliminar Tablas

La eliminación de tablas es una orden poco común en la administración de una base de datos, ya que ello implica que se pierdan todos los datos contenidos en la tabla. Además, si una tabla tiene referencias foráneas de otras tablas, inmediatamente se produciría un error en todas las tablas que dependan de la que estoy intentando borrar. Una explicación clara de esto la podemos deducir usando nuestras tablas de ejemplo de los capítulos anteriores. Como recordaremos, las tablas CARGOS y CIUDADES son las que contienen los datos de ID_CARGO y ID_CIUDAD que se usan como referencia en la tabla EMPLEADOS. Esto es, la tabla empleados es dependiente de las tablas CARGOS y CIUDADES, ya que posee dos llaves foráneas que apuntan a ellas. Por lo tanto, si elimino las tablas CARGOS y CIUDADES, la tabla EMPLEADOS quedará huérfana en sus llaves foráneas. En la práctica lo que se acostumbra en caso que la eliminación de una tabla sea estrictamente necesaria, es eliminar primero las restricciones FOREIGN KEY que dependan de las tablas que vayamos a eliminar. De esta manera los datos que originalmente hubieren en la tabla dependiente, permanecerán inalterados, y al ocurrir la eliminación de las otras, no ocurrirá ningún error. Nota: La eliminación de un restricción de llave FOREIGN KEY, se hace a través de cláusulas avanzadas de ALTER TABLE , que pueden ser estudiadas a profanidad en lso manuales de referencia de los gestores de SQL que tengamos instalados en nuestra máquina.

En todo caso, si deseo eliminar un tabla, tenemos a disposición el comando DROP TABLE, y su uso es muy sencillo. La sintaxis general de este comando es:

Copyright © 2003 SENA - CEV Comunidad Educativa Virtual - Todos los derechos reservados.

DISEÑO DE BASES DE DATOS EN SQL

Insertar datos en Tablas.

Como se había explicado previamente, existen tres comandos que caen dentro de la categoría de DML (Data Manipulation Language). Estos son INSERT, UPDATE y DELETE. Cada uno de estos tres comandos son usados para insertar, cambiar o borrar registros en las tablas que hayamos creado dentro de nuestra base de datos. Nos ocuparemos del comando INSERT, que nos permite insertar nuevos registros en una tabla. La sintaxis general de INSERT es la siguiente:

Copyright © 2003 SENA - CEV Comunidad Educativa Virtual - Todos los derechos reservados.

DISEÑO DE BASES DE DATOS EN SQL

Ejemplos de inserción de datos en Tablas. Veamos algunos ejemplos para entender bien el uso del comando INSERT. Recordemos la estructura de la tabla CARGOS.

Copyright © 2003 SENA - CEV Comunidad Educativa Virtual - Todos los derechos reservados.

DISEÑO DE BASES DE DATOS EN SQL

Los criterios de borrado son exactamente de la forma como se usan en un comando UPDATE , y bajo las normas explicadas en la unidad 2. La única restricción a la hora de borrar registros tiene que ver con la existencia de restricciones impuestas a través de las FOREIGN KEY. Esto es, si intentamos borrar un registro de una tabla que este referenciada a otra por medio de una llave foránea, el gestor de la base de datos no permitirá que borremos el registro. Por lo tanto: Para que un registro pueda ser borrado sin inconvnientes, ninguna tabla debe estar haciendo referencia a el. Por ejemplo, si en la tabla CIUDADES intentamos borrar el registro de la ciudad de Bogotá, cuya llave primaria es "BOG", el sistema nos dará un error puesto que existen varios empleados de la tabla EMPLEADOS que están usando el valor del campo ID_CIUDAD como Bogotá, y se violaría la integridad referencial. En cambio, en la tabla EMPLEADOS, al no ser ella misma referencia de ninguna otra tabla, podemos borrar sin problema cualquiera de sus registros.

Observaciones Finales. Con base en el ejemplo anterior podemos deducir que en el mantenimiento de toda base de datos siempre tendremos tablas de referencia (tales como CIUDADES y CARGOS) que por lo general se mantienen inalteradas, y tablas de trabajo, como EMPLEADOS que son las que se amarran a las tablas de referencia a través de llaves foráneas, y sobre las cuales ocurre la mayor parte del trabajo de mantenimiento de la base de datos. Es importante, por lo tanto, que el administrador de la base de datos conozca

Copyright © 2003 SENA - CEV Comunidad Educativa Virtual - Todos los derechos reservados.

Características generales [editar]
El SQL es un lenguaje de acceso a bases de datos que explota la flexibilidad y potencia de los sistemas relacionales permitiendo gran variedad de operaciones sobre los mismos. Es un lenguaje declarativo de alto nivel o de no procedimiento, que gracias a su fuerte base teórica y su orientación al manejo de conjuntos de registros, y no a registros individuales, permite una alta productividad en codificación. De esta forma una sola sentencia puede equivaler a uno o más programas que utilizas en un lenguaje de bajo nivel orientado a regro.

Optimización [editar]
Como ya se dijo arriba, y como suele ser común en los lenguajes de acceso a bases de datos de alto nivel, el SQL es un lenguaje declarativo. O sea, que especifica qué es lo que se quiere y no cómo conseguirlo, por lo que una sentencia no establece explícitamente un orden de ejecución. El orden de ejecución interno de una sentencia puede afectar gravemente a la eficiencia del SGBD, por lo que se hace necesario que éste lleve a cabo una optimización antes de la ejecución de la misma. Muchas veces, el uso de índices acelera una instrucción de consulta, pero ralentiza la actualización de los datos. Dependiendo del uso de la aplicación, se priorizará el acceso indexado o una rápida actualización de la información. La optimización difiere sensiblemente en cada motor de base de datos y depende de muchos factores. Existe una ampliación de SQL conocida como FSQL (Fuzzy SQL, SQL difuso) que permite el acceso a bases de datos difusas, usando la lógica difusa. Este lenguaje ha sido implementado a nivel experimental y está evolucionando rápidamente.

Lenguaje de definición de datos (LDD) [editar]
El lenguaje de definición de datos (en inglés Data Definition Language, o DDL), es el que se encarga de la modificación de la estructura de los

objetos de la base de datos. Existen cuatro operaciones básicas: CREATE, ALTER, DROP y TRUNCATE.

CREATE [editar]
Este comando crea un objeto dentro de la base de datos. Puede ser una tabla, vista, índice, trigger, función, procedimiento o cualquier otro objeto que el motor de la base de datos soporte.

Ejemplo (crear una tabla) [editar]
CREATE TABLE TABLA_NOMBRE

ALTER [editar]
Este comando permite modificar la estructura de un objeto. Se pueden agregar/quitar campos a una tabla, modificar el tipo de un campo, agregar/quitar índices a una tabla, modificar un trigger, etc.

Ejemplo (agregar columna a una tabla) [editar]
ALTER TABLE ''TABLA_NOMBRE'' ( ADD NUEVO_CAMPO INT UNSIGNED )

DROP [editar]
Este comando elimina un objeto de la base de datos.Puede ser una tabla, vista, índice, trigger, función, procedimiento o cualquier otro objeto que el motor de la base de datos soporte. Se puede combinar con la sentencia ALTER.

Ejemplo 1 [editar]
DROP TABLE TABLA_NOMBRE

Ejemplo 2 [editar]
ALTER TABLE ''TABLA_NOMBRE'' ( DROP COLUMN ''CAMPO_NOMBRE1'' )

TRUNCATE [editar]
Este comando trunca todo el contenido de una tabla. La ventaja sobre el comando DELETE, es que si se quiere borrar todo el contenido de la tabla, es mucho más rápido, especialmente si la tabla es muy grande, la

desventaja es que TRUNCATE solo sirve cuando se quiere eliminar absolutamente todos los registros, ya que no se permite la cláusula WHERE. Si bien, en un principio, esta sentencia parecería ser DML (Lenguaje de Manipulación de Datos), es en realidad una DDL, ya que internamente, el comando truncate borra la tabla y la vuelve a crear y no ejecuta ninguna transacción.

Ejemplo [editar]
TRUNCATE TABLE ''TABLA_NOMBRE''

Lenguaje de manipulación de datos (LMD) [editar]
Definición [editar]
Un lenguaje de manipulación de datos (Data Manipulation Language, o DML en inglés) es un lenguaje proporcionado por el sistema de gestión de base de datos que permite a los usuarios de la misma llevar a cabo las tareas de consulta o manipulación de los datos, organizados por el modelo de datos adecuado. El lenguaje de manipulación de datos más popular hoy 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.

INSERT [editar]
Una sentencia INSERT de SQL agrega uno o más registros a una (y sólo una) tabla en una base de datos relacional.

Forma básica [editar]
INSERT INTO ''tabla'' (''columna1'', [''columna2,... '']) VALUES (''valor1'', [''valor2,...''])

Las cantidades de columnas y valores deben ser las mismas. Si una columna no se especifica, le será asignado el valor por omisión. Los valores especificados (o implícitos) por la sentencia INSERT deberán satisfacer todas las restricciones aplicables. Si ocurre un error de sintaxis o si alguna de las restricciones es violada, no se agrega la fila y se devuelve un error.

Ejemplo [editar]
INSERT INTO agenda_telefonica (nombre, numero) VALUES ('Roberto Fernández', '4886850');

Cuando se especifican todos los valores de una tabla, se puede utilizar la sentencia acortada:
INSERT INTO ''tabla'' VALUES (''valor1'', [''valor2,...''])

Ejemplo (asumiendo que 'nombre' y 'numero' son las únicas columnas de la tabla 'agenda_telefonica'):
INSERT INTO agenda_telefonica VALUES ('Roberto Fernández', '4886850');

Formas avanzadas [editar]
Inserciones en múltiples filas [editar] Una característica de SQL (desde SQL-92) es el uso de constructores de filas para insertar múltiples filas a la vez, con una sola sentencia SQL:
INSERT INTO ''tabla'' (''columna1'', [''columna2,... '']) VALUES (''valor1a'', [''valor1b,...'']), (''value2a'', [''value2b,...'']),...

Esta característica es soportada por DB2, PostgreSQL (desde la versión 8.2), MySQL, y H2. Ejemplo (asumiendo ese 'nombre' y 'numero' son las únicas columnas en la tabla 'agenda_telefonica'):
INSERT INTO agenda_telefonica VALUES ('Roberto Fernández', '4886850'), ('Alejandro Sosa', '4556550');

Que podía haber sido realizado por las sentencias
INSERT INTO agenda_telefonica VALUES ('Roberto Fernández', '4886850'); INSERT INTO agenda_telefonica VALUES ('Alejandro Sosa', '4556550');

Notar que las sentencias separadas pueden tener semántica diferente (especialmente con respecto a los triggers), y puede tener diferente performance que la sentencia de inserción múltiple. Para insertar varias filas en MS SQL puede utilizar esa construcción:

INSERT INTO phone_book SELECT 'John Doe', '555-1212' UNION ALL SELECT 'Peter Doe', '555-2323';

Tenga en cuenta que no se trata de una sentencia SQL válida de acuerdo con el estándar SQL (SQL: 2003), debido a la cláusula subselect incompleta. Para hacer lo mismo en Oracle se usa DUAL TABLE, siempre que se trate de solo una simple fila:
INSERT INTO phone_book SELECT 'John Doe', '555-1212' FROM DUAL UNION ALL SELECT 'Peter Doe','555-2323' FROM DUAL

Un estándar-conforme implementacion de esta lógica se muestra el siguiente ejemplo, o como se muestra arriba:
INSERT INTO phone_book SELECT 'John Doe', '555-1212' FROM LATERAL ( VALUES (1) ) AS t(c) UNION ALL SELECT 'Peter Doe','555-2323' FROM LATERAL ( VALUES (1) ) AS t(c)

Copia de filas de otras tablas [editar] Un INSERT también puede utilizarse para recuperar datos de otros, modificarla si es necesario e insertarla directamente en la tabla. Todo esto se hace en una sola sentencia SQL que no implica ningún procesamiento intermedio en la aplicación cliente. Un SUBSELECT se utiliza en lugar de la cláusula VALUES. El SUBSELECT puede contener JOIN, llamadas a funciones, y puede incluso consultar en la misma TABLA los datos que se inserta. Lógicamente, el SELECT se evalúa antes que la operación INSERT este iniciada. Un ejemplo se da a continuación.
INSERT INTO phone_book2 SELECT * FROM phone_book WHERE name IN ('John Doe', 'Peter Doe')

Una variación es necesaria cuando algunos de los datos de la tabla fuente se esta insertando en la nueva tabla, pero no todo el registro. (O cuando los esquemas de las tablas no son lo mismo.)

INSERT INTO phone_book2 ( [name], [phoneNumber] ) SELECT [name], [phoneNumber] FROM phone_book WHERE name IN ('John Doe', 'Peter Doe')

El SELECT produce una tabla (temporal), y el esquema de la tabla temporal debe coincidir con el esquema de la tabla donde los datos son insertados.

Recuperación de clave [editar]
Los diseñadores de base de datos que usan una clave suplente como la clave principal para cada tabla, se ejecutará en el ocasional escenario en el que es necesario recuperar automáticamente la base de datos, generando una clave primaria de una sentencia SQL INSERT para su uso en otras sentencias SQL. La mayoría de los sistemas no permiten sentencias SQL INSERT para retornar fila de datos. Por lo tanto, se hace necesario aplicar una solución en tales escenarios. Implementaciones comunes incluyen:

Utilizando un procedimiento almacenado especifico de base de datos que genera la clave suplente, realice la operación INSERT, y finalmente devuelve la clave generada. Utilizando una sentencia SELECT específica de base de datos, sobre una tabla temporal que contiene la última fila insertada. DB2 implementa esta característica de la siguiente manera:
SELECT * FROM NEW TABLE ( INSERT INTO phone_book VALUES ( 'Peter Doe','555-2323' ) ) AS t

Utilizando una sentencia SELECT después de la sentencia INSERT con función específica de base de datos, que devuelve la clave primaria generada por el más reciente registro insertado. Utilizando una combinación única de elementos de el original SQL INSERT en una posterior sentencia SELECT. Utilizando un GUID en la sentencia SQL INSERT y la recupera en una sentencia SELECT.

Utilizando la función de PHP mysql_insert_id() de MySQL después de la sentencia INSERT. Utilizando un INSERT con la cláusula RETURNING para Oracle, que sólo se puede utilizar dentro de un PL/SQL bloque
INSERT INTO phone_book VALUES ( 'Peter Doe','555-2323' ) RETURNING phone_book_id INTO v_pb_id

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->