Descargar

Proyecto de base de datos. Postgree (página 2)

Enviado por Nestor Vargas


Partes: 1, 2

DESCRIPCION DE TABLA

Nombre de la tabla: ________DETALLE______________

Llave Primaria: _{nventa, cod_producto} ____________

Llave secundaria: ________________________________

Llave Foránea: __ nventa, cod_producto_____________

Atributo

Tipo Dato

Tamaño

Observaciones

nventa

Character

8

cod_producto

Character

8

precio_venta

Real

Defecto

cantidad

Integer

Defecto

subtotal

Real

Defecto

impuesto

Real

Defecto

total

real

defecto

Diccionario de datos

Nombre de archivo: ficha Fecha creación:12/11/11 Descripcion: Base de datos que contendrá la ficha de matrícula de los alumnos del Instituto

Campo

Tamaño

Tipo de datos

Descripción

rne

15

Character

Clave única de registro nacional estudiantes

nombre

30

Character Varying

Nombre del alumno

apellidos

60

Character Varying

Apellido del alumno

dirección

70

Character Varying

Direccion del alumno

fecha_nacimiento

Date

Fecha que nació el alumno

sexo

10

Character Varying

El sexo del estudiante

padre

70

Character Varying

Padre del estudiante

madre

70

Character Varying

Madre del estudiante

encargado

70

Character Varying

Encargado del alumno

cod_curso

8

Character

El código del curso que se encuentra y es llave foranea

Fecha_matricula

Date

La fecha de matricula.

Relaciones: Campos Claves:

Ficha- Cursos rne- nombre, apellido, encargado

Nombre de archivo: Curso Fecha creación:12/11/11 Descripcion: Base de datos que contendrá la información de los cursos del Instituto.

Campo

Tamaño

Tipo de datos

Descripción

cod_curso

8

Character

Llave principal único código del curso

curso

20

Character Varying

El nombre del curso

modalidad

50

Character Varying

Modalidad de la carrera

sección

3

Character Varying

La sección

jornada

20

Character Varying

Jornada de estudio

Relaciones: Campos Claves:

Cursos – Ficha todos.

Nombre de archivo: Maestros Fecha creación:12/11/11 Descripción: Base de datos que contendrá la información de los Maestros del Instituto.

Campo

Tamaño

Tipo de datos

Descripción

cod_maestro

8

Character

Código único de los maestros.

nombre

30

Character Varying

Código de los maestros

apellido

60

Character Varying

Apellido del Maestro

direccion

70

Character Varying

Dirección del maestro

teléfono

9

Character Varying

Teléfono del maestro

email

60

Character Varying

Correo del maestro

Relaciones: Campos Claves:

X cod-maestro-nombre-apellido.

Nombre de archivo: Materias Fecha creación:12/11/11 Descripción: Base de datos que contendrá la información de las materias de las carreras

Campo

Tamaño

Tipo de datos

Descripción

cod_materia

8

Character

Codigo único de las materias

materia

30

Character Varying

Nombre de la materia

Cod_curso

8

Character

El código del curso que corresponde a la materia, llave foránea

Cod_maestro

8

Character

El código del maestro, llave foránea.

Relaciones: Campos Claves:

Materias-curso-maestro cod_materia-materia

Nombre de archivo: Notas Fecha creación:12/11/11 Descripción: Base de datos que contendrá la información de las Notas de los alumnos.

Campo

Tamaño

Tipo de datos

Descripción

rne

15

Character

Llave principal del registro nacional del estudiante

cod_curso

8

Character

Llave principal del código del curso

cod_materia

8

Character

Llave principal de la materia

anio

defecto

Integer

Llave principal del año

parcial1

defecto

Real

Nota del I parcial

parcial2

defecto

Real

Nota del II parcial

parcial3

defecto

Real

Nota del III parcial

parcial4

defecto

Real

Nota del IV parcial

promedio

defecto

Real

Nota promedio

recuperacion1

defecto

Real

Primera recuperación

recuperacion2

defecto

Real

Segunda recuperación

Relaciones: Campos Claves:

Notas-Materias-curso-maestro rne, cod_curso, cod_materia, anio

Nombre de archivo:Conceptopago Fecha creación:12/11/11 Descripción: Base de datos que contendrá la información del pago que se efectua.

Campo

Tamaño

Tipo de datos

Descripción

cod_concepto

8

Character

Unico código del concepto de pago

concepto

50

Character Varying

Concepto de pago

precio

defecto

Real

El valor del pago

Relaciones: Campos Claves:

Nombre de archivo:Conceptopago Fecha creación:12/11/11 Descripción: Base de datos que contendrá la información del pago que se efectua.

Campo

Tamaño

Tipo de datos

Descripción

cod_empleado

8

