Vous êtes sur la page 1sur 86

LENGUAJE DE CONSULTA DE DATOS

Ing. Lucila Patricia


Arellano Mendoza
2018
 El objetivo de esta etapa es producir una
descripción de la implementación de la base
de datos en memoria secundaria

 El diseño físico se divide en varias fases, cada


una de ellas compuesta por una serie de
pasos.
1. Traducir el esquema lógico global para el
SGBD específico.
2. Diseñar las relaciones base para el SGBD
específico.
3. Diseñar las reglas de negocio para el SGBD
específico.
4. Diseñar las vistas de los usuarios
1. Traducir el esquema lógico global para el
SGBD específico

Para ello, se utiliza la información producida


durante el diseño lógico:

 El esquema lógico global


 El diccionario de datos
El esquema lógico consta de un conjunto de
relaciones y, para cada una de ellas, se tiene:

 El nombre de la relación.
 La lista de atributos entre paréntesis.
 La clave primaria y las claves ajenas, si las
tiene.
 Las reglas de integridad de las claves ajenas.
En el diccionario de datos se describen por
esquema los atributos y, para cada uno de
ellos, se tiene:

 Su dominio: tipo de datos, longitud y


restricciones de dominio.
 El valor por defecto, que es opcional.
 Si admite nulos.
 Si es derivado y, en caso de serlo, cómo se
calcula su valor.
 Nombre del Esquema
Tipo de Dato Descripción
CHAR(n) Dato carácter de longitud fija en bytes. El máximo tamaño es
2000 bytes y el mínimo es 1.
VARCHAR2(n) Variable carácter de longitud máxima en bytes. El máximo
tamaño es 4000 bytes y el mínimo 1.
NUMBER(p,n) Dato de tipo numérico donde p es el número de dígitos de la
variable (incluye la parte decimal), n es el número de dígitos
a la derecha del punto decimal
DATE Fecha con rango valido desde el 1 de enero 4712 AC hasta
31 diciembre de 9999.
LOB Objeto binario largo. El tamaño máximo es de 4 Gigabytes
Ejemplos
Se necesita almacenar información sobre los empleados
de cada sucursal bancaria. Los bancos registrados son
Santander, Bancomer, Banamex y HSBC, únicamente.
Cada banco tiene diferentes números de sucursales que
pueden repetirse entre ellas. Cada banco tiene una clave
de banco, nombre, así como sus diferentes sucursales,
de las que se tiene número de sucursal, dirección. Se
tienen registrados los empleados a cada sucursal, de
sus empleados se tiene clave del empleado, nombre
completo, teléfonos donde localizarlo, puesto, y sus
correos electrónicos. Cada puesto tiene una clave,
nombre y un sueldo. Es importante registrar la fecha en
que cada empleado le fue asignado su puesto.
Sucursales Bancarias

BANCO ={cveBanco(Pk), nomBanco(U)*CS1}


BANCSUC={[cveBanco(Fk),noSuc(D)](pk), calleSuc,
colSuc, delSuc}
EMPLEADO={cveEmp(Pk), nombEmp, patEmp,
matEmp(N), [cveBanco(Fk),noSuc(Fk)](fk)}
EMPCORREO={cveEmp(Fk), correo}
EMPTELEFONO={cveEmp(FK), telefono}
PUESTO={cvePuesto(Pk), nomPuesto, sueldo}
EMPPTO={[cveEmp(Fk),cvePuesto(Fk)](pk),
fechaAds}
En una biblioteca se necesita llevar el control de
sus préstamos. De los libro se guarda su código,
autor(es), título, ISBN, editorial y número de
páginas. Por cada libro se tienen varios ejemplares,
los ejemplares tienen un código de ejemplar y su
estado de conservación. De cada usuario se guarda
el código, nombre, dirección y teléfono, cada uno
puede solicitar en préstamo un ejemplar por libro.
De cada préstamo interesa guardar la fecha de
préstamo y la fecha de devolución que no debe de
exceder a 5 días hábiles y no mas de tres
ejemplares por periodo de préstamo.
Préstamo de Libros

