Proyecto Final, grupo 5 PDF

Title Proyecto Final, grupo 5
Author raye pember
Course Base de Datos II
Institution Universidad Mariano Gálvez de Guatemala
Pages 34
File Size 2 MB
File Type PDF
Total Downloads 121
Total Views 712

Summary

Universidad Mariano Gálvez de GuatemalaSección CBase de datos llIng. Francisco ArocheProyecto Final, grupo #IntegrantesNo. Carné Nombre Apellido Participaciónde 100%9941- 18 -2148 Javier Ignacio Meza Ruano 100% 9941- 18 -9018 Gabiani Marisleysis Perez Diaz 80% 9941- 18 -15518 Dayana del RosarioRiver...


Description

Universidad Mariano Gálvez de Guatemala Sección C Base de datos ll Ing. Francisco Aroche

Proyecto Final, grupo #5

Integrantes No. Carné

Nombre

Apellido

Participación de 100%

9941-18-2148 9941-18-9018 9941-18-15518

Javier Ignacio Gabiani Marisleysis Dayana del Rosario Victor Julio Maria Aracely

Meza Ruano Perez Diaz Rivera Esquite

100% 80% 80%

Ruiz Escobar Adqui Che

100% 80%

9941-10-12668 9941-18-22323

1

Índice Documentación Base de Datos ........................................................................................................... 3 1.

Diseño de db e implementación de diagrama en sql server. .................................................. 4

2.

Solución de alta disponibilidad ............................................................................................... 4

3.

Instalación de db en contenedor docker. ............................................................................. 10

Documentación Aplicación................................................................................................................ 16 1.

Enlace a repositorio de proyecto en github. ......................................................................... 17

2.

Instalación drivers sql server para php ................................................................................. 17

3.

Conexión a base de datos sql server ..................................................................................... 18

4.

Vista Login. ............................................................................................................................ 19

5.

Vista Menú. ........................................................................................................................... 21

6.

Vista Agregar/eliminar productos (insert, delete). ............................................................... 21

7.

Vista Ver productos (select y join). ....................................................................................... 23

Apéndice............................................................................................................................................ 26 1.

Enlace a video de youtube. ................................................................................................... 27

2.

Script SQL estructura base de datos. .................................................................................... 27

3.

Script SQL inserción de 15 registros por tabla. ..................................................................... 29

2

Documentación Base de Datos

3

1. Diseño de db e implementación de diagrama en sql server.

*Script de la db como apéndice del documento. 2. Solución de alta disponibilidad 2.1. Replicación transaccional Normalmente, la replicación transaccional se inicia con una instantánea de los datos y los objetos de la base de datos de publicaciones. En cuanto se obtiene la instantánea inicial, los posteriores cambios de datos y modificaciones del esquema realizado en el publicador habitualmente se entregan en el suscriptor cuando se producen (casi en tiempo real). Los cambios de datos se aplican al suscriptor en el mismo orden y dentro de los mismos límites de la transacción que cuando se produjeron en el publicador. Por tanto, en una publicación, se garantiza la coherencia transaccional.

4

2.2. Cómo funciona la replicación transaccional La replicación transaccional se implementa con el Agente de instantáneas, el Agente de registro del LOG y el Agente de distribución de SQL Server. El Agente de instantáneas prepara archivos de instantáneas que contienen esquemas y datos de las tablas y objetos de base de datos publicados, almacena los archivos en la carpeta de instantáneas y registra los trabajos de sincronización en la base de datos de distribución del distribuidor. El Agente de registro del LOG supervisa el registro de transacciones de cada base de datos configurada para la replicación transaccional y copia las transacciones marcadas para ser replicadas desde el registro de transacciones a la base de datos de distribución, que actúa como una cola de almacenamiento y reenvío confiable. El Agente de distribución copia los archivos de instantáneas iniciales de la carpeta de instantáneas y las transacciones almacenadas en las tablas de la base de datos de distribución a los suscriptores.

