BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte...

41
Facultad de Estadística e Informática BASES DE DATOS AVANZADAS

Transcript of BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte...

Page 1: BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida Desarrollado

Facultad de Estadística e Informática

BASES DE DATOS AVANZADAS

Page 2: BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida Desarrollado

MVC – Clase 20 MODEL VIEW CONTROLLER

Page 3: BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida Desarrollado

Referencias Microsoft Virtual Academy. (9 agosto de 2014). Introduction to ASP.NET MVC. Obtenido de: https://mva.microsoft.com/en-US/training-courses/introduction-to-asp-net-mvc-8322?l=nKZwZ8Zy_3504984382

Rick Anderson. (28 sep de 2015). Getting Started with ASP.NET MVC 5. Obtenido de https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/introduction/getting-started

Nemanja, Kojic. ASP.NET MVC 5. Introducing ASP.NET MVC5. Microsoft. Obtenido de http://rti.etf.bg.ac.rs/rti/si3iep/vezbe-2014/ASP%20.NET%20MVC.pdf

Page 4: BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida Desarrollado

Proyecto Final SISTEMA DISTRIBUIDO DE REGISTRO DE BOLETOS DE AUTOBUSES DE TRANSPORTE

Page 5: BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida Desarrollado

Descripción Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida

Desarrollado en plataforma web (ASP.NET MVC)

Catálogos: ◦ Regiones (fragmentos de la base de datos) ◦ Estados ◦ Corridas de autobuses ◦ Pasajeros ◦ Viajes (corrida + pasajero = boletos)

Page 6: BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida Desarrollado

Descripción

Page 7: BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida Desarrollado

Descripción

Región I - CENTRO

Ciudad de México

México

Prueba

Región 3 - NORTE • Chihuahua • Coahuila • Nuevo León

Región 2 - SUR • Veracruz • Tabasco • Chiapas

Page 8: BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida Desarrollado

Distribución Catálogo Descripción Datos almacenados Región Tres fragmentos en los que esta dividida

la base de datos GLOBALES

RegiónLocal Nombre del fragmento local en cada región

LOCALES

Estados Estados de la república a los que abarcan las regiones

GLOBALES

Corridas Itinerario de corridas de autobuses en cada origen regional

LOCALES

Pasajeros Catálogo de pasajeros en cada región LOCALES Viajes Boletos adquiridos por región vinculando

una corrida con un pasajero LOCALES

Page 9: BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida Desarrollado

Instalación de Visual Studio 2017 Community https://www.visualstudio.com/es/downloads/

Desarrollo de ASP.NET y web

Page 10: BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida Desarrollado

Creando un nuevo proyecto 1

2

3

4

Page 11: BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida Desarrollado

Agregando la referencia EntityFramework

Page 12: BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida Desarrollado

Agregando las conexiones de la BD distribuida

<configuration> <configSections> <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> </configSections> <connectionStrings> <add name="CentroCdMx" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\CentroCdMx.mdf;Initial Catalog=CentroCdMx;Integrated Security=True" providerName="System.Data.SqlClient" /> <add name="SurVer" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\SurVer.mdf;Initial Catalog=SurVer;Integrated Security=True" providerName="System.Data.SqlClient" /> <add name="NorteMty" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\NorteMty.mdf;Initial Catalog=NorteMty;Integrated Security=True" providerName="System.Data.SqlClient" /> </connectionStrings> <appSettings>

Page 13: BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida Desarrollado

Ayuda para el manejo de validaciones en español

Page 14: BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida Desarrollado