LIBRO ={codLibro(Pk), ISBN(U), titulo, numPag,


editorial}
AUTOR={codAutor(Pk),nomAutor, patAutor,
matAutor(N)}
LIBROAUTOR={[codLibro(Fk), codAutor(fk)](Pk)}
LIBROEJEM={[codLibro(Fk),numEjem(D)](Pk),
edoConserv}
USUARIO={codUsu(Pk),nomUsu, patUsu, matUsu(N)}
PRESTAMO*C3={([codLibro(FK),numEjem(Fk)](Fk),
codUsu(Fk), fechaPrest)(Pk)*CS1,fechaDev(C)*CS2}
 Las relaciones base se definen mediante el
lenguaje de definición de datos del SGBD.
Las actualizaciones que se realizan sobre las
relaciones de la base de datos deben observar
ciertas restricciones que imponen las reglas de
negocio de la empresa.

Hay algunas restricciones que no las pueden


manejar los SGBD. Para estas restricciones
habrá que escribir programas de aplicación
específicos.
Los lenguajes mediante los cuales se
implementa un modelo de datos son:

 DDL (Lenguaje de Definición de Datos)


 DML (Lenguaje de Manipulación de Datos)

27
 Permite realizar las tareas de creación,
eliminación, modificación de un objeto de
base de datos (tablas, vistas, usuarios,
índices, etc.)

 La primera fase de cualquier base de datos


siempre comienza con órdenes DDL, para
diseñar los objetos de la base de datos.

28
 Oracle incorpora la tecnología orientada a
objetos y relacional, es un híbrido de
ambas.

 La arquitectura de Oracle es cliente-


servidor: los usuarios acceden a la base de
datos desde su computadora personal
(cliente) a través de una red, y la base de
datos se encuentra en una computadora
diferente (servidor).
 Oracle incorpora la herramienta SQL*Plus
para escribir sentencias SQL, que es la forma
como se definen y manipulan los datos en
una base de datos.
 De sus siglas en inglés Structured Query
Language, es un lenguaje estándar de
comunicación con bases de datos, es un
lenguaje normalizado que nos permite
trabajar con cualquier manejador de bases de
datos

31
Sentencias SQL

 CREATE
 ALTER
 DROP
 Los nombres de objetos se encuentran en
mayúsculas (Factura, factura y FACTURA)

 Los nombres de los objetos van en singular

 Los nombres a utilizar deben ser descriptivos


y no demasiado largos. Oracle admite hasta
un máximo de 30 caracteres, aunque no es
recomendable llegar al límite.
 Los valores alfanuméricos van encerrados entre
comilla simple: ‘Alfanumérico’

 Los valores numéricos son números simples: 123

 Las fechas van encerradas entre comillas simples:


‘1/12/2011’

 Al finalizar una instrucción siempre debe ir el


signo de punto y coma.

 Los comentarios en el código SQL para un bloque


comienzan con /* y terminan con */ y si es por
línea con - - al inicio solamente
CREATE TABLE <nombre tabla>
(<nombre columna> <tipo de dato>
{[[NOT] NULL] [UNIQUE] }[CONSTRAINT <nombre
restricción>][PRIMARY KEY] [DEFAULT][CHECK]
| [PRIMARY KEY (<lista columnas>)]
| [FOREIGN KEY (<lista columnas>) REFERENCES
<nombretabla>] [ON DELETE {CASCADE | SET
NULL}]
| [CHECK (condición de búsqueda)])
;
CONSTRAINT nombre restricción
{PRIMARY KEY (campo1[,campo2[,..]])
| UNIQUE (campo1[,campo2[,..]])
| NOT NULL (campo1[,campo2[,..]])
| FOREIGN KEY REFERENCES <nombretabla>
(campo1[,campo2[,..]])
[ON DELETE {CASCADE | SET NULL}]
|CHECK (condición de búsqueda)}
Para desplegar las tablas existentes:

SELECT TABLE_NAME
FROM USER_TABLES;
RENAME <nombre tabla existente> TO <nuevo
nombre tabla>

RENAME emp TO empleado;


Sentencia ALTER TABLE

ALTER TABLE <nombre tabla>