2.3. Replicación con base de datos de proyecto ‘proyecto_db2_grupo5’.

5

6

7

8

9

3. Instalación de db en contenedor docker. 3.1. Para la creación del contenedor de docker se tomo como referencia una virtual con iso de ubuntu 20.10 con una configuraron básica en vmware :

3.2. Para iniciar con la instalación del motor de docker se tiene que elevar los permisos a root como administrador con las siguientes instrucciones: #sudo passwd root **config new su password # su

3.3. Una vez ya con acceso de root procedemos a actualizar los repositorios de nuestro Sistema virtualizado y descargar el software necesario para correr el motor de docker con los siguientes comandos: #sudo apt-get update #apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common

10

3.4. Por Ultimo apuntamos el instalador para descargar y instalar el motor de docker # apt-get install docker-ce docker-ce-cli containerd.io

En mi caso ya estaba instalado por eso nos muestra ese mensaje en el ejemplo

11

3.5. Procedemos a descargar la imagen de sql del repositorio de hub para poder después crear el contendor de docker con sql, En mi caso use la última versión disponible para docker usando el siguiente commando: #docker pull mcr.microsoft.com/mssql/server:2019-latest Una vez descargado Podemos verificar el proceso de descarga finalizado con el commando: #docker images ls

3.6. Para poder crear almacenamiento persistente y poder mantener nuestra informacion guardada fuera del contenedor docker utiliza la function de volume por lo que procederemos a crear nuestro volumen con el nombre de “volumen1” con el siguiente commando : #docker volume create --name volumen1

Podemos verificar que el volume fue creado correctamente con el siguiente commando: #docker volume ls

3.7. Podemos darle al volumen un formato de tipo de archivos de ubuntu creando un contenedor con el siguiente commando el cual ayudara a la base de datos a crear las carpetas para utilizar en el tratamiento de los archivos de las bases de datos: #docker run -it --name contenedor1 -v volumen1:/data ubuntu /bin/bash

12

3.8. Después ya procedemos a jalar la imagen de sql que habiamos descargado para crear el contenedor de la base de datos con el siguiente commando: #sudo docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=" \ -p 1433:1433 --name sql1 -h sql1 \ -v volumen1:/var/opt/mssql \ -d mcr.microsoft.com/mssql/server:2019-latest



• •



Donde -e "ACCEPT_EULA=Y" : Es para aceptar el contrato de uso de sql .-e "SA_PASSWORD=" : Es para crear la contrasena del administrador de la base de datos. -p 1433:1433: para mapear los puertos de la base datos entre el contenedor y el host. -v volumen1:/var/opt/mssql : Es para dirigir el almacenamiento de datos del contenedor al volume de datos percistente en nuestro host. -d mcr.microsoft.com/mssql/server:2019-latest : para darle a saber a docker que se tiene que basar en esta imagen para crear el contenedor.

3.9. Una vez finalizado el proceso de la creación del contenedor de sql Podemos utilizar el comando: #docker ps -a para verificar que tanto el contedor de sql se haya creado y También el contenedor que manejara el volume:

13

3.10. Procedemos a entrar a la base de datos y crear una base de datos de prueba para verificar que todo se encuentra almacenado en el volumen persistente. Primero entramos al motor de sql en el contedor utilizando el siguiente commando: sudo docker exec -it sql1 "bash" /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P ""

3.11. Ya adentro creamos la base de datos con el siguiente commando: create database sqlvolumetestDB; go

3.12. Verificamos que la base de datos se haya creado correctamente con la siguiente consulta y nos arrojara lo siguiente. SELECT Name from sys.Databases go

14

3.13. Por ultimo salimos de la Ventana de comandos del contenedor de sql con quit y exit, y verificamos que nuestro volumen posea las bases de datos que necesitamos y las que se crearon para el laboratorio con el comando #docker volume inspect volumen1