Character

Codigo único del empleado

nombre

30

Character Varying

Nombre del empleado

apellidos

60

Character Varying

Apellidos del empleados

dirección

70

Character Varying

Dirección del empleados

teléfono

9

Character Varying

Teléfono del empleado

email

60

Character Varying

Correo del empleado

Consultas SQL

  • 1- Contar el número total de alumnos.

Select count (rne)

From ficha

  • 2- Listado de Alumnos por un curso X.

Select ficha.rne, ficha.nombre, ficha.apellidos, cursos.curso, cursos.modalidad, cursos.seccion

From ficha, cursos

Where ficha.cod_curso=cursos.cod_curso and ficha.cod_curso='1CC1'

  • 3- Cuadro de honor del parcial3 (notas mayores de 91)

Select notas.rne, ficha.nombre, ficha.apellidos, notas.cod_curso, avg (notas.parcial3)

From ficha, notas

Where notas.rne=ficha.rne and parcial3>91

Group by notas.rne,ficha.nombre,ficha.apellidos,notas.cod_curso

  • 4- Aplazados por materia

Select notas.rne, ficha.nombre, ficha.apellidos, materias.materia, notas.promedio

From notas, ficha, materias

Where notas.rne = ficha.rne and notas.promedio <60 and notas.cod_materia=materias.cod_materia

Order by materias.materia

  • 5- Aplazados por curso

Select notas.rne, ficha.nombre, ficha.apellidos, cursos.curso, cursos.modalidad, cursos.seccion, notas.promedio

From notas, ficha, cursos

Where notas.rne = ficha.rne and notas.promedio <60 and notas.cod_curso=cursos.cod_curso

Order by cursos.modalidad, cursos.curso, cursos.seccion

  • 6- Mejores 10 promedios de todo el sistema para asignarles becas

Select notas.rne, ficha.nombre, ficha.apellidos, avg (notas.promedio)

From notas, ficha

Where notas.rne=ficha.rne

Group by notas.rne, ficha.nombre, ficha.apellidos

Order by avg (notas.promedio) desc limit 10 offset 0

  • 7- Materias por maestros

Select materias.cod_materia, materias.materia, maestros.nombre, maestros.apellidos

From materias, maestros

Where materias. Cod_maestro=maestros. Cod_maestro

Order by maestros. Nombre, materias.materia

  • 8- Contar cuantas materias por maestros.

Select maestros.nombre, maestros.apellidos, count (materias.materia)

From materias, maestros

Where materias. Cod_maestro=maestros. Cod_maestro

Group by maestros.nombre, maestros.apellidos

Order by maestros. nombre

  • 9- Calcular el promedio anual de todas las notas.

Select avg (promedio)

From notas

  • 10- Calcular el promedio por sexo

Select avg (notas.promedio), ficha.sexo

From notas, ficha

Where notas.rne=ficha.rne

Group by ficha.sexo

  • 11- Alumnos a los que no se les ha asignado ninguna nota.

Select ficha.rne, ficha.nombre from ficha left join notas on ficha.rne=notas.rne

Where (notas.rne) is null

  • 12- Maestros a los que no se les ha asignado ninguna materia.

Select maestros.cod_maestro, maestros.nombre, maestros.apellidos, materias.cod_maestro from maestros left join materias on maestros.cod_maestro=materias.cod_maestro

Where (materias.cod_maestro) is null

Order by nombre

  • 13- Ver el historial de un alumno X

select notas.rne, ficha.nombre, ficha.apellidos, notas.cod_materia, materias.materia, notas.cod_curso, cursos.curso, cursos.modalidad, notas.anio, notas.parcial1, notas.parcial2, notas.parcial3, notas.parcial4, round(promedio)

From notas, ficha, materias, cursos

Where notas.rne=ficha.rne and notas.cod_curso=cursos.cod_curso and notas.cod_materia=materias.cod_materia and notas.rne = '0503-1999-00562'

  • 14- Ver la nota más alta del año.

Select Max (promedio)

From notas

  • 15- Ver la nota más baja del año.

Select Min (promedio)

From notas

  • 16- Alumnos que pierden derecho a Primera Recuperación (promedio < 40)

Select * from notas where promedio <40

  • 17- Materias por curso

Select materias.cod_materia, materias.materia, cursos.curso, cursos.modalidad, cursos.seccion

From materias, cursos

Where materias.cod_curso=cursos.cod_curso

Order by curso, modalidad, seccion, materia

  • 18- Cuantos alumnos van a Recuperación

Select count (promedio)

From notas

Where promedio<60

  • 19- Cuantos alumnos van a Recuperación por Materia.

Select notas.cod_materia, materias.materia, cursos.curso, cursos.modalidad, cursos.seccion, count (promedio)

