• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Sesión03 - Creación de objetos (Oracle)
 

Sesión03 - Creación de objetos (Oracle)

on

  • 323 views

Este minitutorial tiene como objetivo captar todos los conceptos dictados en cada sesión en el curso de Base de Datos Avanzado II, así como brindar apoyo a los alumnos de la carrera técnica de ...

Este minitutorial tiene como objetivo captar todos los conceptos dictados en cada sesión en el curso de Base de Datos Avanzado II, así como brindar apoyo a los alumnos de la carrera técnica de Computación e Informática, que por algún motivo no hayan asistido a clases.


UNIDAD 2. Creación de estructuras de datos
Logro de la Unidad de Aprendizaje
Al término de la unidad, el alumno diseña e implementa modelos de datos que incorporen reglas o restricciones mediante la definición de objetos tales como tablas, secuencias y sinónimos.
Temario
2.1 Tema 3: CREACIÓN DE ESTRUCTURAS DE DATOS
2.1.1 Creación y modificación de tablas
2.1.2 Creación de restricciones
2.1.3 Manejo de índices
2.1.4 Manejo de secuencias
2.1.5 Manejo de sinónimos

Statistics

Views

Total Views
323
Views on SlideShare
286
Embed Views
37

Actions

Likes
0
Downloads
19
Comments
0

3 Embeds 37

http://i7exe.blogspot.com 26
http://i7exe.blogspot.com.es 6
http://i7exe.blogspot.mx 5

Accessibility

Categories

Upload Details