Esto nos mostrara la ruta hacia donde se esta almacenado en la maquina virtual (host) los archivos que se generan en el contenedor de la base de datos.

15

Documentación Aplicación

16

1. Enlace a repositorio de proyecto en github. https://github.com/ljavigt/proyecto_final_db2 2. Instalación drivers sql server para php 2.1. Buscaremos en internet los drivers para nuestra versión de php (en nuestro caso drivers de php 8), los descomprimiremos y colocaremos en nuestra carpeta de xamp

2.2. Luego de colocarlos en nuestra carpeta deberemos activarlos desde el archivo php.ini agregándolos con la palabra “extensión” al principio y deberán quedar como se muestra en la siguiente imagen.

17

3. Conexión a base de datos sql server 3.1. Dentro de sql server se crea un usuario para poder acceder mediante la aplicación, con todos los permisos necesarios para un rol de administrador.

3.2. Revisamos dentro de sql server el nombre de nuestro servidor

3.3. Creamos un archivo, en este caso llamado “conexión.php” donde se agregará una variable con los datos de conexión y los pasaremos en la función sqlsrv_connect(nombre_servidor,variable_datos_conexion);

18

4. Vista Login. 4.1. Front. 4.1.1. Se realiza un formulario sencillo con 2 input para la contraseña y usuario más un botón que enviará los datos para procesarlos.

4.2. Back. 4.2.1. Se reciben los datos enviados del formulario mediante el método “Post” y se guardan en variables. 4.2.2. Se incluye el archivo de conexión 4.2.3. Creamos una variable que almacena una consulta tipo select que tomará el usuario que le hayamos enviado en el input de nombre y buscará alguno similar en la db. Seguido de esto si encuentra un usuario se compara el input contraseña con la contraseña de la db

19

4.2.4. Si es correcto todo se dirigirá al “menú” con archivo nombrado menú.php

4.3. Columnas de tabla usuarios.

20

5. Vista Menú. 5.1. Front. 5.1.1. Únicamente se agregarán 3 enlaces a las páginas que posteriormente crearemos como ver productos, agregar productos, agregar/eliminar usuarios

6. Vista Agregar/eliminar productos (insert, delete). 6.1. Agregar productos (insertar). 6.1.1. Front. 6.1.1.1. Al igual que el login, para obtener los datos requeridos en la tabla, crearemos inputs tipo texto que corresponden a todas las columnas solicitadas para un producto

21

6.2. Columnas de tabla inventario, para agregar productos.

6.3. Back. 6.3.1. Se reciben los datos del formulario, de los inputs correspondientes a las columnas de las tablas.

22

6.3.2. Se crea una consulta sql para insertar los datos obtenidos a través de los inputs correspondientes a cada columna de la tabla $consulta = "INSERT INTO dbo.inventario (codigo_producto,nombre_producto,des cripcion_producto,precio,tipo,marca_id) VALUES ('$codigo','$nombre','$descri pcion',$precio,'$tipo',$marca)";

6.4. Eliminar productos (delete). 6.4.1. Para nuestra consulta usaremos el input “código” para buscar en la tabla inventario el producto a eliminar.

6.4.2. Pasamos como parámetro la variable de código y esta se ejecutará en la consulta DELETE. $consulta = "DELETE FROM dbo.inventario WHERE codigo_producto ='$codig o_eliminar'";

7. Vista Ver productos (select y join). 7.1. Ver todos los productos (select). 7.1.1. Front. 7.1.1.1. Creamos un formulario donde únicamente estará un botón que al ser presionado ejecutará la consulta para traer todos los datos de la tabla inventarios.

23

7.1.2. Back. 7.1.2.1. Creamos la consulta que será un SELECT y este al traer los datos se colocarán en una tabla, cada uno asignado a una variable. $consulta = "SELECT * FROM dbo.inventario ";

7.1.2.2. Se recorre con un ciclo todos los resultados asignando una variable a cada resultado de cada columna

