Documente Academic
Documente Profesional
Documente Cultură
Bases
de
datos
Prof.
Manuel
Alumno:
Fernando
distri
buida
s
C.I.:
Carrasquero.
Martnez de la Riva G.
20.873.174
Julio, 2015
Bases de datos distribuidas.
2.-Desventajas
Autonoma.
Se puede presentar en diferentes niveles, los cuales se describen a
continuacin:
1. Autonoma de diseo: Habilidad de un componente del sistema
para decidir cuestiones relacionadas a su propio diseo.
2. Autonoma de comunicacin: Habilidad de un componente del
sistema para decidir cmo y cundo comunicarse con otros SGBD
(Sistema Gestor de Bases de Datos).
3. Autonoma de ejecucin: Habilidad de un componente del sistema
para ejecutar operaciones locales como quiera.
Transparencia.
La transparencia se define como la separacin de la semntica de
alto nivel de un sistema de los aspectos de bajo nivel relacionados a la
implementacin del mismo. Un nivel de transparencia adecuado permite
ocultar los detalles de implementacin a las capas de alto nivel de un
sistema y a otros usuarios.
Arquitectura de 3 capas.
Es un estilo de programacin, su objetivo primordial es la
separacin de la capa de presentacin, capa de negocio y la capa de
datos.
1) Capa de presentacin. Esta capa es la que ve el usuario, presenta el
sistema al usuario, le comunica la informacin y captura la informacin
del usuario en un mnimo de proceso.
Esta capa se comunica nicamente con la capa de negocio.
Tambin es conocida como interfaz grfica y debe tener la caracterstica
de ser "amigable" para el usuario generalmente se presentan como
formularios
Toda aplicacin tiene cdigo para implementar reglas de negocios.
Se puede seleccionar almacenar la lgica de negocios sobre cada
estacin de cliente, u optar por ejecutar la lgica de negocios sobre un
servidor de aplicaciones.
No toda la lgica de negocio es la misma algunas no requieren un
frecuente acceso a los datos, pero una interface de usuario robusta
necesitara de la lgica de negocios para la validacin en la entrada de
campos, clculos en tiempo real u otras interacciones de usuarios.
2) Capa de negocio. Aqu es donde, se reciben las peticiones del usuario
y se envan las respuestas tras el proceso. Se denomina capa de negocio
(e incluso de lgica del negocio) porque es aqu donde se establecen
todas las reglas que deben cumplirse. Esta capa se comunica con la
capa de presentacin, para recibir las solicitudes y presentar los
un
disparador:
por
SELECT
un
usuario:
TRIGGER_BODY
SELECT
FROM
Valores nulos
Al definir cada columna podemos decidir si podr o no contener
valores nulos.
Debemos recordar que, aquellas columnas que son o forman parte
de una clave primaria no pueden contener valores nulos.
Si definimos una columna como clave primaria, automticamente
se impide que pueda contener valores nulos, pero este no es el nico
caso en que puede ser interesante impedir la asignacin de valores
nulos para una columna.
La opcin por defecto es que se permitan valores nulos, NULL, y
para que no se permitan, se usa NOT NULL. Por ejemplo:
mysql> CREATE TABLE ciudad1 (nombre CHAR(20) NOT NULL, poblacion INT
NULL);
Claves primarias
Tambin se puede definir una clave primaria sobre una columna, usando
la palabra clave KEY o PRIMARY KEY.
Slo puede existir una clave primaria en cada tabla, y la columna sobre
la que se define una clave primaria no puede tener valores NULL. Si esto
no se especifica de forma explcita, MySQL lo har de forma automtica.
Por ejemplo, si queremos crear un ndice en la columna nombre de la
tabla de ciudades, crearemos la tabla as:
mysql> CREATE TABLE ciudad3 (nombre CHAR(20) NOT NULL PRIMARY KEY,
-> poblacion INT NULL DEFAULT 5000);
Usar NOT NULL PRIMARY KEY equivale a PRIMARY KEY, NOT NULL
KEY o sencillamente KEY. Personalmente, prefiero usar la primera forma
o la segunda.
Existe una sintaxis alternativa para crear claves primarias, que en
general es preferible, ya que es ms potente. De hecho, la que hemos
explicado es un alias para la forma general, que no admite todas las
funciones (como por ejemplo, crear claves primarias sobre varias
columnas). Veremos esta otra alternativa un poco ms abajo.
Columnas autoincrementadas
Comentarios
Adicionalmente, al crear la tabla, podemos aadir un comentario a
cada columna. Este comentario sirve como informacin adicional sobre
alguna caracterstica especial de la columna, y entra en el apartado de
documentacin de la base de datos:
mysql>
->
->
->
sentencias
para
verificar
consultar
+--------+-------------+------+-----+---------+-------+
Por ejemplo:
mysql> DROP TABLE ciudad6;
Una vez ms, a las columnas para las que no indiquemos valores
se les asignarn sus valores por defecto. Tambin podemos hacer esto
usando el valor DEFAULT.
Para las sintaxis que lo permiten, podemos observar que cuando
se inserta ms de una fila en una nica sentencia, obtenemos un
mensaje desde MySQL que indica el nmero de filas afectadas, el
nmero de filas duplicadas y el nmero de avisos.
Para que una fila se considere duplicada debe tener el mismo valor
que una fila existente para una clave principal o para una clave nica.
En tablas en las que no exista clave primaria ni ndices de clave nica no
tiene sentido hablar de filas duplicadas. Es ms, en esas tablas es
perfectamente posible que existan filas con los mismos valores para
todas las columnas.
Por ejemplo, en mitabla5 tenemos una clave nica sobre la
columna 'nombre':
mysql> INSERT INTO mitabla5 (id, nombre) VALUES
-> (1, 'Carlos'),
-> (2, 'Felipe'),
-> (3, 'Antonio'),
-> (4, 'Carlos'),
-> (5, 'Juan');
ERROR 1062 (23000): Duplicate entry 'Carlos' for key 1
Reemplazar filas.
Existe una sentencia REPLACE, que es una alternativa para INSERT, que slo se
diferencia en que si existe algn registro anterior con el mismo valor para una clave
primaria o nica, se elimina el viejo y se inserta el nuevo en su lugar.
REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name [(col_name,...)]
VALUES (,...),(...),...
REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name
SET col_name=, ...
mysql> REPLACE INTO ciudad3 (nombre, poblacion) VALUES
-> ('Madrid', 7200000),
-> ('Pars', 9200000),
-> ('Berln', 6000000);
Records: 3 Duplicates: 2 Warnings: 0
Actualizar filas.
Podemos modificar valores de las filas de una tabla usando la
sentencia UPDATE. En su forma ms simple, los cambios se aplican a
todas las filas, y a las columnas que especifiquemos.
UPDATE [LOW_PRIORITY] [IGNORE] tbl_name
SET col_name1=expr1 [, col_name2=expr2 ...]
[WHERE where_definition]
[ORDER BY ...]
[LIMIT row_count]
Cuando exista una clave primaria o nica, se usar ese orden por
defecto, si no se especifica una clusula ORDER BY.
Eliminar filas.
Para eliminar filas se usa la sentencia DELETE. La sintaxis es muy
parecida a la de UPDATE:
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM table_name
[WHERE where_definition]
[ORDER BY ...]
[LIMIT row_count]
Forma incondicional.
La forma ms sencilla es la que hemos usado hasta ahora, consiste en pedir todas las
columnas y no especificar condiciones.
mysql>mysql> SELECT * FROM gente;
+---------+------------+
| nombre | fecha
|
+---------+------------+
| Fulano | 1985-04-12 |
| Mengano | 1978-06-15 |
| Tulano | 2001-12-02 |
| Pegano | 1993-02-10 |
+---------+------------+
Proyeccin.
Consiste en seleccionar determinados atributos de una relacin.
Mediante la sentencia SELECT es posible hacer una proyeccin de una
tabla, seleccionando las columnas de las que queremos obtener datos.
En la sintaxis que hemos mostrado, la seleccin de columnas
corresponde con la parte "expresion_select". En el ejemplo anterior
hemos usado '*', que quiere decir que se muestran todas las columnas.
Pero podemos usar una lista de columnas, y de ese modo slo se
mostrarn esas columnas:
mysql> SELECT nombre FROM gente;
+---------+
| nombre |
+---------+
| Fulano |
| Mengano |
| Tulano |
| Pegano |
+---------+
mysql> SELECT clave,poblacion FROM ciudad5;
+-------+-----------+
| clave | poblacion |
+-------+-----------+
|
13 |
3395000 |
+-------+-----------+
mysql>
Alias.
Seleccin.
Otra de las operaciones del lgebra relacional era la seleccin, que
consista en seleccionar filas de una relacin que cumplieran
determinadas condiciones.
Lo que es ms til de una base de datos es la posibilidad de hacer
consultas en funcin de ciertas condiciones. Generalmente nos
interesar saber qu filas se ajustan a determinados parmetros. Por
supuesto, SELECT permite usar condiciones como parte de su sintaxis,
es decir, para hacer selecciones. Concretamente mediante la clusula
WHERE, veamos algunos ejemplos:
mysql> SELECT * FROM gente WHERE nombre="Mengano";
+---------+------------+
| nombre | fecha
|
+---------+------------+
| Mengano | 1978-06-15 |
+---------+------------+
Clusula HAVING.
La clusula HAVING permite hacer selecciones en situaciones en
las que no es posible usar WHERE. Veamos un ejemplo completo:
mysql>
->
->
->
| Pimplano | 1978-06-15 |
+----------+------------+
7. Consultas multiples.
Producto cartesiano.
Hasta ahora todas las consultas que hemos usado se refieren slo a
una tabla, pero tambin es posible hacer consultas usando varias tablas
en la misma sentencia SELECT.
Esto nos permite realizar otras dos operaciones de lgebra relacional
que an no hemos visto: el producto cartesiano y la composicin.
Producto cartesiano.
Usaremos el ejemplo de las tablas de personas2 y telefonos2, e
insertaremos algunos datos:
mysql> INSERT INTO personas2 (nombre, fecha) VALUES
-> ("Fulanito", "1956-12-14"),
-> ("Menganito", "1975-10-15"),
-> ("Tulanita", "1985-03-17"),
-> ("Fusganita", "1976-08-25");
mysql> SELECT * FROM personas2;
+----+-----------+------------+
| id | nombre
| fecha
|
+----+-----------+------------+
| 1 | Fulanito | 1956-12-14 |
| 2 | Menganito | 1975-10-15 |
| 3 | Tulanita | 1985-03-17 |
| 4 | Fusganita | 1976-08-25 |
+----+-----------+------------+
| 456545654 |
4 |
| 441415414 |
4 |
+-----------+---------+
Las condiciones para que se pueda crear una unin son: las
relaciones a unir deben tener el mismo nmero de atributos, y adems
deben ser de dominios compatibles.
mysql>
->
->
->
->
mysql>
->
->
->
->
mysql>
->
->
->
->
mysql>
->
->
->
->
mysql>
->
->
->
mysql>
->
->
->
->
Podemos crear una unin de las tres tablas, a pesar de que los
nombres y tamaos de algunas columnas sean diferentes:
mysql> SELECT * FROM stock1 UNION
-> SELECT * FROM stock2 UNION
-> SELECT * FROM stock3;
+----+----------------+----------+
| id | nombre
| cantidad |
+----+----------------+----------+
| 1 | tornillo M3x12 |
100 |
| 2 | tornillo M3x15 |
120 |
| 3 | tornillo M4x25 |
120 |
| 4 | tornillo M5x30 |
200 |
| 10 | tuerca M4
|
120 |
| 11 | tuerca M3
|
100 |
| 12 | tuerca M5
|
87 |
| 1 | tornillo M3x12 |
22 |
| 11 | tuerca M3
|
22 |
| 20 | varilla 10
|
23 |
| 21 | varilla 12
|
32 |
+----+----------------+----------+
| 4 | tornillo M5x30 |
| 10 | tuerca M4
|
| 11 | tuerca M3
|
| 12 | tuerca M5
|
| 20 | varilla 10
|
| 21 | varilla 12
|
+----+----------------+
Niveles de privilegios.
En MySQL existen cinco niveles distintos de privilegios:
Globales: se aplican al conjunto de todas las bases de datos en
un servidor. Es el nivel ms alto de privilegio, en el sentido de que
su mbito es el ms general.
De base de datos: se refieren a bases de datos individuales, y
por extensin, a todos los objetos que contiene cada base de
datos.
De tabla: se aplican a tablas individuales, y por lo tanto, a todas
las columnas de esas tabla.
De columna: se aplican a una columna en una tabla concreta.
De rutina: se aplican a los procedimientos almacenados. An no
hemos visto nada sobre este tema, pero en MySQL se pueden
almacenar procedimietos consistentes en varias consultas SQL.
Crear usuarios.
Aunque en la versin 5.0.2 de MySQL existe una sentencia para crear
usuarios, CREATE USER, en versiones anteriores se usa exclusivamente
la sentencia GRANT para crearlos.
En general es preferible usar GRANT, ya que si se crea un usuario
mediante CREATE USER, posteriormente hay que usar una sentencia
GRANT para concederle privilegios.
Usando GRANT podemos crear un usuario y al mismo tiempo concederle
tambin los privilegios que tendr. La sintaxis simplificada que usaremos
para GRANT:
GRANT priv_type [(column_list)] [, priv_type [(column_list)]] ...
ON
TO user [IDENTIFIED BY [PASSWORD] 'password']
[, user [IDENTIFIED BY [PASSWORD] 'password']]
Database changed
mysql> SHOW TABLES;
+------------------+
| Tables_in_prueba |
+------------------+
| gente
|
+------------------+
mysql> SELECT * FROM gente;
+----------+------------+
| nombre
| fecha
|
+----------+------------+
| Fulano
| 1985-04-12 |
| Mengano | 1978-06-15 |
| Tulano
| 2001-12-02 |
| Pegano
| 1993-02-10 |
| Pimplano | 1978-06-15 |
| Frutano | 1985-04-12 |
+----------+------------+
+--------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'anonimo'@'%' IDENTIFIED BY PASSWORD '*5...' |
| GRANT SELECT ON `prueba`.`gente` TO 'anonimo'@'%'
|
+--------------------------------------------------------------------+
Borrar usuarios.
Para eliminar usuarios se usa la sentencia DROP USER. No se
puede eliminar un usuario que tenga privilegios, por ejemplo:
mysql> DROP USER anonimo;
ERROR 1268 (HY000): Can't drop one or more of the requested users
Para eliminar el usuario primero hay que revocar todos sus privilegios:
mysql> SHOW GRANTS FOR anonimo;
+--------------------------------------------------------------------+
| Grants for anonimo@%
|
+--------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'anonimo'@'%' IDENTIFIED BY PASSWORD '*5...' |
| GRANT SELECT ON `prueba`.`gente` TO 'anonimo'@'%'
|
+--------------------------------------------------------------------+
mysql> REVOKE SELECT ON prueba.gente FROM anonimo;
mysql> DROP USER anonimo;