Práctica #1 Diseño SQL Desde Diagrama E-R
Práctica #1 Diseño SQL Desde Diagrama E-R
Práctica #1 Diseño SQL Desde Diagrama E-R
Grupo: ‘A’
Arequipa-Perú
2019
3) Usar un cliente de bases de datos para generar consultas SQL e insertar contenido
a las tablas. Ahorrándonos recordar de memoria y digitar algunos comandos SQL.
b) Software:
Instaladores de WAMP, busque una versión compatible con su sistema (32/64bits) en:
HeidiSQL http://www.heidisql.com/
Un ejemplo: tenemos una aplicación que registra el ingreso de los empleados a las instalaciones
de la organización. he aquí el modelo:
En este caso, existe una relación identificadora porque cada registro de ingreso_a_instalaciones
*requiere* que se especifique el id_empleado
De no especificarse, no se podría saber quién ingresó a las instalaciones. Eso convierte a cada
ingreso_a_instalaciones en una entidad débil, que depende de la existencia de otra entidad (el
empleado). El software para modelado usa este concepto.
Una relación no identificadora (non-identifying relationship) es una relación de uno-a-muchos
donde una entidad no depende de la existencia de otra, porque tiene su propia clave principal.
En este caso, yo puedo usar la clave foránea id_empleado_jefe para establecer qué otro
empleado es jefe de un empleado en particular, pero en sí, cada empleado tiene su id_empleado,
por lo que la relación con el *empleado jefe* no tiene para nada que ver con la existencia del
empleado común.
Propósitos de la normalización:
Descargue HeidiSQL un administrador de bases de datos MySql y conéctese como root a su DBMS
local. Permita que los servicios de Wamp estén activos.
TABLA: FABRICANTES
CLAVE_FABRICANTE NOMBRE
1 Microsoft
2 Samsung
3 Easy Mouse
4 Toshiba
5 Kingston
6 Sony
TABLA: ARTICULOS
1 Teclado $ 100 3
3 Mouse $ 80 3
9 CD Rom $ 200 2
Para insertar prueba usando la herramienta visual de HeidiSQL y también usando comandos Sql
como por ejemplo:
Pruebe la diferencia, ¿explique en su informe, en qué casos conviene insertar datos mediante
commandos SQL?
Que tanto la interfaz grafica como la consola de líneas de comandos no tienes mucha diferencia ya que la
interfaz virtual crea una consulta insert para insertar los registros tomando en cuenta que se pueden generar
consultas mas complejas tan solo haciendo uso del mouse en menos tiempo que si lo estuvieran haciendo en
la línea de comandos
/* OPERADOR AND */
/* OPERADOR BETWEEN */
WHERE ARTICULOS.Clave_fabricante=FABRICANTES.Clave_fabricante
r) Obtener la clave de producto, nombre del producto y nombre del fabricante de todos los productos
en venta
SELECT ARTICULOS.Clave_articulo, ARTICULOS.Nombre, FABRICANTES.Nombre
WHERE ARTICULOS.Clave_fabricante=FABRICANTES.Clave_fabricante
s) Obtener el nombre y precio de los artículos donde el fabricante sea Logitech ordenarlos
alfabéticamente por nombre del producto
ARTICULOS.Clave_fabricante=FABRICANTES.Clave_fabricante
t) Obtener el nombre, precio y nombre de fabricante de los productos que son marca Lexar o Kingston
ordenados descendentemente por precio
AND ARTICULOS.Clave_fabricante=FABRICANTES.Clave_fabricante
Y3) Cree otra tabla que relacione los artículos, fabricantes con clientes y una tabla
de ordenes.
La Primera Forma Normal Esta primera Forma Normal, nos lleva a no repetir datos en
nuestras tablas. Los famosos maestro – detalle, deben aplicarse a la estructura de la tabla.Si
nuestra tabla de ventas repite una y otra vez (por cada venta) , el nombre, el domicilio y otros
datos del Cliente, es que no hemos aplicado esta Normalizaciòn.Si tenemos una tabla clientes,
en la tabla ventas, solo deberia figurar el codigo del cliente, para que el resto de los datos se
puedan referenciar automaticamente sin problemas y sin duplicar información.Lo mismo
ocurriria en una tabla de detalle de ventas, si por cada item vendido colocamos el detalle del
producto, con su descripción , medidas, etc…Tendriamos un desaprovechamiento de espacio y
recursos muy grande. Para ello, tendremos nuestra tabla maestra de Productos y con solo
grabar el código de dicho producto en nuestra tabla de ventas, será suficiente.
1 2 01/12/2007 2 3333 2
1 4 01/12/2007 2 21 3
2 1 02/12/2007 5 3566 6
Tenemos un típico problema . ¿Acaso no se busca no repetir datos? Si toda una venta tendrá el
mismo número de Cliente y la misma Fecha…Por que no crear una Tabla de MAESTRO DE
VENTAS y que contenga esos 2 datos ?Es evidente que la
columna ClienteVenta y FechaVenta se repetirán por cada venta realizada.Es por ello que
proponemos el siguiente esquema
1 1 2334 10
1 2 3333 2
1 3 66643 34
1 4 21 3
2 1 3566 6
Y ahora nuestra nueva tabla maestra
VentaId FechaVenta ClienteVenta
1 01/12/2007 2
2 02/12/2007 5
Entonces, nuestra 2da Forma Normal nos habla de que cada columna de una tabla debe depender
de toda la clave y no constituir un dato unico para cada grupo de registros.
La Tercera Forma Normal En realidad si nos guiamos en el ejemplo de esta nota, ya no quedaria
normalización por aplicar y podriamos decir que nuestro ejemplo cumple con las 3 formas
normales, ya que la 3ra Forma Normal nos habla de que :
Esto es muy normal encontrar en bases mal normalizadas.Vemos que los campos
DESCRIPCION , MEDIDA y PROVEEDOR no dependen de VENTAID y es por ello que no
deberian estar dentro de la tabla de detalle de ventas, ya que dependen de PRODUCTOID.Aqui no
se trata ya de eliminar grupos repedidos de datos (1ra Forma Normal) sino que ante la inclusion de
una clave perteneciente a otra tabla, cualquier campo que sea subordinado de dicha clave debe
estar en otra tabla y no en nuestra tabla detalle.
Conclusión Finalmente si tomamos en cuenta que una tabla de detalle de venta (item x item)
puede contener un volumen de millones de registros, al haberle aplicado las 3 formas normales nos
estaremos ahorrando varios Gigabytes de tamaño en dicha tabla y por supuesto mejorado
notablemente la performance.
Conclusiones
Existe solo una llave primaria por tabla
Se debe tomas tomar en cuenta los campos de una tabla y si esta relacionadas con la llave
primaria de la tabla
Se puede unir distintas tablas con la palabra reservada join pero teniendo en cuenta que
las tablas al relacionarse deben estar unidas mediante claves foráneas
El uso del where en una consulta en importante ya que con esta palabra clave podemos
extraer registros mas específicos
Debemos entender el uso de una llave primaria y su relación con los campos de su tabla
ya que como se sabe que la llave primaria contiene registros no repetidos
Informe Final
Responda las preguntas formuladas a lo largo de la presente Práctica, desarrolle las consulta SQL,
sus resultados y agregue sus conclusiones y observaciones. Finalmente envíe por email su trabajo
a [email protected]