Ayuda para el manejo de validaciones en español $.validator.methods.range = function (value, element, param) { var globalizedValue = value.replace(",", "."); return this.optional(element) || (globalizedValue >= param[0] && globalizedValue <= param[1]); } $.validator.methods.number = function (value, element) { var globalizedValue = value.replace(",", "."); return this.optional(element) || /^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(globalizedValue); } //Date dd/MM/yyyy $.validator.methods.date = function (value, element) { var globalizedValue = value; if (globalizedValue.indexOf("/") > 0) { var date = value.split("/"); globalizedValue = date[1] + "/" + date[0] + value.substr(value.indexOf(date[1] + "/") + 2); } return this.optional(element) || !/Invalid|NaN/.test(new Date(globalizedValue).toString()); } $.extend(jQuery.validator.messages, { required: "Este campo es requerido.", remote: "Por favor corrija este campo.", email: "Por favor introduzca una dirección de correo electrónico válida.", url: "Por favor introduzca una URL válida.", date: "Por favor introduzca una fecha válida.", dateISO: "Por favor introduzca una fecha válida (ISO).", number: "Por favor introduzca un número válido.", digits: "Por favor introduzca solo dígitos.", creditcard: "Por favor introduzca un número de tarjeta de crédito válido.", equalTo: "Por favor introduzca el mismo valor nuevamente.", accept: "Por favor introduzca un valor con una extensión válida.", maxlength: jQuery.validator.format("Por favor no introduzca más de {0} caracteres."), minlength: jQuery.validator.format("Por favor introduzca al menos {0} caracteres."), rangelength: jQuery.validator.format("Por favor introduzca un valor entre {0} y {1} de longitud de caracteres."), range: jQuery.validator.format("Por favor introduzca un valor entre {0} y {1}."), max: jQuery.validator.format("Por favor introduzca un valor menor o igual a {0}."), min: jQuery.validator.format("Por favor introduzca un valor mayor o igual a {0}.") });

Page 15: BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida Desarrollado

Filtro para verificar que se ha seleccionado una Región

Page 16: BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida Desarrollado

Filtro para verificar que se ha seleccionado una Región

Page 17: BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida Desarrollado

