En mas de alguna ocasión vamos a necesitar utilizar validaciones en algunos campos de nuestras tablas, cuando me refiero a restricciones de validación me refiero por ejemplo a lo siguiente, si tengo un campo edad sería buena idea colocarle una validación para que solo acepte números entre 0 y 100, u otro ejemplo si tengo un campo para el género puedo colocar una validación para que solo acepte “M” o “F”, y por ejemplo si tengo un campo donde se almacenarán los meses del año en formato numérico, puedo colocarle una validación para que solo me acepte números entre el 1 y el 12. Para esto utilizamos el comando CHECK, como pueden ver en el ejemplo estoy utilizando el comando check para que en el campo Precio solo ingresen precios entre Q 0.00 y Q999.99, fuera de ese rango no ingresara el valor.
domingo, 29 de enero de 2012
Tablas–Integridad Referencial
Retomando el tema de las Tablas y las restricciones es bueno recordar de que la Integridad Referencial es algo importante en las Bases de Datos pero a veces provoca algunos problemas como por ejemplo, cuando intentamos eliminar un registro de una tabla principal que esta relacionado con uno varios registros de una tabla secundaria, esto es correcto que suceda para no perder la integridad en la información, pero cuando necesitemos hacer esto podemos utilizar los siguientes métodos para solucionar nuestros inconvenientes, para esto Oracle nos da dos soluciones que podemos agregar después de la cláusula REFERENCES
ON DELETE SET NULL Coloca nulos en todas las claves secundarias de los registros que tengan relación con la clave primaria que va a ser eliminada.
ON DELETE CASCADE Borra todos los registros con claves secundarias que estén relacionadas con la clave principal que va a ser eliminada.
Ahora bien cuando tengamos la necesidad de actualizar una llave primaria, que tenga una o varias llaves foráneas relacionadas, podemos hacerlo de dos formas.
- Crear un Trigger, para que cuando se actualice la llave primaria, se actualicen automáticamente las llaves foráneas relacionadas.
- Ingresar un nuevo registro con la nueva llave primaria, luego por medio de un UPDATE, actualizar todos los registros con llave foránea cuyo valor coincida con la llave primaria antigua, luego eliminar el registro con la llave primaria antigua.
jueves, 26 de enero de 2012
Tablas–Llaves Primaria y Foráneas
CLAVES PRIMARIAS
Una clave primaria se utiliza como identificador único, esto quiere decir que automáticamente una llave primaria queda como NOT NULL o sea que no va a recibir valores nulo y también UNIQUE porque no va a permitir valores repetidos, para definir una llave primaria hacemos uso del comando PRIMARY KEY. como podemos ver en el ejemplo creamos una tabla llamada libro con dos campos el primer campo que es codigo será nuestra llave primaria y utilizamos el comando mencionado anteriormente. Esto también lo podemos realizas haciendo uso de constraint para que nosotros seamos quien le coloquemos el nombre a nuestra llave primaria, en este caso el nombre que le colocamos fue codigo_pk utilizamos el nombre del campo y al final agregamos la abreviatura pk para hacer referencia a que se trata del nombre de una clave primaria. En algún momento tendremos que hacer esto pero usando como llave primaria varios campos lo haremos de la siguiente manera. Como podemos ver en este caso utilizamos los dos campos como llaves primaria, primero que nada utilizamos el comando constraint, luego escribimos el nombre de la llave primaria en este caso se llama libro_pk, luego el tipo de restricción en este caso primary key y por ultimo dentro de paréntesis escribimos los nombres de las columnas que formaran parte de la llave primaria en este caso están los nombres de las dos columnas.
LLAVE SECUNDARIA O FORÁNEA
Se compone de uno o más campos que estén relacionado con la clave principal de otra tabla , coloco como ejemplo la siguiente imágen.
Recordemos que una FK (Clave Foránea) es una referencia a una clave en otra tabla, determina la relación existente en dos tablas. Las claves foráneas no necesitan ser claves únicas en la tabla donde están y sí a donde están referenciadas. Por ejemplo, el #Cliente puede ser una clave foránea en la tabla de VENTAS. Se permite que haya varios ventas para un mismo cliente, pero habrá uno y sólo un #Cliente por cliente que ingrese a la tabla CLIENTES.
Al momento de crear la tabla tienda lo hacemos de la siguiente manera
como pueden ver en este caso nos a saltado un error, el cual aprovecho para mencionar porque se ha dado y esto fue porque si se dan cuenta en el constraint que esta haciendo referencia a una tabla llamada dueños, esta tabla no existe y por esto nos ha dado el error, procedemos entonces a crear la tabla dueños esto para fines de ejemplo, una vez creada esta tabla procedemos nuevamente a ejecutar nuestros script anterior. ahora vemos como al momento de ejecutarlo todo funciona perfectamente y tenemos ya asignada una llave foránea llamada tienda_fk le colocamos fk al final para distinguir que se trata del nombre de una llave foránea y como se puede observar está haciendo referencia a la tabla dueño en su campo codigo.
INTEGRIDAD REFERENCIAL
Cuando se toca el tema de las llaves primarias y secundarias no podemos dejar a un lado el recordatorio del tema de la integridad referencial, esta es una propiedad que tienen las BD, gracias a ella se garantiza que una fila o registro de una tabla tienes relación con una uno o mas registros de otras tablas, esto asegura que no existan datos repetidos o datos perdidos. Por ejemplo esto sirve cuando tengo una tabla padre llamada Hospital en la cual tengo registrado un código y un nombre del hospital y que esta haga referencia a una tabla empleado que tenga código y nombre del empleado, esto quiere decir que no puedo eliminar la tabla hospital si aun tengo empleados que tengan relación con el código del hospital que quiero borrar, a menos que primero borre todos los empleados con un código en común y luego borrar de la tabla hospital, el hospital con el código de los empleados que ya han sido borrados. Hasta el momento todas la BD relacionales tienen esta propiedad esto porque el SGBD se encarga de supervisar que esto se cumpla.
martes, 24 de enero de 2012
Tablas – Restricciones
- Llaves primarias
- Llaves Foráneas
- Valores únicos
- No permitir valores nulos (Vacíos)
jueves, 19 de enero de 2012
Tablas - Valores por defecto
A cada columna de la tabla se le pueden asignar valores predeterminados o por defecto como quieran llamarlos, esto al momento de la creación del objeto y para esto utilizamos el comando DEFAULT luego de esto el tipo de datos del campo y adicional a ello el valor que se desea por defecto. Por ejemplo:
En este caso se creo una tabla llamada producto en la cual el campo precio se estará llenando con el valor por defecto 3.5.
miércoles, 18 de enero de 2012
Tablas - Modificación de Tablas
alter table NombreTabla add
(
NombreColumna TipoDato,
NombreColumaSig TipoDato,
...
);
Para esto vamos a utilizar el comando DROP, tomando en cuenta de que esto elimina la columna que se indique de manera irreversible y obviamente incluyendo los datos que la columna contenía. La sintaxis para hacer esto es la siguiente:
alter table NombreTabla dropAdicional a esto, cuando una tabla ya solo tiene una solo columna y la queremos eliminar, no lo vamos a poder hacer de esta forma, para este caso especial vamos a utilizar la instrucción DROP TABLE. En este ejemplo preciso he borrado la columna edad de la tabla estudiante.
(
NombreColumna
);
Para esto vamos a utilizar el comando MODIFY, esto permite cambiar el tipo de datos y las propiedades de una determinada columna. La sintaxis para hacer esto es la siguiente:
alter table NombreTabla modifyNombreColumna NuevoTipo(Propiedades)
(
NombreColumna NuevoTipo(Propiedades),
);Los cambios que se permiten realizar, son:
- El poder modificar el tamaño de un campo
- Solo se puede modificar el tamaño de un campo, cuando toda la columna no tenga ningún registro.
- Se puede pasar de char a varchar2 pero si no se modifica el tamaño del campo
Bueno primero vamos a ver como esta nuestra tabla actualmente y observen bien los tipos de datos de los campos nombre y apellido.
Ahora utilizando el comando modify para modificar la estructura de nuestra tabla.
comment on table NombreTabla ó NombreTabla.NombreColuma
is 'Comentario Respectivo';
- Si queremos ver los comentarios de las tablas del usuario actual USER_TAB_COMMENTS
- Si queremos ver los comentarios de las columnas del usuario actual USER_COL_COMMENTS
- Si queremos ver los comentarios de las tablas de todos los usuarios ALL_TAB_COMMENTS para esto solo tienen acceso los Administradores.
- Si queremos ver los comentarios de las tablas de todos los usuarios ALL_COL_COMMENTS para esto solo tienen acceso los Administradores.
martes, 17 de enero de 2012
Tipos de Datos
- VARCHAR2(n) para textos con una longitud variable con un máximo de 4000 caracteres.
- CHAR(n) para textos de longitud fija con un máximo de 2000 caracteres.
- Nombre varchar2(25)
- Sexo char
Formato |
No. Escrito por el usuario |
Se almacena como |
number |
345255.345 |
345255.345 |
number(9) |
345255.345 |
345255 |
number(9,2) |
345255.345 |
345255.35 |
number(7) |
345255.345 |
Da error |
number(7,-2) |
345255.345 |
345300 |
number(7,2) |
345255.345 |
Da error |
FECHAS Y HORAS
Para esto podemos utilizar el comando DATE, ya que este es el que permite almacenar las fechas incluidas las horas según el formato que utilicemos, por ejemplo si queremos almacenar la fecha 31/12/2011 utilizaríamos el siguiente formato DD/MM/YYYY estos separados con una diagonal o con guiones.Otro ejemplo si queremos guardar la hora 07:35:45 utlizamos el formato HH:MI:SS separados por los dos puntos.
Si en su momento queremos almacenar la fecha actual, utilizaremos el comando SYSDATE ya sea al realizar una consulta o al hacer inserciones en la BD.
lunes, 16 de enero de 2012
Tablas - Describe, Insert, Select, Drop
Luego al utilizar el comando describe podemos ver la estructura de esta tabla:
insert into tabla
(columa1, columna2, columna3, ...)
values
(valor1, valor2, valor3, ...)
;
- Toda la data de la Tabla desaparece
- Cualquier vista y sinónimo, seguirá existiendo pero por obvias razones estas ya no van a funcionar así que es conveniente eliminarlas,
- Esta instrucción solo la pueden correr los propietarios de los objetos, en este caso la tabla, solo el propietario de la misma puede correr este comando sobre el nombre de su tabla. O si de cierta manera se tiene el privilegio de DROP ANY TABLE
domingo, 15 de enero de 2012
Tablas - Creación de Tablas
- Deben de comenzar siempre por una letra.
- Se pueden usar letras del alfabeto inglés, números y el signo de subrayado.
- El nombre de la tabla no debe de tener mas de 30 caracteres.
- No pueden existir dos tablas con el mismo nombre para el miso usuario/esquema.
- No debe coincidir con el nombre de ninguna palabra reservada de Word.
Como información adicional, al momento de crear tablas en la BD, existen dos puntos de vista, escribir los nombres de las tablas en Singular o en Plural, En lo personal lo hago en singular, esto porque me permite abstraer de mejor manera la información que se maneja en la BD. La forma en como ustedes lo hagan se los dejo de tarea. www.google.com
create table NombreTabla
(
NombreColumna1 TipoColuma1
);
Por ejemplo:
create table alumno
(
Codigo number(4) primary key,
Nombre varchar2(50)
);
Con esto acabo de crear una Tabla llamada Alumno, que tiene dos campos, un campo llamado Código de tipo número con un máximo de 4 dígitos siendo este la Clave Primaria y un campo llamado Nombre de tipo Caracter con un máximo de 50 Caracteres.
Mas adelante les ampliare mas el tema acerca del Tipo de Datos que se pueden usar en Oracle y sobre las restricciones que se pueden aplicarle a las tablas.
viernes, 13 de enero de 2012
Esquemas de Usuarios y Objetos
jueves, 12 de enero de 2012
Estructura de Lenguaje SQL
- Insert: Permite insertar registros en las tablas
- Update: Permite Actualizar el contenido de los registros dentro de las tablas
- Delete: permite borrar registros de una tabla
- Create: Permite crear una tabla
- Drop: Permite eliminar la tabla por completo incluyendo toda su estructura
- Truncate: Permite eliminar el contenido completo de una tabla, similar al comando DELETE pero este es más rápido, en su momento les indicaré porque razón.
- Rename: Permite cambiar el nombre de una tabla.
- Alter: Permite alterar la estructura de una tabla, agregando columnas, modificando tipos de datos, etc.
- Grant: Permite asignar permisos.
- Revoke: Permite retirar los permisos.
- Commit: Se usa para confirmar algún tipo de modificación realizada en la BD.
- Rollback: Se usa para deshacer algún tipo de modificación realizada en la BD.
- Savepoint: Marca un punto de referencia en alguna modificación para poder hacer un Rollback parcial. Algo similar a como funciona un punto de restauración.
- Cabe mencionar que existe sentencias SQL que se auto-confirman y estas no se pueden regresar.