7.2. Ver código de producto con nombre de marca (join). 7.2.1. Front. 7.2.1.1. Creamos un formulario donde únicamente estará un botón que al ser presionado ejecutará la consulta para traer un join entre inventario y marca.

7.2.2. Back. 7.2.2.1. Creamos la consulta que será un SELECT y este al traer los datos se colocarán en una tabla, cada uno asignado a una variable.

24

7.2.2.2. Se recorre con un ciclo todos los resultados asignando una variable a cada resultado de cada columna. En este caso el código producto y nombre de marca.

25

Apéndice

26

1. Enlace a video de youtube. https://youtu.be/lhqtgTZ2j9o

2. Script SQL estructura base de datos. CREATE DATABASE proyecto_db2_grupo5 USE [proyecto_db2_grupo5] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[direcciones]( [direccion_id] [int] IDENTITY(1,1) NOT NULL, [calle] [varchar](50) NOT NULL, [avenida] [varchar](50) NOT NULL, [no_casa] [varchar](50) NOT NULL, [departamento] [varchar](50) NOT NULL, CONSTRAINT [PK_direcciones] PRIMARY KEY CLUSTERED ( [direccion_id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[inventario]( [articulo_id] [int] IDENTITY(1,1) NOT NULL, [codigo_producto] [varchar](50) NULL, [nombre_producto] [varchar](50) NULL, [descripcion_producto] [varchar](200) NULL, [precio] [int] NULL, [tipo] [varchar](50) NULL,

27

[marca_id] [int] NULL, CONSTRAINT [PK_inventario] PRIMARY KEY CLUSTERED ( [articulo_id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[marca]( [marca_id] [int] IDENTITY(1,1) NOT NULL, [nombre_marca] [varchar](50) NULL, CONSTRAINT [PK_marca] PRIMARY KEY CLUSTERED ( [marca_id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[usuarios]( [usuario_id] [int] IDENTITY(1,1) NOT NULL, [nombre] [varchar](50) NOT NULL, [apellido] [varchar](50) NOT NULL, [nombre_usuario] [varchar](50) NOT NULL, [contrasena] [varchar](50) NOT NULL, [direccion_id] [int] NULL, CONSTRAINT [PK_usuarios] PRIMARY KEY CLUSTERED (

28

[usuario_id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] GO ALTER TABLE [dbo].[inventario] WITH CHECK ADD CONSTRAINT [FK_inventario_marca] FOREIGN KEY([marca_id]) REFERENCES [dbo].[marca] ([marca_id]) GO ALTER TABLE [dbo].[inventario] CHECK CONSTRAINT [FK_inventario_marca] GO ALTER TABLE [dbo].[usuarios] WITH CHECK ADD CONSTRAINT [FK_usuarios_direcciones1] FOREIGN KEY([direccion_id]) REFERENCES [dbo].[direcciones] ([direccion_id]) GO ALTER TABLE [dbo].[usuarios] CHECK CONSTRAINT [FK_usuarios_direcciones1] GO

3. Script SQL inserción de 15 registros por tabla. USE [proyecto_db2_grupo5] GO SET IDENTITY_INSERT [dbo].[direcciones] ON GO INSERT [dbo].[direcciones] ([direccion_id], [calle], [avenida], [no_casa], [departamento]) VALUES (1, N'41', N'12', N'412', N'Guatemala') GO INSERT [dbo].[direcciones] ([direccion_id], [calle], [avenida], [no_casa], [departamento]) VALUES (2, N'56', N'4', N'156-9', N'Solola') GO INSERT [dbo].[direcciones] ([direccion_id], [calle], [avenida], [no_casa], [departamento]) VALUES (5, N'78', N'11', N'159-7', N'El Progreso') GO INSERT [dbo].[direcciones] ([direccion_id], [calle], [avenida], [no_casa], [departamento]) VALUES (8, N'78', N'19', N'136', N'Jutiapa') GO INSERT [dbo].[direcciones] ([direccion_id], [calle], [avenida], [no_casa], [departamento]) VALUES (9, N'3', N'4', N'789', N'Jalapa') GO

29

INSERT [dbo].[direcciones] ([direccion_id], [calle], [avenida], [no_casa], [departamento]) VALUES (10, N'2', N'6', N'123', N'Guatemala') GO INSERT [dbo].[direcciones] ([direccion_id], [calle], [avenida], [no_casa], [departamento]) VALUES (11, N'25', N'19', N'1166', N'Guatemala') GO INSERT [dbo].[direcciones] ([direccion_id], [calle], [avenida], [no_casa], [departamento]) VALUES (12, N'7', N'15', N'23-8', N'Quetzaltenango ') GO INSERT [dbo].[direcciones] ([direccion_id], [calle], [avenida], [no_casa], [departamento]) VALUES (13, N'4', N'25', N'78-96', N'San Marcos') GO INSERT [dbo].[direcciones] ([direccion_id], [calle], [avenida], [no_casa], [departamento]) VALUES (14, N'7 A', N'18', N'455', N'Chiquimula') GO INSERT [dbo].[direcciones] ([direccion_id], [calle], [avenida], [no_casa], [departamento]) VALUES (16, N'11 C', N'20', N'221', N'Chimaltenango') GO INSERT [dbo].[direcciones] ([direccion_id], [calle], [avenida], [no_casa], [departamento]) VALUES (17, N'9', N'10', N'4-28', N'Quiche') GO INSERT [dbo].[direcciones] ([direccion_id], [calle], [avenida], [no_casa], [departamento]) VALUES (18, N'7 B', N'Elena', N'46-8', N'Guatemala') GO INSERT [dbo].[direcciones] ([direccion_id], [calle], [avenida], [no_casa], [departamento]) VALUES (19, N'15', N'30', N'1530', N'Retahuleu') GO INSERT [dbo].[direcciones] ([direccion_id], [calle], [avenida], [no_casa], [departamento]) VALUES (20, N'16', N'Carabanchel', N'798', N'Solola') GO INSERT [dbo].[direcciones] ([direccion_id], [calle], [avenida], [no_casa], [departamento]) VALUES (1002, N'12', N'2', N'4565', N'Guatemala') GO INSERT [dbo].[direcciones] ([direccion_id], [calle], [avenida], [no_casa], [departamento]) VALUES (2009, N'8', N'23', N'7894', N'Guatemala') GO INSERT [dbo].[direcciones] ([direccion_id], [calle], [avenida], [no_casa], [departamento]) VALUES (2010, N'13', N'luz', N'1289', N'Chimaltenango') GO SET IDENTITY_INSERT [dbo].[direcciones] OFF

30

GO SET IDENTITY_INSERT [dbo].[usuarios] ON GO INSERT [dbo].[usuarios] ([usuario_id], [nombre], [apellido], [nombre_usuario], [contrasena], [direccion_id]) VALUES (2, N'Bianca', N'Simone', N'Bsimone', N'123', 11) GO INSERT [dbo].[usuarios] ([usuario_id], [nombre], [apellido], [nombre_usuario], [contrasena], [direccion_id]) VALUES (3, N'Adrian', N'Rostov', N'Rostov1', N'456', 12) GO INSERT [dbo].[usuarios] ([usuario_id], [nombre], [apellido], [nombre_usuario], [contrasena], [direccion_id]) VALUES (4, N'Christopher', N'Morgan', N'Morgan01', N'789', 1) GO INSERT [dbo].[usuarios] ([usuario_id], [nombre], [apellido], [nombre_usuario], [contrasena], [direccion_id]) VALUES (5, N'Rachel ', N'James', N'James6', N'147', 2) GO INSERT [dbo].[usuarios] ([usuario_id], [nombre], [apellido], [nombre_usuario], [contrasena],...


Similar Free PDFs