Filtro para verificar que se ha seleccionado una Región using System.Web; using System.Web.Mvc; using System.Web.Routing; namespace ProyectoADO.Filters { public class VerificaRegionAttribute : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { base.OnActionExecuting(filterContext); // Si no se ha seleccionado la región, cancelamos la petición if (HttpContext.Current.Session["RegionId"] == null) filterContext.Result = new RedirectToRouteResult( new RouteValueDictionary(new { controller = "Region", action = "Index" })); } } }

Page 18: BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida Desarrollado

Agregando los Modelos

Modelo

Vista Controlador

Page 19: BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida Desarrollado

Modelo Region

Page 20: BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida Desarrollado

Modelo Region using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace ProyectoADO.Models { public class Region { [Key] [DatabaseGenerated(DatabaseGeneratedOption.None)] public int RegionId { get; set; } [Required] [Display(Name = "Región")] public string Nombre { get; set; } } public static class CRegionId { public const int CENTRO = 1; public const int SUR = 2; public const int NORTE = 3; } }

Page 21: BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida Desarrollado

Modelo RegionLocal

Page 22: BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida Desarrollado

Modelo RegionLocal

using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace ProyectoADO.Models { public class RegionLocal { [Key] [DatabaseGenerated(DatabaseGeneratedOption.None)] public int RegionLocalId { get; set; } [Required] public string Nombre { get; set; } } }

Page 23: BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida Desarrollado

Modelo Estado

Page 24: BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida Desarrollado

Modelo Estado using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace ProyectoADO.Models { public class Estado { [Key] [DatabaseGenerated(DatabaseGeneratedOption.None)] public int EstadoId { get; set; } [Required] [Display(Name = "Estado")] public string Nombre { get; set; } [Required] public string NombreAbreviado { get; set; } [Required] public int RegionId { get; set; } [ForeignKey("RegionId")] public Region Region { get; set; } } }

Page 25: BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida Desarrollado

Modelo Pasajero

Page 26: BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida Desarrollado

Modelo Pasajero using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace ProyectoADO.Models { public class Pasajero { public int PasajeroId { get; set; } [Required] [Display(Name = "Estado")] public int EstadoId { get; set; } [ForeignKey("EstadoId")] public Estado Estado { get; set; } [Required] public string Nombre { get; set; } [Required] [EmailAddress] public string Correo { get; set; } } }

Page 27: BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida Desarrollado

Modelo Corrida

Page 28: BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida Desarrollado

Modelo Corrida using System; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace ProyectoADO.Models { public class Corrida { public int CorridaId { get; set; } [Required] [Display(Name = "Origen")] public int OrigenId { get; set; } [ForeignKey("OrigenId")] public Estado Origen { get; set; } [Required] [Display(Name = "Destino")] public int DestinoId { get; set; } [ForeignKey("DestinoId")] public Estado Destino { get; set; } [Required(ErrorMessage = "El campo {0} debe ser una fecha válida.")] [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy HH:mm}")] public DateTime Fecha { get; set; } [Required] [DisplayFormat(DataFormatString = "{0:C0}", ApplyFormatInEditMode = false)] public decimal Precio { get; set; } [Required] [Range(0, 50, ErrorMessage = "Se permite un valor entre 1 y 50 asientos")] public int Asientos { get; set; } } }

Page 29: BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida Desarrollado

Modelo Viaje

Page 30: BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida Desarrollado

Modelo Viaje using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace ProyectoADO.Models { public class Viaje { public int ViajeId { get; set; } [Required] public int CorridaId { get; set; } [ForeignKey("CorridaId")] public Corrida Corrida { get; set; } [Required] [Display(Name = "Pasajero")] public int PasajeroId { get; set; } [ForeignKey("PasajeroId")] public Pasajero Pasajero { get; set; } [Required] [Display(Name = "Asiento")] public int NumAsiento { get; set; } } }

Page 31: BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida Desarrollado

Agregar los DbContext para cada Región

Page 32: BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida Desarrollado

DbContext de base: BaseDbContext Para no repetir los BdSet en cada Región, creamos un BDContext base y usaremos herencia para heredar sus propiedades a las regiones

Page 33: BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida Desarrollado

DbContext de base: BaseDbContext

using ProyectoADO.Models; using System.Data.Entity; namespace ProyectoADO.DbContexts { public class BaseDbContext : DbContext { public DbSet<Region> Fragmentos { get; set; } public DbSet<RegionLocal> FragmentoLocal { get; set; } public DbSet<Corrida> Corridas { get; set; } public DbSet<Estado> Estados { get; set; } public DbSet<Pasajero> Pasajeros { get; set; } public DbSet<Viaje> Viajes { get; set; } } }

Page 34: BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida Desarrollado

DbContext CENTRO: CentroDbContext Para no repetir los BdSet en cada Región, creamos un BDContext base y usaremos herencia para heredar sus propiedades a las regiones

Page 35: BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida Desarrollado

DbContext CENTRO: CentroDbContext

using ProyectoADO.DbContexts; namespace ProyectoADO.DbContexts { public class CentroDbContext : BaseDbContext { } }

Page 36: BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida Desarrollado

DbContext SUR: SurDbContext Para no repetir los BdSet en cada Región, creamos un BDContext base y usaremos herencia para heredar sus propiedades a las regiones

Page 37: BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida Desarrollado

DbContext SUR: SurDbContext

using ProyectoADO.DbContexts; namespace ProyectoADO.DbContexts { public class SurDbContext : BaseDbContext { } }

Page 38: BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida Desarrollado

DbContext NORTE: NorteDbContext Para no repetir los BdSet en cada Región, creamos un BDContext base y usaremos herencia para heredar sus propiedades a las regiones

Page 39: BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida Desarrollado

DbContext NORTE: NorteDbContext

using ProyectoADO.DbContexts; namespace ProyectoADO.DbContexts { public class NorteDbContext : BaseDbContext { } }

Page 40: BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida Desarrollado

Gracias por su atención

Page 41: BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida Desarrollado

Referencias Microsoft Virtual Academy. (9 agosto de 2014). Introduction to ASP.NET MVC. Obtenido de: https://mva.microsoft.com/en-US/training-courses/introduction-to-asp-net-mvc-8322?l=nKZwZ8Zy_3504984382

Rick Anderson. (28 sep de 2015). Getting Started with ASP.NET MVC 5. Obtenido de https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/introduction/getting-started

Nemanja, Kojic. ASP.NET MVC 5. Introducing ASP.NET MVC5. Microsoft. Obtenido de http://rti.etf.bg.ac.rs/rti/si3iep/vezbe-2014/ASP%20.NET%20MVC.pdf