{[ADD] |[MODIFY]}
<nombre columna > <tipo de dato> [NOT NULL]
[DEFAULT valor]
|[DROP {[COLUMN <nombre columna >]|(<nombre
columna>) [CASCADE CONSTRAINT]} ;
ALTER TABLE <nombre tabla>
ADD
[PRIMARY KEY (nombre columna)
|FOREIGN KEY (nombre columna) REFERENCES
<nombre tabla>
|UNIQUE (nombre columna)
|CHECK (condición)
|CONSTRAINT nombre restricción
{[PRIMARY KEY (nombre columna)]
[UNIQUE (nombre columna)]
[CHECK(<condición>)]
[FOREIGN KEY(nombre columna) REFERENCES
<nombre tabla>(nombre columna) ON [DELETE [SET
NULL][CASCADE]];
 Comparación: Compara los valores de dos
expresiones, utilizando los operadores de
comparación (=, <>, <, >, <=,>=)
CHECK (saldo >= 0)

 Rango: Cláusula BETWEEN…AND

CHECK (saldo BETWEEN 1200 AND 1500)


 Pertenencia a un conjunto: Cláusula IN

CHECK (saldo IN (2975, 3000, 5000))

 Correspondencia con un patrón

CHECK (telefono LIKE ‘55%’)


 ALTER TABLE <tabla> ADD CONSTRAINT
<nombre regla> PRIMARY KEY(<atributo>)

 ALTER TABLE <tabla> ADD CONSTRAINT


<nombre regla> FOREIGN KEY(<atributo>)
REFERENCES <tabla> (<atributo>) ON DELETE
{CASCADE|SET NULL};

 ALTER TABLE <tabla> DROP CONSTRAINT


<nombre regla> CASCADE;
ALTER TABLE <nombre tabla>
DROP
[PRIMARY KEY (nombre columna)
|FOREIGN KEY (nombre columna) REFERENCES
<nombre tabla>
|UNIQUE (nombre columna)
|CHECK (condición)
|CONSTRAINT nombre restricción
<tipo_restricción>(nombre columna)
Sentencia DROP

Suprime cualquier objeto de base de datos.

DROP TABLE <nombre tabla>[CASCADE


CONSTRAINT];

Ejemplo:

DROP TABLE trabajo;


Para mostrar la estructura de la tabla:

DESCRIBE <nombre tabla>;

Ejemplo:

DESCRIBE empleado;
SELECT CONSTRAINT_NAME, TABLE_NAME,
CONSTRAINT_TYPE
FROM USER_CONSTRAINTS
WHERE (TABLE_NAME= ‘<NOMBRE_TABLA>');

NOTA: El nombre de la tabla debe estar en


MAYÚSCULAS
 Ejecute sql* plus y conéctese con el usuario
curso

 > sqlplus
 Sql> curso/curso
En Oracle 10g la interfaz es de lenguaje de
comandos y su menú sólo tiene las opciones
clásicas de Archivo, Editar, Buscar, Opciones
y Ayuda. Dentro del menú de Archivo
podremos crear un archivo spool, en el cual
se guardará todo lo que hagamos en una
sesión SQL en la ruta c:\temp
o en línea de comandos tanto en Oracle 10g
como en 11g
SQL> spool c:\temp\archivo.sql
 Abra un archivo spool y realice lo que se
pide.
Puede hacerlo utilizando el menú de la
interfaz en Oracle 10g en la pestaña
Archivo/Spool/Archivo de Spool…

Desde línea de comandos en Oracle 11g


sql> spool c:\temp\ejemplo1.sql
EMP={numEmp(pk):char(4), nombreEmp:
varchar2(20), domEmp:varchar2(30),
telefEmp:char(10)}
CREATE TABLE emp (
numEmp CHAR(4) PRIMARY KEY,
nombreEmp VARCHAR2(20) NOT NULL,
domEmp VARCHAR2(30) NOT NULL,
telefEmp CHAR(10) NOT NULL
);
DEPTO={claveDepto(pk):char(4),
nomDepto:varchar2(15),presup: number(12,2)}

CREATE TABLE depto(


claveDepto CHAR(4) PRIMARY KEY,
nomDepto VARCHAR2(15) NOT NULL,
presup NUMBER(12,2) NOT NULL
);
OFICINA={numOficina(pk): char(4), ubicOfic:
varchar2(30), telefOfic: char(10)}

CREATE TABLE oficina (


numOficina CHAR(4) PRIMARY KEY,
ubicOfic VARCHAR2(30) NOT NULL,
telefOfic CHAR(10) NOT NULL
);
CLIENTE={claveCte(pk):char(4),
nomCte:varchar2(20), domCte:varchar2(30),
telefCte: char(10)}

CREATE TABLE cliente (


claveCte CHAR(4) PRIMARY KEY,
nomCte VARCHAR2(30) NOT NULL,
domCte VARCHAR2(30) NOT NULL,
telefCte CHAR(10) NOT NULL
);
TRABAJO={claveTrab(pk):char(4),
nomTrab:varchar2(35)}

CREATE TABLE trabajo(


claveTrab CHAR(4) PRIMARY KEY,
nomTrab VARCHAR2(35) NOT NULL
);
Renombramos las siguientes
tablas
RENAME emp TO empleado;
RENAME depto TO departamento;

57
Ahora creamos la siguiente tabla que
contiene una llave foránea:

PROYECTO={claveProy(pk): char(5),
descripProy varchar2(30), claveDepto(fk) char(4)}

CREATE TABLE proyecto(


claveProy CHAR(5) PRIMARY KEY,
descripProy VARCHAR2(30) NOT NULL,
claveDepto CHAR(4) NOT NULL,
FOREIGN KEY (claveDepto) REFERENCES
departamento);
Añada una nueva columna llamada ubicacion,
que sea de tipo carácter variable de longitud
40, a la tabla DEPARTAMENTO.

ALTER TABLE departamento ADD ubicacion


VARCHAR2(40);
Añada una referencia a la tabla OFICINA, de
manera que se relacione con la tabla
DEPARTAMENTO utilizando la columna
claveDepto.

ALTER TABLE oficina ADD claveDepto CHAR(4)


NOT NULL;

ALTER TABLE oficina ADD FOREIGN KEY


(claveDepto) REFERENCES departamento;
Modifique la tabla CLIENTE, de tal forma que
se agregue la columna status de tipo carácter
de longitud 2 y además por omisión asígnele
el valor de 01.

ALTER TABLE cliente ADD status CHAR(2);


ALTER TABLE cliente MODIFY status DEFAULT
’01’;
Muestre los cambios realizados

DESCRIBE departamento;

DESCRIBE oficina;

DESCRIBE cliente;
Confirme los datos utilizando el siguiente
comando

SQL>COMMIT;
 Cierre su archivo Spool

Utilizando el menú
Archivo/Spool/Desactivar Spool

En línea de comandos
sql>spool off;
La integridad de datos es un principio
fundamental en un modelo de base de datos
relacional. Es una forma de asegurar que la
base de datos sólo tiene información exacta y
aceptable
CREATE TABLE <nombre tabla>
( <nombre columna> <tipo de dato>
[NOT NULL] [CONSTRAINT <nombre
restricción>][PRIMARY KEY]
| [PRIMARY KEY (<lista columnas>)]
| [FOREIGN KEY (<lista columnas>)
REFERENCES <nombretabla>
CONSTRAINT <nombre restricción> CHECK
(condición de búsqueda)];
CONSTRAINT nombre restricción {[NOT ] NULL|
{PRIMARY KEY | UNIQUE}
|REFERENCES <nombretabla> [(<columna1>
[,<columna2>)]
[ON DELETE CASCADE | SET NULL]}
|CHECK (condición de búsqueda)}
Abra un archivo spool y realice lo que se pide,
puede hacerlo utilizando el menú de la
interfaz en la pestaña Archivo/Spool/Archivo
de Spool…

Desde línea de comandos


sql> spool c:\temp\ejemplo2.sql
Cree una tabla llamada artista con la columna
clasific de tipo CHAR, donde únicamente se
acepten los caracteres en mayúscula E (Escritor),
P (Pintor) y M (Muralista).

CREATE TABLE artista(


claveArt CHAR(4) PRIMARY KEY,
nomArt VARCHAR2(50),
clasific CHAR(1) NOT NULL,
CONSTRAINT CkClasificArtis
CHECK (clasific IN ('E','P','M'))
);
Ahora genere la tabla obra definiendo
su llave primaria como una restricción.

CREATE TABLE obra(


claveObra CHAR (4)
CONSTRAINT PkObra PRIMARY KEY,
claveArt CHAR(4),
descripObra VARCHAR2(100),
FOREIGN KEY (claveArt)
REFERENCES artista
);
Observamos los CONSTRAINTS creados en la
tabla OBRA

SELECT CONSTRAINT_NAME,
TABLE_NAME, CONSTRAINT_TYPE
FROM USER_CONSTRAINTS
WHERE (TABLE_NAME= 'OBRA');
CONSTRAINT_NAME TABLE_NAME CONSTRAINT_TYPE
----------------- ----------- ---------- --------
PKOBRA OBRA P
SYS_C005501 OBRA R
Para eliminar el CONSTRAINT realizamos:

ALTER TABLE obra


DROP CONSTRAINT pkObra CASCADE
Verificamos que se haya eliminado

SELECT CONSTRAINT_NAME,
TABLE_NAME, CONSTRAINT_TYPE
FROM USER_CONSTRAINTS
WHERE (TABLE_NAME= 'OBRA');

74
CONSTRAINT_NAME TABLE_NAME CONSTRAINT_TYPE
----------------- ----------- ----------------
SYS_C005501 OBRA R

75
 Si al crear una tabla no se consideró un
CONSTRAINT como llave primaria, puede
agregarlo de la siguiente forma, siempre y
cuando no este declarado ya como llave
primaria.

ALTER TABLE obra


ADD CONSTRAINT pkObra
PRIMARY KEY (claveObra);
Verificamos que se haya creado

SELECT CONSTRAINT_NAME,
TABLE_NAME, CONSTRAINT_TYPE
FROM USER_CONSTRAINTS
WHERE (TABLE_NAME= 'OBRA');

77
CONSTRAINT_NAME TABLE_NAME CONSTRAINT_TYPE
----------------- ---------- ----------------
SYS_C005501 OBRA R
PKOBRA OBRA P

78
Crear un CONSTRAINT de llave foránea de
borrado en cascada en la tabla obra

1. Vemos los constraints creados en la tabla


OBRA

SELECT CONSTRAINT_NAME,
TABLE_NAME,
CONSTRAINT_TYPE
FROM USER_CONSTRAINTS
WHERE TABLE_NAME= 'OBRA';
CONSTRAINT_NAME TABLE_NAME CONSTRAINT_TYPE
----------------- ---------- ----------------
SYS_C005501 OBRA R
PKOBRA OBRA P

80
2. Observamos cual es el constraint de llave
foránea y lo eliminamos para poder crearlo
nuevamente con la condición de borrado en
cascada.

ALTER TABLE obra


DROP CONSTRAINT SYS_C005501;
3. Crear nuevamente el constraint pero con la
opción de borrado en cascada.

ALTER TABLE obra ADD


CONSTRAINT obrafk
FOREIGN KEY (claveArt)
REFERENCES artista (claveArt)
ON DELETE CASCADE;
4. Revisamos nuevamente los constraints

SELECT CONSTRAINT_NAME, TABLE_NAME,


CONSTRAINT_TYPE
FROM USER_CONSTRAINTS
WHERE (TABLE_NAME= 'OBRA');
CONSTRAINT_NAME TABLE_NAME CONSTRAINT_TYPE
----------------- ----------- ---------------
PKOBRA OBRA P
FKOBRA OBRA R
Si en lugar de crear un CONSTRAINT de
borrado en cascada de llave foránea,
queremos crear uno de valor nulo, realizamos
lo siguiente:

1. Borramos el constraint de borrado en


cascada

ALTER TABLE obra


DROP CONSTRAINT fkObra CASCADE
2. Creamos el nuevo CONSTRAINT

ALTER TABLE obra


ADD CONSTRAINT fkObra
FOREIGN KEY(claveArt)
REFERENCES artista (claveArt)
ON DELETE SET NULL;
Abra un archivo spool y realice lo que se pide
Puede hacerlo utilizando el menú de la
interfaz en la pestaña Archivo/Spool/Archivo
de Spool…

Desde línea de comandos


sql> spool c:\temp\ejercicioDDL.sql
Ejercicio:
Obtenga el lenguaje de definición de datos del
esquema de Sucursales Bancarias, considerando
sus restricciones semánticas.

Al terminar no olvide cerrar su archivo spool

Utilizando el menú
Archivo/Spool/Desactivar Spool

En línea de comandos
sql>spool off;

Vous aimerez peut-être aussi