Está en la página 1de 38

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

También podría gustarte