Uploaded via as Microsoft Word

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Sesión03 - Creación de objetos (Oracle) Sesión03 - Creación de objetos (Oracle) Document Transcript

    • /* Sesión03 – Creación de Objetos Estudiante: José Luis Toro Alcarraz Curso: Base de Datos Avanzado II Correo:i201010865@cibertec.edu.pe */ Objetivo de la sesión. Describir algunos objetos de la base de datos y sus usos. Crear, mantener y usar tablas, índices, constraints, secuencias y sinónimos. 1) Manejo de tablas. (Ver sesión anterior) 2) Manejo de constraints. 3) Manejo de secuencias. 4) Manejo de índices. 5) Manejo de sinónimos. 2) Manejo de constraints.       Fuerzan las reglas a nivel de tabla. Evitan la eliminación de una tabla o de sus registros si hay dependencias. Si no se asigna un nombre a un constraints Oracle Server genera un nombre con el formato SYS_Cn. Un constraint se puede crear al mismo tiempo que se crea la tabla o bien una vez creada la tabla. Se pueden definir a nivel de columna o de tabla. Los constrtaints se pueden visualizar en el diccionario de datos. Sentencias CREATE TABLE [schema.] table (column datatype [DEFAULT expr] [column_constraint], Utilice la sentence ALTER TABLE para:  Agregar o borrar una restricción, sin modificar su estructura.  Activar o desactivar restricciones.  Agregar una restricción NOT NULL agregando la cláusula MODIFY. Desactivar un constraint ALTER TABLE table DISABLE CONSTRAINT nom_constraint Tipos de constraints NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY CHECK ALTER TABLE table ADD CONSTRAINT nom_constraint FOREING KEY(column) REFERENCES table_dest (column); ALTER TABLE emp DROP CONSTRAINT emp_manager_fk; ALTER TABLE departamento DROP PRIMARY KEY CASCADE; Activar un constraint ALTER TABLE table ENABLE CONSTRAINT nom_constraint
    • Ejemplo1: Cree la tabla CINE y verifique que los campos NOMBRE y DIRECCION no sean nulos. SQL> CREATE TABLE CINE ( CODCINE NUMBER (4), NOMBRE VARCHAR2 (50) CONSTRAINT NN_CINE_NOMBRE NOT NULL, DIRECCION VARCHAR2 (100) NOT NULL, CAPACIDAD NUMBER (4), FECHAINAUG DATE ); Tabla creada. Muestra la estructura de tabla CINE SQL> DESC CINE; Nombre ┐Nulo? Tipo ----------------------------------------- -------- ---------------------------CODCINE NOMBRE DIRECCION CAPACIDAD FECHAINAUG NOT NULL NOT NULL NUMBER(4) VARCHAR2(50) VARCHAR2(100) NUMBER(4) DATE Muestra los CONSTRAINTS de la tabla CINE. SQL> SELECT CONSTRAINT_NAME, TABLE_NAME FROM USER_CONSTRAINTS WHERE TABLE_NAME = 'CINE'; CONSTRAINT_NAME TABLE_NAME ------------------------------ -----------------------------NN_CINE_NOMBRE CINE SYS_C0011190 CINE Muestra los CONSTRAINTS de la tabla CINE y en que columna. SQL> SELECT CONSTRAINT_NAME NOMBRE,TABLE_NAME TABLA, SUBSTR(COLUMN_NAME,1,255)COLUMNA FROM ALL_CONS_COLUMNS WHERE TABLE_NAME = 'CINE'; NOMBRE TABLA COLUMNA ------------------------------ ------------------------------ ---------------------------------SYS_C0011190 CINE DIRECCION NN_CINE_NOMBRE CINE NOMBRE Eliminar la tabla CINE. SQL> DROP TABLE CINE;
    • Tabla borrada. Ejemplo2: Creamos nuevamente la tabla CINE y verificamos que los campos NOMBRE Y DIRECCION sean únicos. SQL> CREATE TABLE CINE ( CODCINE NUMBER (4), NOMBRE VARCHAR2 (50) CONSTRAINT UK_NOMBRE UNIQUE, DIRECCION VARCHAR2 (100) UNIQUE, CAPACIDAD NUMBER (6), FECHAINAUG DATE ); Tabla creada. Eliminar la tabla CINE. SQL> DROP TABLE CINE; Tabla borrada. Creamos la tabla CINE con su llave primaria y verifique que el valor de la columna NOMBRE sea único. SQL> CREATE TABLE CINE ( CODCINE NUMBER (4) CONSTRAINT PK_CINE PRIMARY KEY, NOMBRE VARCHAR2 (50) CONSTRAINT UK_NOMBRE UNIQUE, DIRECCION VARCHAR2 (100), CAPACIDAD NUMBER (6), FECHAINAUG DATE ); Tabla creada. Creamos la tabla SALA con su llave primaria y referenciamos a la tabla CINE. SQL> CREATE TABLE SALA ( CODSALA NUMBER (4), CODCINE NUMBER (4), NOMBRE VARCHAR2 (20), CAPACIDAD NUMBER (6), CONSTRAINT PK_CODSALA PRIMARY KEY (CODSALA), CONSTRAINT FK_CODCINE FOREIGN KEY (CODCINE) REFERENCES CINE(CODCINE) );
    • Tabla creada. Muestra los CONSTRAINTS de la tabla SALA y en que columna. SQL> SELECT CONSTRAINT_NAME NOMBRE,TABLE_NAME TABLA, SUBSTR(COLUMN_NAME,1,255)COLUMNA FROM ALL_CONS_COLUMNS WHERE TABLE_NAME = 'SALA'; NOMBRE TABLA COLUMNA ------------------------------ ------------------------------ ---------------------------------FK_CODCINE SALA CODCINE PK_CODSALA SALA Elimin Eliminamos la tabla SALA ar la tabla SALA. SQL> DROP TABLE SALA; CODSALA Tabla borrada. Ejemplo3: Creamos la tabla SALA aplicando el CONSTRAINT CHECK en el campo capacidad, el CONSTRAINT PRIMARY KEY al campo CODSALA y el CONSTRAINT FOREIGN KEY al campo CODCINE. SQL> CREATE TABLE SALA ( CODSALA NUMBER (4), CODCINE NUMBER (4), NOMBRE VARCHAR2 (20), CAPACIDAD NUMBER (6) CONSTRAINT CK_CAPACIDAD CHECK (CAPACIDAD>0), CONSTRAINT PK_CODSALA PRIMARY KEY (CODSALA), CONSTRAINT FK_CODCINE FOREIGN KEY (CODCINE) REFERENCES CINE(CODCINE) ); Tabla creada. Eliminamos la tabla CINE y SALA. SQL> DROP TABLE SALA; Tabla borrada. SQL> DROP TABLE CINE; Tabla borrada. Ejemplo4: Creamos la tabla CINE para luego alterar la tabla agregando restricciones.
    • SQL> CREATE TABLE CINE ( CODCINE NUMBER (4), NOMBRE VARCHAR2 (50), DIRECCION VARCHAR2 (100), CAPACIDAD NUMBER (6), FECHAINAUG DATE ); Tabla creada. Modificamos la tabla CINE agregándole un PRIMARY KEY al campo CODCINE y un UNIQUE al campo nombre. SQL> ALTER TABLE CINE ADD CONSTRAINT PK_CODCINE PRIMARY KEY (CODCINE); Tabla modificada. SQL> ALTER TABLE CINE ADD CONSTRAINT UK_NOMBRE UNIQUE (NOMBRE); Tabla modificada. Ejemplo5: Creamos la tabla SALA para luego alterar la tabla agregando restricciones. SQL> CREATE TABLE SALA ( CODSALA NUMBER (4), CODCINE NUMBER (4), NOMBRE VARCHAR2 (20), CAPACIDAD NUMBER (6) ); Tabla creada Modificamos la tabla SALA agregando un PRIMARY KEY a CODSALA, un FOREIGN KEY a CODCINE, un CHECK a CAPACIDAD y un NOT NULL a NOMBRE. SQL> ALTER TABLE SALA ADD CONSTRAINT PK_CODSALA PRIMARY KEY (CODSALA); Tabla modificada. SQL> ALTER TABLE SALA ADD CONSTRAINT FK_CODCINE FOREIGN KEY (CODCINE) REFERENCES CINE (CODCINE); Tabla modificada.
    • SQL> ALTER TABLE SALA ADD CONSTRAINT CK_CAPACIDAD CHECK (CAPACIDAD>0); Tabla modificada SQL> ALTER TABLE SALA MODIFY (NOMBRE VARCHAR2 (20) CONSTRAINT NN_NOMBRE NOT NULL); Tabla modificada 3) Manejo de secuencias Primero estar seguros que estamos conectado con el usuario scott/tiger. SQL> connect scott/tiger Conectado. NEXTVAL: Genera una nueva secuencia. CURRVAL: Obtiene el ultimo valor de la secuencia. DUAL: Tabla auxiliar de Oracle que permite ejecutar este tipo de secuencias sin necesidad de usar la base de datos. Ejemplo1: Creamos una secuencia cuyo valor con que inicia sea 1 y el incremento sea 2. SQL> CREATE SEQUENCE MISECUENCIA START WITH 1 INCREMENT BY 2; Secuencia creada. Luego comprobamos generando una nueva secuencia una y otra vez. SQL> SELECT MISECUENCIA.NEXTVAL FROM DUAL; NEXTVAL ---------1 SQL> SELECT MISECUECNIA.NEXTVAL FROM DUAL; NEXTVAL ---------3 Ahora comprobamos cual fue el último valor de la secuencia. SQL> SELECT MISECUENCIA.CURRVAL FROM DUAL;
    • CURRVAL ---------3 Ejemplo2: Insertar un registro a la tabla departamento del esquema Scott generando el código de departamento mediante una secuencia. Muestra la información de la tabla DEPARTAMENTO del esquema SCOTT SQL> SELECT * FROM DEPT; DEPTNO --------------10 20 30 40 DNAME --------------------ACCOUNTING RESEARCH SALES OPERATIONS LOC ------------NEW YORK DALLAS CHICAGO BOSTON Creamos una secuencia para la tabla DEPT. SQL> CREATE SEQUENCE SEQ_DEPT START WITH 50 INCREMENT BY 10; Secuencia creada. Insertamos un registro a la tabla DEPT. SQL> INSERT INTO DEPT (DEPTNO, DNAME, LOC) VALUES (SEQ_DEPT.NEXTVAL, 'SISTEMA','LIMA'); 1 fila creada. Selecciona todos los campos de la tabla DEPT. Y podremos observar que hemos generado una secuencia. SQL> SELECT * FROM DEPT; DEPTNO DNAME LOC ---------- -------------- ------------10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON 50 SISTEMA LIMA Ahora ejecuta la siguiente sentencia ¿qué ocurrirá? SQL> SELECT SEQ_DEPT.NEXTVAL FROM DUAL;
    • NEXTVAL ---------60 SQL> INSERT INTO DEPT (DEPTNO, DNAME, LOC) VALUES (SEQ_DEPT.NEXTVAL, 'RRHH','LINCE'); 1 fila creada. Nuevamente seleccionamos la tabla DEPT. SQL> SELECT * FROM DEPT; DEPTNO DNAME LOC ---------- -------------- ------------10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON 50 SISTEMA LIMA 70 RRHH LINCE 6 filas seleccionadas. Eliminar una secuencia.. SQL> DROP SEQUENCE SEQ_DEPT; Secuencia borrada. 4) Manejo de índices Cuando se debe crear un índice.      Debe crear un índice si: Una columna contiene un amplio rango de valores. Una columna contiene un gran número de valores nulos. Una o más columnas se utilizan juntas frecuentemente en una clausula WHERE o en una condición de unión. La tabla es grande y se espera que la mayoría de las consultas recuperen del 10 por ciento de las filas. Cuando no se debe crear un índice.    La tabla es pequeña. Las columnas no se suelen utilizar como condición en la consulta. Se espera que la mayoría de las consultas recuperen más del 10 por ciento de las filas de la tabla.
    •   La tabla se actualiza frecuentemente. Se hace referencia a las columnas indexadas como parte de una expresión. Índices basados en funciones.  Un índice basado en función es un índice basado en expresiones.  La expresión de índice se crea desde columnas de tabla, constantes, funciones SQL y funciones definidas por el usuario Ejemplo: CREATE INDEX upper_dept_name_idx ON departamento (UPPER(department_name)); Sintaxis CREATE INDEX index ON table (column[, column] …); Ejemplo1: Estamos indicando a Oracle que cree la tabla "FACTURACION", con el campo "CODIGO" y que éste sea clave primaria, por lo que creará un índice automáticamente para este campo. Esta es una forma de crear índices, en la creación de la tabla: SQL> CREATE TABLE FACTURACION ( CODIGO NUMBER (10) NOT NULL, FECHA DATE DEFAULT SYSDATE, CODIGOCLIENTE NUMBER (10), NOMBRECLIENTE VARCHAR2 (100), OBSERVACION VARCHAR2 (2000), CONSTRAINT PK_FACTURACION_CODIGO PRIMARY KEY (CODIGO) ) TABLESPACE USERS; Tabla creada. Tras crear la tabla insertaremos algunos registros SQL> INSERT INTO FACTURACION (CODIGO, CODIGOCLIENTE, NOMBRECLIENTE) VALUES (1, 50, 'AJPDSOFT'); 1 fila creada. Ejemplo2: Crear un índice al campo NOMBRECLIENTE de la tabla FACTURACION. SQL> CREATE INDEX IN_FACTURACION_NOMBRECLIENTE ON FACTURACION (NOMBRECLIENTE); ═ndice creado. Para ver el índice creado podemos ejecutar la siguiente consulta SQL> SELECT INDEX_NAME, TABLE_NAME FROM USER_INDEXES WHERE TABLE_NAME = 'FACTURACION';
    • INDEX_NAME TABLE_NAME ------------------------------ -----------------------------PK_FACTURACION_CODIGO FACTURACION IN_FACTURACION_NOMBRECLIENTE FACTURACION Para ver el índice creado podemos ejecutar también una consulta mas especifica. SQL> SELECT INDEX_NAME NOMBRE, INDEX_TYPE TIPO, TABLE_NAME TABLA, TABLESPACE_NAME TABLESPACE, SECONDARY SECUNDARIO FROM ALL_INDEXES WHERE TABLE_NAME = 'FACTURACION'; NOMBRE TIPO TABLA TABLESPACE S ------------------------------ --------------------------- ------------------------------ ------------------------------ -PK_FACTURACION_CODIGO NORMAL FACTURACION USERS N IN_FACTURACION_NOMBRECLIENTE NORMAL FACTURACION SYSTEM N Ejemplo3: Para añadir un índice de tipo UNIQUE, obligando a que los valores del campo indexado sean unívocos, es decir no se puedan repetir en el campo de la tabla. SQL> CREATE UNIQUE INDEX IN_FACTURACION_CODCLI_FE ON FACTURACION (CODIGOCLIENTE, FECHA); ═ndice creado. De esta forma Oracle no permitirá que haya dos registros en la tabla "FACTURACION" con el mismo valor en los campos "CODIGOCLIENTE" y "FECHA", es decir, sólo podrá añadirse una factura por cliente y por día, un cliente no podrá tener dos facturas en un mismo día. Por ejemplo, si insertamos este registró: SQL> INSERT INTO FACTURACION (CODIGO, CODIGOCLIENTE, FECHA) VALUES (6900, 500, TO_DATE ('09/12/2013', 'DD-MM-YYYY')); 1 fila creada. Intentaremos insertar un segundo registro con el mismo valor en CODIGOCLIENTE y en FECHA: SQL> INSERT INTO FACTURACION (CODIGO, CODIGOCLIENTE, FECHA) VALUES (6910, 500, TO_DATE ('09/12/2013', 'DD-MM-YYYY')); INSERT INTO FACTURACION (CODIGO, CODIGOCLIENTE, FECHA) * ERROR en lÝnea 1: ORA-00001: restricci¾n ·nica (SYS.IN_FACTURACION_CODCLI_FE) violada Eliminar un índice. SQL> DROP INDEX IN_FACTURACION_NOMBRECLIENTE;
    • ═ndice borrado. SQL> DROP INDEX IN_FACTURACION_CODCLI_FE; ═ndice borrado. 5) Manejo de sinónimos  Proporciona nombre alternativos a objetos.  Se facilita la referencia a objetos pertenecientes a otros usuarios.  Reduce nombres largos de objetos.  Nombre de sinónimo.  Nombre de objeto al que lo asociamos.  Usuario creador debe tener privilegio CREATE SYNONYM. Sintaxs CREATE [PUBLIC] SYNONYM synonym FOR object; Primero conectémonos con el usuario SYS. SQL> connect sys/cibertec as sysdba Conectado. Seleccionamos la tabla CINE del esquema SCOTT desde el usuario SYS. SQL> SELECT * FROM SCOTT.CINE; ninguna fila seleccionada Ahora creamos un sinónimo para la tabla CINE del esquema SCOTT.Y comprobamos haciendo un SELECT a la tabla CINE SQL> CREATE PUBLIC SYNONYM CINE FOR SCOTT.CINE; Sin¾nimo creado. SQL> SELECT * FROM CINE; ninguna fila seleccionada Eliminar un sinónimo. SQL> DROP PUBLIC SYNONYM CINE; Sin¾nimo borrado.