Podrías echar un poco de luz sobre " integridad referencial, las vistas, los procedimientos almacenados, las subconsultas.", yo como siempre he usado mysql no sé qué son, estaría bien leerlo de primera mano de alguien con experiencia en ello que lo describa de manera concisa.
Hola. Te voy a poner un ejemplillo de cada cosa, usando como base de datos PostgreSQL. Como es muy probable que exista algún error en el texto, se admiten correcciones ;)
Integridad referencial: Imaginemos que tenemos una tabla "clientes" con dos columnas, "id_cliente" y "nombre", por ejemplo. Podríamos crear otra tabla llamada "dni_clientes", con dos columnas, "id_cliente" y "dni". La columna "id_cliente" de "dni_clientes" la crearíamos como una clave ajena (foreign key) que apunta a la columna con el mismo nombre (aunque no tendría por qué) de la tabla "clientes". Crearíamos la segunda tabla así:
Por mantener la integridad referencial entiendo que es mantener la correspondencia de las claves ajenas entre las tablas.
Vistas: Se usan para consultas complejas, y son como una forma de encapsular consultas. Ejemplo:
create view mi_vista as
select nombre,dni from clientes, dni_clientes
where clientes.id_cliente=dni_clientes.id_cliente
Podríamos hacer una consulta sobre esa vista, como si se tratase de una tabla. Ejemplo:
select nombre,dni from mi_vista where nombre="pepe";
En este caso no sería muy útil ya que podríamos haber obtenido los mismos resultados sin recurrir a una vista, pero es sólo un ejemplo :)
Procedimientos almacenados: son procedimientos escritos en un lenguaje determinado que se almacenan en la base de datos. En Oracle el lenguaje es PL/SQL, en PostgreSQL es PLPG/SQL. Ejemplo de una función en PLPG/SQL:
create function nuevo_cliente(integer,integer,varchar)
returns integer as '
declare
par_id_cliente alias for $1;
par_dni alias for $2;
par_nombre alias for $3;
begin
insert into clientes
(id_cliente,nombre)
values
(par_id_cliente,par_nombre);
insert into dni_clientes
(id_cliente,dni)
values
(par_id_cliente,par_dni);
return id_cliente;
end;' language 'plpgsql';
Después, para usarla haríamos algo como:
select nuevo_cliente('8','92389924','pepe');
Eso introduciría un nuevo cliente en las tablas "clientes" y "dni_clientes".
Subconsultas: Creo que se refiere a esto:
select dni from (select id_cliente,dni,nombre from clientes,dni_clientes where clientes.id_cliente=dni_clientes.id_cliente) where id_cliente>6;
Aunque también puede referirse a esto:
select id_cliente,dni,(select id_cliente as id_cliente2,nombre from nombres)
where id_cliente=id_cliente2;
Como ves, la presencia de estas funcionalidades en una base de datos multiplica (y por un factor elevado) el número de posibilidades a la hora de realizar operaciones con la base de datos.
Si quieres aprender bien estas cosas (y muchas otras que desconocerás si sólo has usado MySQL) de forma amena y sin leer tropecientos manuales, te recomiendo el libro online SQL for web nerds [greenspun.com], de Philip Greenspun. Parte de ejemplos básicos y va complicando las consultas, introduciendo los nuevos conceptos necesarios para realizarlas. Creo recordar que los ejemplos de código están hechos para Oracle, pero para coger el concepto es más que de sobra, luego sólo cambia la sintaxis.
saludos
--
You laugh at me because I am different, I laugh at you because you are all the same
Features avanzadas
(Puntos:2)( http://www.lartc.org | Última bitácora: Viernes, 06 Agosto de 2004, 13:07h )
Re:Features avanzadas
(Puntos:5, Interesante)( http://barrapunto.com/ )
Integridad referencial: Imaginemos que tenemos una tabla "clientes" con dos columnas, "id_cliente" y "nombre", por ejemplo. Podríamos crear otra tabla llamada "dni_clientes", con dos columnas, "id_cliente" y "dni". La columna "id_cliente" de "dni_clientes" la crearíamos como una clave ajena (foreign key) que apunta a la columna con el mismo nombre (aunque no tendría por qué) de la tabla "clientes". Crearíamos la segunda tabla así:
Por mantener la integridad referencial entiendo que es mantener la correspondencia de las claves ajenas entre las tablas.
Vistas: Se usan para consultas complejas, y son como una forma de encapsular consultas. Ejemplo:
Podríamos hacer una consulta sobre esa vista, como si se tratase de una tabla. Ejemplo:
En este caso no sería muy útil ya que podríamos haber obtenido los mismos resultados sin recurrir a una vista, pero es sólo un ejemplo :)
Procedimientos almacenados: son procedimientos escritos en un lenguaje determinado que se almacenan en la base de datos. En Oracle el lenguaje es PL/SQL, en PostgreSQL es PLPG/SQL. Ejemplo de una función en PLPG/SQL:
Después, para usarla haríamos algo como:
Eso introduciría un nuevo cliente en las tablas "clientes" y "dni_clientes".
Subconsultas: Creo que se refiere a esto:
Aunque también puede referirse a esto:
Como ves, la presencia de estas funcionalidades en una base de datos multiplica (y por un factor elevado) el número de posibilidades a la hora de realizar operaciones con la base de datos.
Si quieres aprender bien estas cosas (y muchas otras que desconocerás si sólo has usado MySQL) de forma amena y sin leer tropecientos manuales, te recomiendo el libro online SQL for web nerds [greenspun.com], de Philip Greenspun. Parte de ejemplos básicos y va complicando las consultas, introduciendo los nuevos conceptos necesarios para realizarlas. Creo recordar que los ejemplos de código están hechos para Oracle, pero para coger el concepto es más que de sobra, luego sólo cambia la sintaxis.
saludos
You laugh at me because I am different, I laugh at you because you are all the same