From notas, materias, cursos

Where notas.cod_materia=materias.cod_materia and notas.cod_curso=cursos.cod_curso and promedio <60

Group by notas.cod_materia, materias.materia, cursos.curso, cursos.modalidad, cursos.seccion

Order by curso, modalidad, seccion

  • 20- Alumnos Repitentes

Select * from ficha where repite = 'SI'

  • 21- Sumar cuanto ha cobrado cada empleado.

Select cobros.cod_empleado, empleados.nombre, sum (conceptopago.precio)

From empleados, conceptopago, cobros

Where cobros. Cod_concepto=conceptopago.cod_concepto and empleados.cod_empleado=cobros.cod_empleado

Group by cobros.cod_empleado, empleados.nombre

  • 22- Sumar Todos los Cobros realizados.

Select sum (conceptopago.precio)

From conceptopago, cobros

Where cobros. Cod_concepto=conceptopago.cod_concepto

  • 23- Sumar los Cobros por Concepto.

Select cobros.cod_concepto, sum (precio)

From cobros, conceptopago

Where cobros. Cod_concepto=conceptopago.cod_concepto

Group by cobros.cod_concepto, conceptopago.cod_concepto

  • 24- Contar cuantos cobros se han hecho.

Select count (numcobro)

From cobros

Select cobros.rne, ficha.nombre, ficha.apellidos, cobros. Cod_concepto, conceptopago. Concepto, cobros.mes

From cobros, ficha, conceptopago

Where cobros.rne=ficha.rne and cobros. Cod_concepto=conceptopago.cod_concepto and cobros.rne='0503-1978-01415'

  • 26- Contar cuantos empleados hay.

Select count (cod_empleado)

From empleados

  • 27- Alumnos que no han realizado ningún pago.

Select ficha.rne, ficha.nombre, ficha.apellidos

From ficha left join cobros on ficha.rne = cobros.rne

Where (cobros.rne) is null

  • 28- Contar cuantos productos hay en la tienda.

Select sum (existencia) from productos

  • 29- Calcular la Inversión Total hecha en la tienda escolar.

Select sum (preciocosto)

From productos

  • 30- Ver los artículos por proveedor.

Select productos.cod_producto, productos.producto, productos.preciocosto, proveedores.nombre

From productos, proveedores

Where productos.cod_proveedor=proveedores.codproveedor

Order by proveedores.nombre

  • 31- Cuánto Dinero se le ha pagado a cada proveedor.

Select productos.cod_proveedor, proveedores.nombre, sum (preciocosto)

From productos, proveedores

Where productos.cod_proveedor=proveedores.codproveedor

Group by productos.cod_proveedor, proveedores.nombre

  • 32- Cuantos proveedores tenemos

Select count (codproveedor)

From proveedores

  • 33- Total Vendido

Select sum (total)

From detalle

Select detalle. nventa, detalle.cod_producto, productos.producto, detalle.total

From detalle, productos

Where detalle. Cod_producto=productos. Cod_producto

Order by nventa

  • 35- Total ventas por factura

Select nventa, sum (total)

From detalle

Group by nventa

Order by nventa

Select sum (impuesto) from detalle

  • 37- Total impuesto cobrado por factura.

Select nventa, round (sum (impuesto))

From detalle

Group by nventa

Order by nventa

Select productos.cod_producto, productos.producto from productos left join detalle on productos. Cod_producto=detalle. cod_producto

Where (detalle. cod_producto) is null

Order by producto

  • 39- Ver la factura más alta

Select sum (total), nventa

From detalle

Group by nventa

Order by sum (total) desc limit 1 offset 0

  • 40- Ver una factura x completa.

Select empleados.nombre, ventas. Nventa, detalle.cod_producto, productos.producto, detalle.precio_venta, detalle.cantidad, detalle.subtotal, detalle.impuesto, detalle.total

From empleados, ventas, detalle, productos

Where ventas.cod_empleado=empleados.cod_empleado and detalle. cod_producto = productos. Cod_producto and ventas. Nventa=detalle. Nventa

And ventas. Nventa='1'

Procedimientos almacenados

En nuestro proyecto utilizamos los procedimientos más que todo para asuntos de cálculo en las tablas que tienen que ver con valores numéricos.

Dichos procedimientos los programamos junto a un trigger para que se levanten automáticamente al efectuar una acción ya sea la de insertar un registro o actualizar un registro.

Para desarrollarlos hicimos una investigación en internet a fin de empaparnos un poco más sobre el uso de los mismos. Adjuntamos el manual que nos permitió desarrollar nuestros procedimientos.

Procedimiento # 1

Nuestra primera función es la más simple que se puede definir y lo único que hará será devolver el valor NULL:

