Tema 2 - BD
Tema 2 - BD
Tema 2 - BD
1. Modelos de datos
Según el DRAE, un modelo es, entre otras definiciones, el esquema teórico,
generalmente en forma matemática, de un sistema o de una realidad compleja. Podemos decir
que es la representación de cualquier aspecto o tema extraído del mundo real.
¿Qué sería entonces un modelo de datos? Aquél que nos permite describir los
elementos que intervienen en una realidad o en un problema dado y la forma en que se
relacionan dichos elementos entre sí.
Existen tres fases de modelado en el diseño de una base de datos basadas en el nivel de
abstracción, es decir, en lo alejado que esté del mundo real y que deben ser realizadas en orden:
Los SGBD comerciales se basan en un modelo lógico concreto. Por ej. Oracle en el
modelo relacional.
Tema 2 – Bases de datos
El modelo relacional fue propuesto por Edgar Frank Codd en los laboratorios de IBM en
California. Como hemos visto, se trata de un modelo lógico que establece una estructura sobre
los datos, independientemente del modo en que luego los almacenemos. Es como si guardamos
nuestra colección de libros, dependiendo del número de habitaciones que tenga en casa, del
tamaño y forma de nuestras estanterías, podremos disponer nuestros libros de un modo u otro
para facilitarnos el acceso y consulta. Los libros serán los mismos, pero puedo disponerlos de
distinta forma.
Es importante recordar que el diseño de las tablas del modelo relacional es la segunda
fase del diseño de la base de datos y previamente se ha realizado el diseño conceptual
identificando, tras el análisis, las tablas o relaciones resultantes, sus atributos, restricciones y
relaciones.
El producto cartesiano nos dará la relación de todos los elementos de un conjunto con
todos los elementos de los otros conjuntos de ese producto. Al estar trabajando con conjuntos,
no puede haber elementos repetidos.
Por ejemplo, para los dos conjuntos que se presentan en la imagen, uno denominado
Marcas que contiene marcas de coches y otro denominado Modelos que contiene diferentes
modelos el resultado de la operación de producto cartesiano será la combinación de todos los
elementos de un conjunto con los del otro.
Pero... ¿qué es eso de “relación”? Hemos dicho que el modelo relacional se basa en el
concepto matemático de relación, ya que Codd, que era un experto matemático, utilizó una
Tema 2 – Bases de datos
A partir de ahora, nosotros veremos una relación como una tabla con filas y columnas.
Podemos asociar atributos a columnas y tuplas a filas.
Cada una de las filas de la tabla se corresponde con la idea de registro y tiene que
cumplir que:
o No puede haber dos tuplas iguales (con todos los valores iguales).
Está claro que un atributo en una tupla no puede tomar cualquier valor. No sería lógico
que en un atributo Población se guarde "250€". Estaríamos cometiendo un error, para evitar
este tipo de situaciones obligaremos a que cada atributo sólo pueda tomar los valores
pertenecientes a un conjunto de valores previamente establecidos, es decir, un atributo tiene
asociado un dominio de valores.
Una característica fundamental de los dominios es que sean atómicos, es decir, que los
valores contenidos en los atributos no se pueden separar en valores de dominios más simples.
• Nombre: Sueldo.
• Formato: 9.999€.
Ya hemos visto que una relación es una tabla con filas y columnas. Pero ¿hasta cuántas
columnas puede contener? ¿Cuántos atributos podemos guardar en una tabla?
2.3. Sinónimos
Los términos vistos hasta ahora tienen distintos sinónimos según la nomenclatura
utilizada. Trabajaremos con tres:
• Como hemos visto antes, cada atributo (columna) de la tabla toma un solo valor en
cada tupla (fila).
• Cada atributo (columna) tiene un nombre distinto en cada tabla (pero puede ser el
mismo en tablas distintas).
• No puede haber dos tuplas (filas) completamente iguales
Tema 2 – Bases de datos
• Todos los datos de un atributo (columna) deben ser del mismo dominio.Si hemos
definido que el dominio del atributo Nota sólo admite los valores Aprobado o
Suspenso entonces el dato NOTABLE sería incorrecto ya que no pertenece al
dominio
4. Tipos de datos
¿Qué es un DNI? ¿Con qué datos lo representamos? El DNI es una información que es
susceptible de ser guardada. Normalmente el DNI está formado por dígitos y una letra al final.
Si tuviéramos que clasificarlo diríamos que es un conjunto de caracteres alfanuméricos. ¿Y si
pensamos en Sueldo? Aquí lo tenemos un poco más claro, evidentemente es un número entero
o con decimales.
Hasta ahora hemos visto que vamos a guardar información relacionada en forma de filas
y columnas. Las columnas son los atributos o información que nos interesa incluir del mundo
real que estamos modelando.
Hemos visto que esos atributos se mueven dentro de un dominio, que formalmente es
un conjunto de valores. Pues bien, en términos de sistemas de base de datos, se especifica
indicando el tipo de dato (de forma general) y el conjunto de valores que puede tomar (de forma
restringida). El conjunto de valores restringidos se le indicará en la definición de la tabla si el
SGBD lo permite.
Al crear la relación (tabla) decidimos qué conjunto de datos deberá ser almacenado en
los atributos de las filas. Tenemos que asignar un tipo de dato a cada atributo.
Cada campo:
• debe tener asociado un Tipo de dato que determinará qué valores puede tomar y
qué operaciones se pueden realizar con ellos.
Existen distintas formas de nombrar los tipos de datos dependiendo del lenguaje que
utilicemos (C, Java, PHP, MySQL, SQL, Pascal, etc.).
Veamos cuales son los tipos de datos más comunes y habituales, existentes en la
mayoría de los lenguajes, que posteriormente se definirán utilizando la sintaxis específica del
lenguaje elegido.
• Texto: almacena cadenas (conjunto) de caracteres: números con los que no vamos
a realizar operaciones matemáticas, letras o símbolos.
• Moneda: pero con una característica especial, y es que los valores representan
cantidades de dinero.
• Objeto OLE: almacena gráficos, imágenes o textos creados por otras aplicaciones.
Para determinar qué tipo de dato se asocia a cada atributo se tiene en cuenta el conjunto
de valores que puede tomar y las operaciones que hay que realizar con él.
Un código postal, por ejemplo 06800, a pesar de estar formado por dígitos numéricos,
es mejor definirlo como una cadena de 5 caracteres por dos motivos: porque no se va a realizar
operaciones matemáticas con él y porque los ceros a la izquierda no deben ser obviados como
si fuera numérico. El número de teléfono se encuentra en un caso similar.
5. Claves
Hemos visto que una característica de las tablas era que no puede haber dos tuplas (filas)
completamente iguales, con lo que podemos decir que toda la fila como conjunto sería una
superclave.
• {login, e_mail}
• {login}
Tendríamos que elegir alguna de las superclaves para diferenciar las tuplas. En el modelo
relacional trabajamos con tres tipos de claves:
• Claves candidatas.
Tema 2 – Bases de datos
• Claves primarias.
• Claves alternativas.
• Claves ajenas.
Si puedo elegir entre tantas claves, ¿con cuál me quedo? Tendremos que elegir entre las
claves "candidatas" la que mejor se adapte a mis necesidades. ¿Y cuáles son éstas? Las claves
candidatas serán aquel conjunto de atributos que identifiquen de manera única cada tupla (fila)
de la relación (tabla). Es decir, las columnas cuyos valores no se repiten en ninguna otra fila de
la tabla. Por tanto, cada tabla debe tener al menos una clave candidata aunque puede haber
más de una.
Siguiendo con nuestro ejemplo, podríamos considerar los atributos Login o E_mail como
claves candidatas, ya que sabemos que el Login debe ser único para cada usuario, a E_mail le
sucede lo mismo. Pero también cabe la posibilidad de tomar: Nombre, Apellidos y F_nacimiento,
las tres juntas como clave candidata.
Las claves candidatas pueden estar formadas por más de un atributo, siempre y cuando
éstos identifiquen de forma única a la fila. Cuando una clave candidata está formada por más de
un atributo, se dice que es una clave compuesta.
• Unicidad: no puede haber dos tuplas (filas) con los mismos valores para esos
atributos.
Para identificar las claves candidatas de una relación no nos fijaremos en un momento
concreto en el que vemos una base de datos. Puede ocurrir que en ese momento no haya
duplicados para un atributo o conjunto de atributos, pero esto no garantiza que se puedan
producir. El único modo de identificar las claves candidatas es conociendo el significado real de
los atributos (campos), ya que así podremos saber si es posible que aparezcan duplicados. Es
posible desechar claves como candidatas fijándonos en los posibles valores que podemos llegar
a tener. Por ejemplo, podríamos pensar que Nombre y Apellidos podrían ser una clave
candidata, pero ya sabemos que cabe la posibilidad de que dos personas puedan tener el mismo
Nombre y Apellidos, así que lo descartamos.
Hasta ahora, seguimos teniendo varias claves con la que identificamos de modo único
nuestra relación. De ahí el nombre de candidatas. Hemos de quedarnos con una.
Tema 2 – Bases de datos
La clave primaria de una relación es aquella clave candidata que se escoge para
identificar sus tuplas de modo único. Ya que una relación no tiene tuplas duplicadas, siempre
hay una clave candidata y, por lo tanto, la relación siempre tiene clave primaria. En el peor caso,
la clave primaria estará formada por todos los atributos de la relación, pero normalmente habrá
un pequeño subconjunto de los atributos que haga esta función. En otros casos, podemos crear
un campo único que identifique las tuplas, por ejemplo, un código de usuario, que podrían estar
constituidos por valores autonuméricos.
Las claves candidatas que no son escogidas como clave primaria son denominadas
claves alternativas.
Si en nuestra tabla Usuarios escogemos Login como clave primaria, el E_mail o {Nombre,
Apellidos, F_Nacimiento} serán nuestras claves alternativas.
Hasta ahora no nos hemos planteado cómo se relacionan unas tablas con otras dentro
de una base de datos. Si tenemos las tablas Usuarios y Partidas, necesariamente habrá una
"relación" entre ellas. Deben compartir algún dato en común que las relacione. Una partida es
jugada por un jugador (Usuarios), por lo que en la tabla Partida deberíamos guardar algún dato
del usuario-jugador, pero ¿cuál?
Es lógico que las claves ajenas no tengan las mismas propiedades y restricciones que
tienen como clave primaria en su tabla, por tanto, sí que pueden repetirse en la tabla. En nuestro
ejemplo, un mismo jugador puede jugar varias partidas.
Las claves ajenas tienen por objetivo establecer una conexión con la clave primaria que
referencian. Por lo tanto, los valores de una clave ajena deben estar presentes como clave
primaria en la tabla a la que hacen referencia, o bien deben ser valores nulos. En caso
contrario, la clave ajena representaría una referencia o conexión incorrecta, lo que supondría
que la información almacenada es inconsistente (no fiable). Imagina un código de jugador en la
tabla Partidas que no se corresponde con ningún jugador de la tabla Usuarios.
6. Índices: Características
Pues bien, en las bases de datos, cada tabla se divide internamente en páginas de datos,
y se define el índice a través de un campo (o campos) y es a partir de este campo desde donde
se busca.
Un índice es una estructura de datos que permite acceder a diferentes filas de una
misma tabla a través de un campo o campos. Esto permite un acceso mucho más rápido a los
datos.
Los índices son útiles cuando se realizan consultas frecuentes a un rango de filas o una
fila de una tabla. Por ejemplo, si consultamos los usuarios cuya fecha de ingreso es anterior a
una fecha concreta.
Los cambios en los datos de las tablas (agregar, actualizar o borrar filas) son
incorporados automáticamente a los índices con transparencia total.
Debes saber que los índices son independientes, lógica y físicamente de los datos, es por
eso que pueden ser creados y eliminados en cualquier momento, sin afectar a las tablas ni a
otros índices.
Si se elimina un índice, el acceso a datos puede ser más lento a partir de ese momento.
El SGBD utiliza índices para la gestión de las claves ajenas y de las claves primarias. En el
caso de las claves primarias serán índices únicos (no admiten valores repetidos).
¿Qué sucede si al guardar los datos de los Usuarios hay algún dato que no tengo o no
necesito guardarlo porque no corresponde?
Cuando trabajamos con claves secundarias el valor nulo indica que la tupla o fila no está
relacionada con ninguna otra tupla o fila. Este valor NULO es común a cualquier dominio.
Un ordenador tomará un espacio en blanco como un carácter como otro cualquiera. Por
tanto, si introducimos el carácter "espacio en blanco" estaríamos introduciendo un valor que
pertenecería al dominio texto y sería distinto al concepto "ausencia de valor" que sería no
incluir nada (nulo).
Este valor se va a utilizar con frecuencia en las bases de datos y es imprescindible saber
cómo actúa cuando se emplean operaciones lógicas sobre ese valor. En la lógica
booleana tenemos los valores VERDADERO y FALSO, pero un valor NULO no es ni verdadero ni
falso.
Cuando necesitemos comparar dos campos, si ambos son nulos no podremos obtener
ni verdadero ni falso. Necesitaremos definir la lógica con este valor. Veamos los operadores
lógicos más comunes y sus resultados utilizando el valor nulo:
En todas las bases de datos relacionales se utiliza un operador llamado IS NULL (ES
NULO) que devuelve VERDADERO si el valor con el que se compara es NULO.
8. Vistas
Cuando vimos los distintos tipos de relaciones, aprendimos que, entre otros, estaban las
vistas. Ahora ya tenemos más conocimientos para comprender mejor este concepto.
Una vista es una tabla "virtual" cuyas filas y columnas se obtienen a partir de una o de
varias tablas que constituyen nuestro modelo. Lo que se almacena no es la tabla en sí, sino su
definición, por eso decimos que es "virtual". Una vista actúa como filtro de las tablas a las que
hace referencia en ella.
La consulta que define la vista puede provenir de una o de varias tablas, o bien de otras
vistas de la base de datos actual u otras bases de datos.
Tema 2 – Bases de datos
Podemos dar dos razones por las que queramos crear vistas:
• Seguridad, nos puede interesar que los usuarios tengan acceso a una parte de la
información que hay en una tabla, pero no a toda la tabla.
Las vistas no tienen una copia física de los datos, son sentencias de consultas a los datos
que hay en las tablas, por lo que, si actualizamos los datos de una vista, estamos actualizando
realmente la tabla, y si actualizamos la tabla estos cambios serán visibles desde la vista.
Pero no todos los usuarios deberían poder hacer lo mismo cuando acceden a la base de
datos. Por ejemplo, un administrador debería tener más privilegios que un usuario que quiere
realizar una simple consulta.
¿Qué es un privilegio? No es más que un permiso dado a un usuario para que realice
ciertas operaciones, que pueden ser de dos tipos:
¿Y no sería interesante poder agrupar esos permisos para darlos juntos? Para eso
tenemos el rol.
Podemos tener a un grupo determinado de usuarios que tengan permiso para consultar
los datos de una tabla concreta y no tener permiso para actualizarlos. Luego un rol permite
asignar un grupo de permisos a un usuario. De este modo, si asignamos un rol con 5 permisos a
200 usuarios y luego queremos añadir un permiso nuevo al rol, no tendremos que ir añadiendo
este nuevo permiso a los 200 usuarios, ya que el rol se encarga de propagarlo automáticamente.
10. SQL
Hablamos por tanto de un lenguaje normalizado que nos permite trabajar con cualquier
tipo de lenguaje (ASP o PHP) en combinación con cualquier tipo de base de datos (Access, SQL
Server, MySQL, MariaDB, Oracle, etc.).
El hecho de que sea estándar no quiere decir que sea idéntico para cada base de datos.
Así es, determinadas bases de datos implementan funciones específicas que no tienen
necesariamente que funcionar en otras.
SQL posee dos características muy apreciadas, potencia y versatilidad, que contrastan
con su facilidad para el aprendizaje, ya que utiliza un lenguaje bastante natural. Es por esto que
las instrucciones son muy parecidas a órdenes humanas. Por esta característica se le considera
un Lenguaje de Cuarta Generación.
Aunque frecuentemente oigas que SQL es un "lenguaje de consulta", ten en cuenta que
no es exactamente solo eso ya que contiene muchas otras capacidades además de la de
consultar la base de datos:
• su manipulación (DML)
Por tanto, el lenguaje estructurado de consultas SQL es un lenguaje que permite operar
con los datos almacenados en las bases de datos relacionales.
• SQL interpretado: Podemos usar un entorno gráfico para escribir y ejecutar las
sentencias (nosotros utilizaremos SQLDeveloper) o bien desde SQL*Plus que es el
programa de línea de comandos de Oracle que permite
ejecutar comandos SQL y PL/SQL de forma interactiva.
Tema 2 – Bases de datos
En el Anexo III de esta unidad tienes los pasos a seguir para descargarte e instalarte
SQLDeveloper y dar los primeros pasos.
Imagínate que cada programador utilizara sus propias reglas para escribir. Esto sería un
caos. Es muy importante establecer los elementos con los que vamos a trabajar y unas normas
que seguir.
• COMANDOS: Van a ser las instrucciones que se pueden crear en SQL. Se pueden
distinguir en tres grupos que veremos con más detenimiento a lo largo de las
siguientes unidades:
• Cualquier comando puede ser partido con saltos de línea o espacios para facilitar su
lectura y comprensión.
Juan le ha dicho a Ana que es hora de ponerse a trabajar con la aplicación. Para aprender
mejor le ha pedido permiso a Juan para instalar Oracle en su ordenador y así ir probando
todo sobre la marcha para no cometer errores. El SQL estándar y el SQL de Oracle son
bastante parecidos, pero con algunas diferencias.
La primera fase del trabajo con cualquier base de datos comienza con sentencias DDL,
puesto que antes de poder almacenar y recuperar información debemos definir las estructuras
donde almacenar la información. Las estructuras básicas con las que trabaja SQL son las tablas.
Es cierto que estas herramientas nos facilitan el trabajo, pero resulta imprescindible
comprender y conocer en profundidad el lenguaje, ya que nos veremos en muchas situaciones
donde necesitaremos crear un objeto, modificarlo o eliminarlo sin depender de esas
herramientas visuales.
En Oracle, cada usuario de una base de datos tiene un esquema, que tendrá el mismo
nombre que el usuario con el que se ha accedido y sirve para almacenar los objetos que posea
ese usuario.
¿De qué objetos estamos hablando? Éstos podrán ser tablas, vistas, índices u otros
objetos relacionados con la definición de la base de datos. ¿Y quién puede crear y manipularlos?
En principio el usuario propietario (el que los creó) y los administradores de la base de datos.
Más adelante veremos que podemos modificar los privilegios de los objetos para permitir el
acceso a otros usuarios.
Las instrucciones DDL generan acciones que no se pueden deshacer, por eso es
conveniente usarlas con precaución y tener copias de seguridad cuando manipulamos la base
de datos.
Crear una base de datos implica indicar los archivos y ubicaciones que se van a utilizar
además de otras indicaciones técnicas y administrativas. Es obvio que todo esto sólo lo puede
realizar si se tiene privilegio de Administrador.
Con el estándar de SQL la instrucción a usar sería Create Database, pero cada SGBD tiene
un procedimiento para crear las bases de datos. Crearíamos una base de datos con el nombre
que se indique a continuación.
CREATE DATABASE NombredemiBasedeDatos;
Tema 2 – Bases de datos
Por ejemplo, a la base de datos que están creando Juan y Ana se le va a llamar
RyMjuegos, entonces nos quedaría:
CREATE DATABASE RyMjuegos;
Hemos estado hablando de objetos de la base de datos, ahora veremos a qué nos
referimos.
Según los estándares, una base de datos es un conjunto de objetos que nos servirán
para gestionar los datos. Estos objetos están contenidos en esquemas y éstos a su vez suelen
estar asociados a un usuario. De ahí que antes dijéramos que cada base de datos tiene un
esquema que está asociado a un usuario.
En oracle la sentencia "create database" tiene un sentido distinto a otros SGBD como
Mysql.
Nosotros trabajaremos en oracle creando las tablas en el esquema del usuario creado
previamente, es decir, no utilizaremos la sentencia "create database".
¿Qué necesitamos para poder guardar los datos? Lo primero será definir los objetos
donde vamos a agrupar esos datos. Los objetos básicos con los que trabaja SQL son las tablas,
que como ya sabemos es un conjunto de filas y columnas cuya intersección se llama celda. Es
ahí donde se almacenarán los elementos de información, los datos que queremos recoger.
Y debemos tener en cuenta otras reglas que se deben cumplir para los nombres de las
tablas:
• Solo se permiten letras del alfabeto inglés, dígitos o el signo de guión bajo.
• No puede coincidir con las palabras reservadas de SQL (por ejemplo, no podemos
llamar a una tabla WHERE).
La sintaxis básica del comando que permite crear una tabla es la siguiente:
donde:
• columna1, columna2, ..., columnaN son los nombres de las columnas que contendrá
la tabla.
Ana va a crear la primera tabla llamada USUARIOS con un solo campo de tipo VARCHAR:
Recuerda que solo podrás crear tablas si posees los permisos necesarios para ello.
11.3. Restricciones
Hay veces que necesitamos que un dato se incluya en una tabla de manera obligatoria,
otras veces necesitaremos definir uno de los campos como llave primaria o ajena. Todo esto
podremos hacerlo cuando definamos la tabla, además de otras opciones.
Una restricción es una condición que una o varias columnas deben cumplir
obligatoriamente.
Veamos un ejemplo:
Otra opción es definir las columnas de la tabla y después especificar las restricciones, de
este modo podrás referir varias columnas en una única restricción.
Con esta restricción obligaremos a que esa columna tenga un valor o lo que es lo mismo,
prohíbe los valores nulos para una columna en una determinada tabla.
Debemos tener cuidado con los valores nulos en las operaciones, ya que 1*NULL es igual
a NULL.
Habrá ocasiones en la que nos interese que no se puedan repetir valores en la columna,
en estos casos utilizaremos la restricción UNIQUE. Oracle crea un índice automáticamente
cuando se habilita esta restricción y lo borra al deshabilitarla.
También para esta restricción tenemos dos posibles formas de ponerla, veámoslo con
un ejemplo. Supongamos que el campo Login de nuestra tabla va a ser único. Lo incluiremos en
la tabla que estamos creando. Nos quedaría así:
Tema 2 – Bases de datos
También podemos poner esta restricción a varios campos a la vez, por ejemplo, si
queremos que Login y correo electrónico sean únicos podemos ponerlo así:
Si te fijas, detrás del tipo de datos de Correo hay una coma, eso es así porque la
restricción es independiente de ese campo y común a varios. Por eso después
de UNIQUE hemos puesto entre paréntesis los nombres de los campos a los que afecta la
restricción.
En el modelo relacional las tablas deben tener una clave primaria. Es evidente que
cuando creamos la tabla tendremos que indicar a quién corresponde.
Sólo puede haber una clave primaria por tabla pero ésta puede estar formada por varios
campos. Dicha clave podrá ser referenciada como clave ajena en otras tablas.
La clave primaria hace que los campos que forman sean NOT NULL y que los valores de
los campos sean de tipo UNIQUE.
• Si la clave está formada por más de un campo, por ejemplo Nombre, Apellidos y
Fecha de Nacimiento, entonces hay que utilizar este formato, después de la
definición de todos los campos y antes del paréntesis de cierre de la sentencia:
Ya vimos que las claves ajenas, secundarias o foráneas eran campos de una tabla que se
relacionaban con la clave primaria (o incluso con la clave candidata) de otra tabla.
Tema 2 – Bases de datos
Cuando creemos la tabla tendremos que indicar de alguna forma quién es clave ajena.
Lo haremos "haciendo referencia" a la tabla y los campos de donde procede.
En nuestra tabla vamos a tener una clave ajena procedente de la tabla PARTIDAS que
será su Cod_Partida, por tanto tendremos que hacer referencia a éste:
Vamos a verlo en el caso en que la clave ajena estuviera formada por Cod_Partida y
Fecha de la partida de la tabla PARTIDAS:
Al relacionar campos necesitamos que el dato del campo que es clave ajena en una tabla
(que llamaremos secundaria) previamente haya sido incluido en su tabla de procedencia donde
es clave primaria o candidata. En nuestro ejemplo, cualquier código de partida que incluyamos
en la tabla USUARIO, debería estar previamente en la tabla de la que procede, es decir, en la
tabla PARTIDAS. A esto se le llama Integridad Referencial.
• Si hacemos referencia a una tabla que no está creada: Oracle buscará la tabla
referenciada y al no encontrarla dará fallo. Esto se soluciona creando en primer lugar
las tablas que no tengan claves ajenas.
• Si queremos borrar las tablas tendremos que proceder al contrario, borraremos las
tablas que tengan claves ajenas antes.
• ON DELETE CASCADE: te permitirá borrar todos los registros cuya clave ajena sea
igual a la clave del registro borrado.
• ON DELETE SET NULL: colocará el valor NULL en todas las claves ajenas relacionadas
con la borrada.
• ON DELETE DEFAULT xxxx: colocará el valor xxxx en todas las claves ajenas
relacionadas con la borrada.
A veces es muy tedioso insertar siempre lo mismo en un campo. Imagínate que casi
todos los jugadores fuesen de España y tenemos un campo País. ¿No sería cómodo asignarle un
valor por defecto? Eso es lo que hace la restricción DEFAULT.
En nuestro ejemplo vamos a añadir a la tabla USUARIOS el campo País y le daremos por
defecto el valor "España".
También vamos a necesitar que se compruebe que los valores que se introducen son
adecuados para ese campo. Para ello utilizaremos CHECK.
Esta restricción comprueba que se cumpla una condición determinada al rellenar una
columna. Dicha condición se puede construir con columnas de esa misma tabla.
Si en la tabla USUARIOS tenemos el campo Crédito y éste sólo puede estar entre 0 y
2000, lo especificaríamos así:
Una misma columna puede tener varios CHECK asociados a ella, para ello ponemos
varios CONSTRAINT seguidos y separados por comas.
Esta instrucción borrará la tabla de la base de datos incluido sus datos (filas). También
se borrará toda la información que existiera de esa tabla en el Diccionario de Datos.
La opción CASCADE CONSTRAINTS se puede incluir para los casos en que alguna de las
columnas sea clave ajena en otra tabla secundaria, lo que impediría su borrado. Al colocar
esta opción las restricciones donde es clave ajena se borrarán antes y a continuación se
eliminará la tabla en cuestión.
Ten cuidado al utilizar este comando, el borrado de una tabla es irreversible y no hay
una petición de confirmación antes de ejecutarse.
Es posible que después de crear una tabla nos demos cuenta que se nos ha olvidado
añadir algún campo o restricción, quizás alguna de las restricciones que añadimos ya no es
necesaria o tal vez queramos cambiar el nombre de alguno de los campos. ¿Es posible esto?
Ahora veremos que sí y en casi todos los casos utilizaremos el comando ALTER TABLE.
Ya hemos visto que necesitamos una cuenta de usuario para acceder a los datos de una
base de datos. Las claves de acceso se establecen cuando se crea el usuario y pueden ser
modificados por el Administrador o por el propietario de dicha clave. La Base de Datos almacena
encriptadas las claves en una tabla del diccionario llamada DBA_USERS.
Tema 2 – Bases de datos
• CREATE USER: crea un nombre de usuario que será identificado por el sistema.
• IDENTIFIED BY: permite dar una clave de acceso al usuario creado.
• DEFAULT TABLESPACE: asigna a un usuario el Tablespace por defecto para
almacenar los objetos que cree. Si no se asigna ninguna, será SYSTEM.
• TEMPORARY TABLESPACE: especifica el nombre del Tablespace para trabajos
temporales. Por defecto será SYSTEM.
• QUOTA: asigna un espacio en Megabytes o Kilobytes en el Tablespace asignado. Si
no se especifica el usuario no tendrá espacio y no podrá crear objetos.
• PROFILE: asigna un perfil al usuario. Si no se especifica se asigna el perfil por
defecto.
Practiquemos un poco con este comando. Creemos una cuenta de usuario limitado, que
no tenga derecho ni a guardar datos ni a crear objetos, más tarde le daremos permisos:
Para eliminar o borrar un usuario utilizamos el comando DROP USER con la siguiente
sintaxis:
La opción CASCADE borra todos los objetos del usuario antes de borrarlo. Sin esta
opción no nos dejaría eliminar al usuario si éste tuviera tablas creadas.
Para poder acceder a los objetos de una base de datos necesitas tener privilegios
(permisos). Éstos se pueden agrupar formando roles, lo que simplificará la administración. Los
roles pueden activarse, desactivarse o protegerse con una clave. Mediante los roles podemos
gestionar los comandos que pueden utilizar los usuarios. Un permiso se puede asignar a un
usuario o a un rol.
Los privilegios de sistema son los que dan derecho a ejecutar comandos SQL o acciones
sobre objetos de un tipo especificado. Existen gran cantidad de privilegios distintos.
Concede a Ana el rol de CONNECT con todos los privilegios que éste tiene asociados.
Concede a Ana el privilegio de borrar usuarios y que ésta puede conceder el mismo
privilegio de borrar usuarios a otros.
Tema 2 – Bases de datos
• Sobre objetos:
COMANDOS
CLAÚSULAS
OPERADORES
Permiten crear expresiones complejas. Pueden ser aritméticos (+, -, *, /, ...) o lógicos (<
, >, , < >, And, Or, …).
• Operadores lógicos
• Operadores de comparación
FUNCIONES
Para conseguir valores complejos. Por ejemplo, la función promedio para obtener la
media de un salario. Existen muchas funciones, aquí tienes la descripción de algunas.
• Funciones de agregado
Tema 2 – Bases de datos
LITERALES
Les podemos llamar también constantes y serán valores concretos, como por ejemplo
un número, una fecha, un conjunto de caracteres, etc.