Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Son un sistema de reglas propuestas por Edgar F. Codd, del modelo relacional para las
bases de datos, diseñado para definir qué requiere un sistema de administración de
base de datos.
m
, Cada ítem de datos debe ser lógicamente
accesible al ejecutar una búsqueda que combine el nombre de la tabla, su clave
primaria, y el nombre de la columna.
0
, La información inaplicable o faltante
puede ser representada a través de valores nulos.
m
, Debe haber al menos un
lenguaje que sea integral para soportar la definición de datos, manipulación de datos,
definición de vistas, restricciones de integridad, y control de autorizaciones y
transacciones.
r
,Todas las vistas que son teóricamente actualizables,
deben ser actualizables por el sistema mismo.
,El acceso de usuarios a la base de datos a
través de terminales o programas de aplicación, debe permanecer consistente
lógicamente cuando quiera que haya cambios en los datos almacenados, o sean
cambiados los métodos de acceso a los datos.
m
, Si el sistema tiene lenguajes de bajo nivel,
estos lenguajes de ninguna manera pueden ser usados para violar la integridad de las
reglas y restricciones expresadas en un lenguaje de alto nivel (como SQL).
En general, esta solución pasa por sustituir R por una nueva relación modificada R', en
la cual:
El atributo M que violaba 1FN se elimina.
Se incluye un nuevo atributo M' que solo puede contener valores simples, de
modo que si R'[M'] es uno de los valores que teníamos en R[M], entonces R'[K] =
R[K]. En otras palabras, para una tupla con n valores duplicados en M, en la
nueva relación habrá n tuplas, que sólo varían en que cada una de ellas guarda
uno de los valores que había en M.
La clave primaria de R' es (K, M'), dado que podrá haber valores de K repetidos,
para los valores multivaluados en M.
Crear una nueva relación N(K, M'), es decir, una relación con una clave ajena K
referenciando R', junto al atributo M', que es la variante mono-valuada del atributo M.
Y además tendríamos una nueva tabla CORREOS con clave primaria (ID, correo):
#
111 juanp@ecn.es
111 jefe2@ecn.es
222 jsanchez@ecn.es
333 adiaz@ecn.es
333 ana32@gmail.com
Puesto->salario
Como la clave es (ID, correo), las dependencias de nombre, salario y correo son
incompletas, por lo que la relación no está en 2FN.
En general, tendremos que observar los atributos no clave que dependan de parte de la
clave.
Para solucionar este problema, tenemos que hacer lo siguiente para los grupos de
atributos con dependencia incompleta M:
Eliminar de R el atributo M.
Crear una nueva relación N con el atributo M y la parte de la clave primaria K de la que
depende, que llamaremos K'.
La clave primaria de la nueva relación será K'.
Siguiendo el ejemplo anterior, crearíamos una nueva relación con los atributos que
tienen dependencia incompleta:
#
111 juanp@ecn.es
111 jefe2@ecn.es
222 jsanchez@ecn.es
333 adiaz@ecn.es
333 ana32@gmail.com
Como vemos, la solución a la que llegamos es la misma que en la otra opción de
solución para el problema de 1FN.
ID->puesto
puesto->salario
En la nueva tabla PUESTOS, la clave sería el puesto, que también queda como clave
ajena referenciando la tabla EMPLEADOS. El resto de las tablas quedan como estaban.
c
Una base de datos relacional es una base de datos en donde todos los datos visibles al
usuario están organizados estrictamente como tablas de valores, y en donde todas las
operaciones de la base de datos operan sobre estas tablas.
Estas bases de datos son percibidas por los usuarios como una colección de relaciones
normalizadas de diversos grados que varían con el tiempo.
En términos tradicionales una relación se asemeja a un archivo, una tupla a un registro,
y un atributo a un campo. Pero estas correspondencias son aproximadas, en el mejor
de los casos. Una relación no debe considerarse como ``solo un archivo'', sino más bien
como un archivo disciplinado, siendo el resultado de esta disciplina una simplificación
considerable de las estructuras de datos con las cuales debe interactuar el usuario, lo
cual a su vez simplifica los operadores requeridos para manejar esas estructuras.
Características
á
Una restricción es una condición que obliga el cumplimiento de ciertas condiciones en
la base de datos. Algunas no son determinadas por los usuarios, sino que son
inherentemente definidas por el simple hecho de que la base de datos sea relacional.
Algunas otras restricciones las puede definir el usuario, por ejemplo, usar un campo con
valores enteros entre 1 y 10.
Las restricciones no son parte formal del modelo relacional, pero son incluidas porque
juegan el rol de organizar mejor los datos. Las restricciones son muy discutidas junto
con los conceptos relacionales.
Un dominio describe un conjunto de posibles valores para cierto atributo. Como un
dominio restringe los valores del atributo, puede ser considerado como una restricción.
Matemáticamente, atribuir un dominio a un atributo significa "todos los valores de este
atributo deben de ser elementos del conjunto especificado".
Distintos tipos de dominios son: enteros, cadenas de texto, fecha,no procedurales etc.
,-
Cada tabla puede tener uno o más campos cuyos valores identifican de forma única
cada registro de dicha tabla, es decir, no pueden existir dos o más registros diferentes
cuyos valores en dichos campos sean idénticos. Este conjunto de campos se llama
clave única.
Pueden existir varias claves únicas en una determinada tabla, y a cada una de éstas
suele llamársele candidata a clave primaria.
,
Una clave primaria es una clave única elegida entre todas las candidatas que define
unívocamente a todos los demás atributos de la tabla, para especificar los datos que
serán relacionados con las demás tablas. La forma de hacer esto es por medio de
claves foráneas.
Sólo puede existir una clave primaria por tabla y ningún campo de dicha clave puede
contener valores NULL.
,(.
Una clave foránea es una referencia a una clave en otra tabla. 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 código de departamento puede ser una clave foránea en la tabla de
empleados, obviamente se permite que haya varios empleados en un mismo
departamento, pero existirá sólo un departamento.
á&&
La base de datos se organiza en dos marcadas secciones; el esquema y los datos (o
instancia).
G /
Son reglas que deben mantener los datos almacenados en la base de datos. No se
deben quebrantar a menos que tenga otra relación de una tabla de uno a muchos.
/
á
Las entidades son el fundamento del modelo entidad relación. Podemos adoptar como
definición de entidad cualquier cosa o parte del mundo que es distinguible del resto. Por
ejemplo, en un sistema bancario, las personas y las cuentas bancarias se podrían
interpretar como entidades. Las entidades pueden representar entes concretos, como
una persona o un avión, o abstractas, como por ejemplo un préstamo o una reserva. Se
representan por medio de un rectángulo.
-!&
Se representan mediante un círculo o elipse etiquetado mediante un nombre en su
interior. Cuando un atributo es identificativo de la entidad se suele subrayar dicha
etiqueta.
Se representa mediante un rombo etiquetado en su interior con un ,!. Este rombo
se debe unir mediante líneas con las entidades (rectángulos) que relaciona.
r
Cada esposo (entidad) está casado (relación) con una única esposa (entidad) y
viceversa. Es una relación 1:1.
Una factura (entidad) se emite (relación) a una persona (entidad) y sólo una,
pero una persona puede tener varias facturas emitidas a su nombre. Todas las
facturas se emiten a nombre de alguien. Es una relación 1:N.
Un cliente (entidad) puede comprar (relación) varios artículos (entidad) y un
artículo puede ser comprado por varios clientes distintos. Es una relación N:M.
Ejemplo:
'1á$c-'á'á-0'
á-0á0-cá.
Entonces, si debemos crear una tabla para el cliente tal como se especifica
anteriormente, ingresaríamos
á-0á0-cá
)!4 )+0
4 )+0
4 )+0
& 4 )+0
4 )
+0
*4 2&
+
Puede colocar restricciones para limitar el tipo de dato que puede ingresarse en una
tabla. Dichas restricciones pueden especificarse cuando la tabla se crea por primera
vez a través de la instrucción CREATE TABLE, o luego de crear la tabla a través de la
instrucción ALTER TABLE.
- NOT NULL
- UNIQUE
- CHECK
- Clave primaria
- Clave externa
NOT NULL
En forma predeterminada, una columna puede ser NULL. Si no desea permitir un valor
NULL en una columna, querrá colocar una restricción en esta columna especificando
que NULL no es ahora un valor permitido.
$0$·
En forma predeterminada, una columna puede ser NULL. Si no desea permitir un valor
NULL en una columna, querrá colocar una restricción en esta columna especificando
que NULL no es ahora un valor permitido.
á-0á0-cá
)$$0$·0
!, 4 )+$0$·0
, 4 )++5
Las columnas ³nit´ y ³apellido´ no incluyen NULL, mientras que ³nombre´ puede incluir
NULL.
·$#1·á
La restricción UNIQUE asegura que todos los valores en una columna sean distintos.
Por favor note que una columna que se especifica como clave primaria también puede
ser única. Al mismo tiempo, una columna que es única puede o no ser clave primaria.
7á8
La restricción CHECK asegura que todos los valores en una columna cumplan ciertas
condiciones.
á-0á0-cá
)7á8)'#9+0
, 4 )+0
!, 4 )++5
Por favor note que la restricción 7á8no sea ejecutada por MySQL en este
momento.
%#G-:8á:
Las claves primarias pueden especificarse cuando se crea la tabla (utilizando á-0á
0-cá) o cambiando la estructura existente de la tabla (utilizando -0á0-cá).
G'1:
á-0á0-cá
)$0
-
, 4 )+0
$!, 4 )+0
%#G-:8á:)++5
*á#$;8á:
Por ejemplo, digamos que tenemos dos tablas, una tabla CLIENTE que incluye todos
los datos del CLIENTE, y la tabla ÓRDENES que incluye los pedidos del CLIENTE. La
restricción aquí es que todos los pedidos deben asociarse con un CLIENTE que ya se
encuentra en la tabla CLIENTE. En este caso, colocaremos una clave externa en la
tabla ORDENES y la relacionaremos con la clave primaria de la tabla CLIENTE. De
esta forma, nos aseguramos que todos los pedidos en la tabla ORDENES estén
relacionadas con un CLIENTE en la tabla CLIENTE. En otras palabras, la tabla
ORDENES no puede contener información de un CLIENTEque no se encuentre en la
tabla CLIENTE.
Tabla
Tabla
á-0á0-cáá'
)2#0
2 0
20
&!
0
% 8)2#+0
*8)
2+(#á$0á)++5
-0á0-cáá$á'
-*á#;$8á:)
2+á*áá$á'#á$0á)+5
%0-cá
%0-cá .
#$'á0#$0
La sintaxis para insertar datos en una tabla mediante una fila por vez es la siguiente:
·%-0á
Una vez que hay datos en la tabla, podríamos tener la necesidad de modificar los
mismos. Para hacerlo, utilizamos el comando UPDATE
á$;·-ááG-$#%·-#B$á-0')'1.+
$'·0-'
En SQL92 la manipulación de datos se hace básicamente con las sentencias SELECT
(seleccionar), UPDATE (actualizar), DELETE (borrar) e INSERT (insertar) que
constituyen el lenguaje de manipulación de datos básico.
'áá0
Selecciona filas de una o más tablas.
<sentenciaselect>::=
La palabra clave #'0#$0 indica que si existen filas idénticas, sólo se mostrará una de
ellas.
á"
SELECT S#
FROM S
WHERE Ciudad=µPARIS¶
AND Situación > 20;
SELECT S.*,P.* /*Selecciona todos los campos de las dos tablas S y P*/
FROM PROVEEDORES, PIEZAS
WHERE PROVEEDORES.CIUDAD= PIEZAS.CIUDAD;
Esta cláusula especifica las columnas usadas para formar grupos con las filas devueltas
por la sentencia SELECT. Dentro de cada grupo todas las filas tienen el mismo valor en
la o las columnas de GROUP BY.
Si está precedida de la cláusula WHERE el sistema agrupa las filas después de aplicar
la cláusula WHERE.
Todas las columnas de la <lista de selección> de la sentencia SELECT deben ser
funciones de columna (AVG, COUNT, MAX, MIN, SUM) o formar parte de la cláusula
GROUP BY.
Ejemplo
Obtener la cantidad total suministrada de cada pieza
P1 600 ½
P2 1000
P3 400 ½
P4 500
P5 500 ½
P6 100 «
½
Obsérvese que en la tabla de suministros SP a lo mejor hay seis filas de P1 coda una
con una cantidad de 100 pero el resultado consiste en agruparlas por el código de la
pieza.
.&&
7-U#$;)+
7-U#$;<condición de búsqueda>
Se utiliza para indicar que los grupos de filas agrupados por GROUP BY que se
muestran deben cumplir la <condición de búsqueda>. Por lo tanto si se especifica
HAVING en una sentencia SELECT deberá haberse especificado también GROUP BY
o bien todas las columnas de la <lista de selección> de SELECT deben formarse con
funciones de columna. HAVING es a los grupos lo que WHERE es a las filas.
Ejemplo
Obtener los códigos de las piezas que son suministradas por más de un proveedor.
SELECT P#
FROM SP
GROUP BY P#
HAVING COUNT(*) >1;
Especifica el orden en que una sentencia SELECT devuelve las filas. Las filas se
pueden ordenar por una columna de forma ascendente ASC o descendente DESC. Si
se especifican más de una columna en primer lugar se ordenan según la primera
columna especidicada y dentro de esta la segunda y dentro de la segunda la tercera y
asi sucesivamente.
á"
Seleccionar los clientes cuya primera ficha de negocio fue 1988 y mostrarlos en orden
ascendente por el código postal:
Ejemplo
En un programa C para almacenar el número de precios diferentes de artículos de un
inventario actual en la variable declarada en el programa como intnúmero_precios
escribiríamos:
«
EXEC SQL
SELECT COUNT (DISTINCT COSTE)
INTO: número_precios
FROM INVENTARIO
WHERE CANT >0;
«
·%-0á
Modifica las columnas seleccionadas de una tabla en todas las filas que satisfacen una
condición de búsqueda.
á"
:
Modifica sólo las piezas cuyo código es P2 actualizando los campos de color, peso y
ciudad.
UPDATE PIEZAS
SET COLOR=µAMBAR¶,
PESO=PESO+5,
CIUDAD=NULL
WHERE P# = µP2¶;
á"
:
Borrar todas las filas de tabla SP cuya CANT sea mayor que 30.
DELETE
FROM SP
WHERE CANT> 30;
#$'á0
Inserta una o más filas nuevas dentro de la tabla o vista especificada. Cuando se utilice
la cláusula VALUES sólo se insertará una fila. Si se utiliza una <sentencia select> el
número de filas insertadas será igual al devuelto por la <sentencia select>.
Ejemplos
Insertar en la tabla de SUMINISTROS una nueva fila.
INSERT
INTO SUMINISTROS(S#, P#, CANT)
VALUES (µS20¶, µP20¶, 1000);
INSERT
INTO TEMP (P#, CANTTOTAL)
SELECT P#, SUM(CANT)
FROM SUMINISTROS
GROUP BY P#;
*·$#$á'á-;á;-')á·G$-'+
SQL ofrece una serie de funciones que actúan sobre el total de valores en una columna
de alguna tabla y producen un sólo valor como resultado. Estas funciones son la suma
(SUM), la media (AVG), el máximo de un conjunto de valores (MAX), el mínimo (MIN) y
el número de valores de una columna o cuenta (COUNT).
Estas funciones se utilizan en consultas SELECT o en subconsultas. Una subconsulta
es una consulta SELECT dentro de otra SELECT. Porejemplo:
SELECT JNOMBRE
FROM J
WHERE J# IN
(SELECT J#
FROM SPJ Subconsulta
WHERE S#=¶S1¶);
En una consulta SELECT o una subconsulta esta función crea una columna cuyo valor
es el promedio numérico de los valores de la <expresión> o del <nombre de columna>.
Se puede usar la cláusula GOUP BY para crear el promedio de cada grupo de filas
seleccionadas en las tablas o vistas subyacentes.
Ejemplos
Obtener el promedio del coste del inventario de artículos sin contar aquellos que no
están en stock.
SELECT AVG(CANTIDAD*COSTE)
FROM INVENTARIO
WHWRE CANTIDAD >0;
*& ·$0)& +
En una consulta SELECT o subconsulta esta función crea una columna cuyo valor es
igual al número de filas de la tabla resultado o al número de valores distintos en
<nombre columna>. Se puede utilizar la cláusula GROUP BY para crear una cuenta
por cada grupo de filas.
Si se especifica la cláusula DISTINCT entonces lo valores duplicados se eliminan de la
cuenta.
Ejemplo
Obtener el número de clientes de cada provincia que hicieron negocio en una fecha
posterior a 1985.
SELECT COUNT(*)
FROM CLIENTES
WHERE PRIMERFECHA > 1985
GROUP BY PROVINCIA;
*& G-
En una consulta o subconsulta crea una columna cuyo valor es el valor máximo
de<expresión> o <nombre de columna>. Se puede utilizar la cláusula GROPU BY para
obtener el máximo de cada grupo de filas seleccionadas en las tablas o filas
subyacentes
Ejemplos
Calcular la máxima cantidad debida a cualquier vendedor que envió una factura en
Octubre.
*& G#$
Ejemplos
Obtener la mínima cantidad que se le debe a cualquier vendedor que envió una factura
en Octubre.
*& '·G
En una tabla lógica devuelta por una consulta o subconsulta crea una columna cuyo
valor es la suma numérica de los valores de <expresión> o <nombre de columna>. Se
puede utilizar la cláusula GROUP BY para obtener la suma de cada grupo de filas.
Ejemplos
Obtener la cantidad total debida a todos los vendedores que enviaron una factura en
Octubre.
SELECT SUM(CANTDEBIDA)
FROM CUENTASPAGAR
WHERE MESFACTURA = 10;
Obtener el total del coste del ineventario de artículos