GBD Diseño físico de DDBB Mª Carmen Gabarrón GBD. Diseño físico de DDBB Manual SQL de Oracle 10g http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/index.htm GBD. Diseño físico de DDBB SQL SQL es el lenguaje de consulta universal para bases de datos. SQL ANSI 92 es el estándar SQL. Existen otras variantes que lo extienden como: T-SQL (Transact-SQL) y PL/SQL (Procedure Language / SQL) SQL proporciona tres conjuntos básicos de sentencias: D.M.L (lenguaje de manipulación de datos). D.D.L (Lenguaje de definición de datos). D.C.L (Lenguaje de Control de Datos). GBD. Diseño físico de DDBB Objetos de una base de datos. Las bases de datos están compuestas básicamente por objetos: Tablas, Vistas, Funciones, Índices, Procedimientos almacenados y Trigger Base de datos Sinónimos Vistas Tablas Triggers Índices Procedimientos almacenados Funciones GBD. Diseño físico de DDBB Lenguaje de Definición de Datos DDL Este lenguaje se utiliza para la definición de objetos de la base de datos. Comandos: CREATE – para crear objetos ALTER – para modificar la estructura de objetos DROP – para eliminar objetos TRUNCATE – para eliminar todos los registros de una tabla. COMMENT – para agregar comentarios de un objeto al diccionario de datos RENAME – para cambiar el nombre de un objeto GBD. Diseño físico de DDBB Lenguaje de Manipulación de Datos DML Como su nombre indica provee comandos para la manipulación de los datos, es decir, podemos seleccionar, insertar, eliminar y actualizar datos. Comandos: SELECT – para consultar datos. INSERT – Insertar datos. UPDATE – actualizar datos. DELETE – eliminar algunos o varios registros. GBD. Diseño físico de DDBB Lenguaje de Control de Datos DCL Este lenguaje provee comandos para manipular la seguridad de la base de datos, respecto al control de accesos y privilegios entre los usuarios. Comandos: GRANT – Para otorgar privilegios a un usuario sobre un objeto. REVOKE – Para quitar privilegios dados a un usuario sobre un objeto. GBD. Diseño físico de DDBB Tipos de datos Tipos de Datos: SQL posee varios tipos de datos para almacenar información, los tipos de datos pueden ser: Numéricos (con o sin decimales). Alfanuméricos. Fecha y Hora Lógico Además, la mayoría de gestores de BD actuales soportan el tipo: BLOB (Binary Large Object), para almacenar archivos GBD. Diseño físico de DDBB Tipos de datos Dependiendo de cada gestor de bases de datos, en general, se pueden tener los siguientes: Númericos Alfanúmericos Fecha Integer Char (n) Date Numeric (n,m) Varchar (n) DateTime Decimal (n) Varchar2 (n) Float Number Lógico BLOB Bit Image Text GBD. Diseño físico de DDBB Tipos de datos más usados en Oracle (1) Tipo de dato Descripción Varchar2 (n) Caracteres de longitud variable Char (n) Caracteres de longitud fija Number (p, s) Dato numérico de longitud variable con una precisión y escala máximas de 38 Date Fecha y hora Long Caracteres de longitud variable de hasta 2 gigabytes Clob Caracteres de hasta 4 gigabytes GBD. Diseño físico de DDBB Tipos de datos más usados en Oracle (2) Tipo de dato Descripción Clob Caracteres de hasta 4 gigabytes Raw Datos binarios de longitud variable con un tamaño máximo de 2.000 bytes Long Raw Datos binarios de longitud variable con un tamaño máximo de 2 gigabytes. Blob Dato binario de hasta 4 gigabytes Bfile archivo Dato binario almacenado en un fichero externo, hasta 4 gigabytes ROWID de una fila Sistema numérico de base 64 que representa la dirección única de su tabla GBD. Diseño físico de DDBB Nomenclatura. La mayoría de la sintaxis de SQL se basa en el estándar, Extended Backus–Naur Form. Símbolo <> [] {} | Significado Encierran parámetros de una orden que el usuario debe sustituir al escribir dicha orden por los valores que queramos dar a los parámetros. Indica que su contenido es opcional. Indica que su contenido puede repetirse una o más veces. Separador de expresiones. Se debe poner al menos uno de la lista. GBD. Diseño físico de DDBB Creación de tablas en Oracle. CREATE TABLE <nombre_tabla> ( <nombre_campo> <tipo_datos> {,<nombre_campo> <tipo_datos>} ); CREATE TABLE tbEmpresa ( nit varchar(150), nombre varchar(255), ubicacion varchar(255) ); GBD. Diseño físico de DDBB Creación de tablas con SQL en Oracle. CREATE TABLE <nombre_tabla> Obligatorio ( <nombre_campo> <tipo_datos (tamaño)> Opcional [null | not null] [default <valor_por_defecto>] {,<nombre_campo> <tipo_datos(tamaño)> Puede repetirse [null | not null] [default <valor_por_defecto>]} [, constraint <nombre> primary key (<nombre_campo>)] {, constraint <nombre> foreign key (<nombre_campo> {,<nombre_campo>}) references <tabla_referenciada> ( <nombre_campo> {,<nombre_campo>} ) } ); GBD. Diseño físico de DDBB Restricciones a tablas en Oracle. DEFAULT <Valor> NOT NULL Valor por defecto: Se asigna al atributo si no se especifica otro valor. Atributo que no admite valores NULL. PRIMARY KEY Clave o llave primaria (no admite NULL). UNIQUE Llave alternativa. CHECK (<Condición>) Comprueba que se cumple esa condición (si el atributo es no nulo). GBD. Diseño físico de DDBB Restricciones a tablas en Oracle. Llave externa (foránea o ajena): Debe indicarse la tabla referenciada. FOREIGN KEY (<Clave Externa>) REFERENCES Tabla>(<Atributos>) [ON DELETE {CASCADE | SET NULL | SET DEFAULT}] [ON UPDATE {CASCADE | SET NULL | SET DEFAULT}] No incluido en Oracle Si se borra la llave referenciada, se borran las tuplas que la referencian Si se actualiza la llave referenciada, se actualizan las tuplas que la referencian Si se borra/actualiza la llave referenciada, se ponen a NULL los valores que la referencian (clave Externa o ajena). On update no incluido en Oracle Si se borra/actualiza la llave referenciada, se ponen los valores que la referencian a su valor por defecto. Oracle 10 no permite esta opción GBD. Diseño físico de DDBB Restricciones a tablas en Oracle. La clave externa (foránea o ajena): Debe indicar la tabla referenciada. FOREIGN KEY (<Clave Externa>) REFERENCES Tabla>(<Atributos>) [ON DELETE {CASCADE | SET NULL} ] GBD. Diseño físico de DDBB Creación de tablas. Ejemplo 1. CREATE TABLE tbAutos ( matricula char(8) not null, marca varchar(255), modelo varchar(255), color varchar(255) not null, numero_kilometros numeric(14,2) default 0, constraint PK_Coches primary key (matricula) ); GBD. Diseño físico de DDBB Creación de tablas. Ejemplo 2. CREATE TABLE tbProveedor ( id numeric (10) not null, nombre varchar2 (50) not null, correo varchar2 (50), CONSTRAINT pk_tbProveedor PRIMARY KEY (id, nombre) ); GBD. Diseño físico de DDBB Creación de tablas. Ejemplo 2.2 CREATE TABLE tbProducto ( id numeric (10) not null, tbProveedor_id numeric (10) not null, tbProveedor_nombre varchar2 (50) not null, nombre varchar2 (50) not null, cantidad numeric (10) not null, CONSTRAINT pk_tbProducto PRIMARY KEY (id, tbProveedor_id, tbProveedor_nombre), CONSTRAINT fk_tbProducto_tbProveedor FOREIGN KEY (tbProveedor_id, tbProveedor_nombre) REFERENCES tbProveedor(id, nombre) ); GBD. Diseño físico de DDBB Creación de tablas. Ejemplo 2.3 Ejemplo ON DELETE SET NULL, ON DELETE CASCADE: CREATE TABLE dept_20 (employee_id NUMBER(4) PRIMARY KEY, last_name VARCHAR2(10), job_id VARCHAR2(9), manager_id NUMBER(4) CONSTRAINT fk_mgr REFERENCES employees ON DELETE SET NULL, hire_date DATE, salary NUMBER(7,2), ommission_pct NUMBER(7,2), department_id NUMBER(2) CONSTRAINT fk_deptno REFERENCES departments (department_id) ON DELETE CASCADE ); Si consultamos "user_constraints", en la columna "delete_rule" mostrará "cascade". select * from user_constraints GBD. Diseño físico de DDBB Borrado de tablas. DROP TABLE <nombre_tabla>; DROP TABLE tbProducto ; GBD. Diseño físico de DDBB Aclaraciones. Después de crear las tablas anteriores, ¿cuál seria el orden de eliminación? DROP TABLE <nombre_tabla>; GBD. Diseño físico de DDBB Aclaraciones. ¿Cuál es la diferencia entre char, varchar, varchar2? Char (n): Se usa para almacenar cadenas de longitud fija. Si la longitud de la cadena es menor que n, el espacio restante NO es liberado. Varchar2 (n): Se usa para almacenar cadenas de longitud variable. Si la longitud de la cadena es menor que n, el espacio restante es liberado. Varchar (n): funciona igual que varchar2; sin embargo, no es recomendado usarlo, dado que Oracle lo tiene reservado para usos futuros GBD. Diseño físico de DDBB Modificación de tablas con SQL en Oracle. ALTER TABLE <table_name> add [CONSTRAINT <constraint_name> FOREIGN KEY (<column1>, column2, ... column_n) REFERENCES parent_table (column1, column2, ... column_n)]; Permite: Añadir campos a la estructura inicial de una tabla. Añadir restricciones y referencias. Nota: para ver los atributos de una tabla, se usa el comando DESCRIBE <nombre_tabla>; GBD. Diseño físico de DDBB Modificación de tablas. Ejemplo 1. Veamos los campos de la tabla tbProducto antes de modificarla. DESCRIBE tbProducto; Se agregan dos campos: ALTER TABLE tbProducto ADD calidad number(10) default 4; ALTER TABLE tbProducto ADD calidad2 number(10) default 5; Veamos los campos de la tabla tbProducto después de modificarla. DESCRIBE tbProducto; GBD. Diseño físico de DDBB Modificación de tablas. Ejemplo 2. Veamos los campos de la tabla tbProducto antes de modificarla. DESCRIBE tbProducto; Se elimina un campo: ALTER TABLE tbproducto DROP COLUMN calidad2; Veamos los campos de la tabla tbProducto después de modificarla. DESC tbProducto; GBD. Diseño físico de DDBB Modificación de tablas. Ejemplo 3. Ahora se desea que el campo CALIDAD forme parte de la clave primaria de la tabla Producto. Consultar las columnas que pertenecen a la clave primaria de la tabla TBPRODUCTO. SELECT COLUMN_NAME FROM user_cons_columns ucc JOIN user_constraints uc ON ucc.constraint_name=uc.constraint_name WHERE ucc.TABLE_NAME = 'TBPRODUCTO' AND uc.CONSTRAINT_NAME = 'PK_TBPRODUCTO' ; Las tablas en rojo son del sistema. GBD. Diseño físico de DDBB Modificación de tablas. Ejemplo 3. Modificar la clave primaria de TBPRODUCTO. ALTER TABLE tbproducto DROP CONSTRAINT PK_TBPRODUCTO; ALTER TABLE tbProducto ADD CONSTRAINT pk_tbProducto PRIMARY KEY (id, tbProveedor_id, tbProveedor_nombre, calidad); Se comprueba si efectivamente se hizo el cambio. SELECT COLUMN_NAME FROM user_cons_columns ucc JOIN user_constraints uc ON ucc.constraint_name=uc.constraint_name WHERE ucc.TABLE_NAME = 'TBPRODUCTO' AND uc.CONSTRAINT_NAME = 'PK_TBPRODUCTO' ; GBD. Diseño físico de DDBB Modificación de tablas. Ejemplo 4. En la siguiente dirección pueden encontrarse más ejemplos sobre el uso de ALTER. http://www.techonthenet.com/sql/tables/alter_table.php Por ejemplo, cambiar el nombre de un campo: ALTER TABLE <table_name> RENAME COLUMN <old_name> to <new_name>; GBD. Diseño físico de DDBB select * from user_tables