CREATE OR REPLACE FUNCTION proteger_datos () RETURNS TRIGGER AS $proteger_datos$

DECLARE

BEGIN

— Esta función es usada para proteger datos en una tabla

— No se permitirá el borrado de filas si la usamos

— en un disparador de tipo BEFORE / row-level

RETURN NULL;

END;

$proteger_datos$ LANGUAGE plpgsql;

Procedimiento # 2

Ahora vamos a definir una nueva función un poco más complicada y un nuevo disparador en nuestra tabla productos, el procedimiento como podemos ver únicamente nos permite calcular el precio de venta de un producto. La función se llama rellenar_datos ( ) y el trigger tiene el mismo nombre, como podemos ver en el trigger le damos la orden que se debe ejecutar cuando insertemos o modifiquemos una línea.

CREATE OR REPLACE FUNCTION rellenar_datos () RETURNS TRIGGER AS $rellenar_datos$

DECLARE

BEGIN

NEW.precioventa:= (NEW.preciocosto+NEW.utilidad);

RETURN NEW;

END;

$rellenar_datos$ LANGUAGE plpgsql;

CREATE TRIGGER rellenar_datos BEFORE INSERT OR UPDATE

ON numeros FOR EACH ROW

EXECUTE PROCEDURE rellenar_datos ();

Procedimiento # 3

Nuestro tercer procedimiento tiene como función encontrar los promedios de los alumnos una vez que les hemos introducido los 4 parciales, ejecutamos un trigger con el mismo nombre del procedimiento; rellenar_notas

CREATE OR REPLACE FUNCTION rellenar_notas () RETURNS TRIGGER AS $rellenar_notas$

DECLARE

BEGIN

NEW.promedio :=( round (NEW.parcial1+NEW.parcial2+NEW.parcial3+NEW.parcial4)/4);

RETURN NEW;

END;

$rellenar_notas$ LANGUAGE plpgsql;

CREATE TRIGGER rellenar_notas BEFORE INSERT OR UPDATE

ON numeros FOR EACH ROW

EXECUTE PROCEDURE rellenar_notas ();

Procedimiento # 4

Nuestro cuarto procedimiento tiene como objetivo calcular los valores de las facturas, específicamente sobre la tabla detalle. Lo acompañamos con un trigger con el mismo nombre del procedimiento; rellenar_detalle () para que funcione debemos llenarle el precio_venta y la cantidad.

CREATE OR REPLACE FUNCTION rellenar_detalle () RETURNS TRIGGER AS $rellenar_detalle$

DECLARE

BEGIN

NEW.subtotal:= (NEW.precio_venta*New.cantidad);

New.impuesto:=(New.subtotal*0.12);

New.total:= (NEW.subtotal New.impuesto);

RETURN NEW;

END;

$rellenar_detalle$ LANGUAGE plpgsql;

CREATE TRIGGER rellenar_detalle BEFORE INSERT OR UPDATE

ON numeros FOR EACH ROW

EXECUTE PROCEDURE rellenar_detalle ();

Procedimiento # 5

Este procedimiento permite que al ingresar datos en la tabla ficha, solo debamos escribir la F o M y sea el procedimiento quien escriba la palabra completa Femenino o Masculino.

CREATE OR REPLACE FUNCTION rellenar_genero () RETURNS TRIGGER AS $rellenar_genero$

DECLARE

BEGIN

if New.sexo = 'F' then

New.sexo:='Femenino'

elsif;

if New.sexo = 'M' then

New.sexo:='Masculino'

endif;

end if;

End if;

RETURN NEW;

END;

$rellenar_genero$ LANGUAGE plpgsql;

CREATE TRIGGER rellenar_genero BEFORE INSERT OR UPDATE

ON ficha FOR EACH ROW

EXECUTE PROCEDURE rellenar_genero ();

Desarrollo en SQL SERVER 2005

En vista de que nuestro sistema deseamos subirlo a internet de manera que funcione en ambiente web, elegimos SQLSERVER 2005 ¿Por qué SQLSERVER?

Lo elegimos ya que la plataforma que vamos a elegir para programar el sistema es visual studio 2005 y de alguna forma pues funcionan como mejor estos dos programas juntos. Aparte que ya hemos tenido un poco de experiencia en SQLSERVER.

A continuación se presenta el diagrama relacional de sqlserver:

edu.red

Adjunto enviamos la base de datos creada en SQLSERVER 2005.

edu.red

 

 

Autor:

Néstor Domingo Vargas Galindo

Luis Alonso Ríos Galindo

edu.red

PROYECTO DE BASE DE DATOS

2011

UNIVERSIDAD PEDAGOGICA NACIONAL FRANCISCO MORAZA

Partes: 1, 2
 Página anterior Volver al principio del trabajoPágina siguiente