Sistema computarizado para el manejo de inventario de bodega.

of 91 /91
Universidad de Costa Rica Facultad de Ingeniería Escuela de Ingeniería Eléctrica IE – 0502 Proyecto Eléctrico Sistema computarizado para el manejo de inventario de bodega. Por: Francisco José Zumbado Alvarez Ciudad Universitaria Rodrigo Facio Diciembre del 2008

Embed Size (px)

Transcript of Sistema computarizado para el manejo de inventario de bodega.

  • UniversidaddeCostaRica

    FacultaddeIngeniera

    EscueladeIngenieraElctrica

    IE0502ProyectoElctrico

    Sistemacomputarizadoparaelmanejodeinventariodebodega.

    Por:

    FranciscoJosZumbadoAlvarez

    CiudadUniversitariaRodrigoFacio

    Diciembredel2008

  • Sistemacomputarizadoparaelmanejodeinventariodebodega.

    Por:

    FranciscoJosZumbadoAlvarez

    SometidoalaEscueladeIngenieraElctrica

    delaFacultaddeIngeniera

    delaUniversidaddeCostaRica

    comorequisitoparcialparaoptarporelgradode:

    BACHILLERENINGENIERAELCTRICA

    AprobadoporelTribunal:

    _________________________________Ing.AndrsDazSoto

    ProfesorGua

    _________________________________ _________________________________Ing.RobertoRodrguezRodrguez Ing.JosFreddyRojasChavarraProfesorlector Profesorlector

  • DEDICATORIA

    ADiosportodoloquemedaenlavida.Amifamiliayamigosportodoelapoyoy

    porserunaparteimportanteenmivida.

  • RECONOCIMIENTOS

    Alosprofesoresquemeayudaronenlarealizacindelproyecto,

    ascomoademspersonasquehicieronestoposible.

  • INDICEGENERAL

    NDICEDEFIGURAS..................................................................................................................viiNDICEDECUADROS................................................................................................................viiiNOMENCLATURA.......................................................................................................................ixRESUMEN......................................................................................................................................xCAPTULO1:Introduccin.........................................................................................................1

    1.1Justificacin...................................................................................................................11.2Objetivogeneral............................................................................................................21.3Objetivosespecficos.....................................................................................................21.4Metodologa...................................................................................................................2

    CAPTULO2:DesarrolloTerico................................................................................................42.1BasesdeDatos...............................................................................................................4

    2.1.1Objetivodeunabasededatos.......................................................................42.1.2Tiposdebasesdedatos..................................................................................52.1.3Abstraccindedatos.....................................................................................6

    2.2ModelosdeDatos..........................................................................................................72.2.1Modeloslgicosbasadosenobjetos..............................................................72.2.2Modeloslgicosbasadosenregistros...........................................................82.2.3Modelosfsicos...............................................................................................9

    2.3SistemasGestoresdebasesdedatos...........................................................................92.4Lenguajesdedefinicindedatos(DDL).....................................................................102.5Lenguajesdemanipulacindedatos(DML).............................................................102.6Administradordebasededatos..................................................................................102.7Usuariosdebasededatos............................................................................................112.8LenguajerelacionalSQL.............................................................................................11

    2.8.1Estructurabsica..........................................................................................122.8.2Tuplasduplicadas..........................................................................................132.8.3Operacionesdeconjuntos.............................................................................132.8.4Operadoresagregados...................................................................................132.8.5HAVING..........................................................................................................142.8.6Subconsultas...................................................................................................142.8.7Definicindedatos.........................................................................................142.8.8Tiposdedatos.................................................................................................142.8.9ndices.............................................................................................................152.8.10Vistas.............................................................................................................152.8.11Eliminacindetablas,ndicesyvistas.......................................................162.8.12Manipulacindedatos................................................................................162.8.13Normalizacindebasesdedatos................................................................17

    2.9EllenguajedeprogramacinRuby.............................................................................192.9.1Filosofadellenguaje.....................................................................................202.9.2Semntica.......................................................................................................202.9.3Sintaxis...........................................................................................................202.9.4Metaprogramacin........................................................................................21

  • 2.10ModeloVistaControlador.........................................................................................212.10.1Descripcindelpatrn................................................................................22

    2.11RubyonRails...............................................................................................................222.11.1 PrincipiosFundamentales..........................................................................232.11.2ElModeloVistaControladordeRubyonRails.........................................232.11.3Soportedebasesdedatos.............................................................................24

    CAPTULO3:Estructurageneraldelsistemadeinventariodebodega..................................263.1Estructuradelaaplicacinyaspectosgenerales........................................................263.2Basededatos..................................................................................................................263.3Modelo............................................................................................................................273.4Controlador....................................................................................................................273.5 Vista................................................................................................................................

    283.6Archivosdeconfiguracin............................................................................................293.7Otrascarpetas...............................................................................................................303.8Pluginsutilizados..........................................................................................................31

    CAPTULO4:Diseodelabasededatos..................................................................................334.1Basededatosparaactivosdebodega.........................................................................334.2Basededatosparamanejodeusuarios......................................................................35

    CAPTULO5:Modelo..................................................................................................................405.1Modelosdelsistemadeactivos.....................................................................................405.2Modelosdelsistemadeautenticacindeusuarios....................................................42

    CAPTULO6:Controladores......................................................................................................446.1Controladoresdesistemadeactivos...........................................................................446.2Controladoresdesistemadeautenticacindeusuarios...........................................49

    CAPTULO7:Vistas....................................................................................................................557.1Vistasdelsistemademanejodeactivos.....................................................................557.2Vistasdelsistemadeautenticacindeusuarios........................................................617.3Plantillagenricaparavistas.....................................................................................67

    CAPTULO8:Traducciones.......................................................................................................71CAPTULO9:Pruebas................................................................................................................74

    9.1Pruebasdevalidacin.................................................................................................749.2Bsquedas....................................................................................................................76

    CAPTULO10:Conclusionesyrecomendaciones.....................................................................7810.1Conclusiones................................................................................................................7810.2Recomendaciones........................................................................................................79

    BIBLIOGRAFA............................................................................................................................80

  • INDICEDEFIGURAS

    Figura1.Interrelacinentrenivelesdeabstraccindedatos.....................................................7Figura2.DiagramaERparaelsistemademanejodeactivos..................................................35Figura3.Vistaparacreacindeactivo.........................................................................................57Figura4.Vistaparaedicindeactivo...........................................................................................59Figura5.Vistadelistadodeactivos...............................................................................................61Figura6.Vistadelistadodeusuarios............................................................................................63Figura7.Vistadeedicindecontrasea.......................................................................................64Figura8.Vistadelistadoderolesasignados................................................................................65Figura9.Vistadelistadoderolesnoasignados............................................................................66Figura10.Vistafinaldelsistemaparaunusuarioconectado.....................................................69Figura11.Vistafinaldelsistemaparaunusuariodesconectado................................................70Figura12.Pruebadevalidacindeplacaexistente......................................................................74Figura13.Pruebadevalidacindenmerodeserieenblanco..................................................75Figura14.Pruebadevalidacindeplacaenblanco....................................................................75Figura15.Pruebadevalidacindeplacanonumeral.................................................................76Figura16.Pruebadebsquedadeactivopornmerodeserie. .................................................76Figura17.Pruebadebsquedadeactivoporplaca....................................................................77

  • INDICEDECUADROS

    Cuadro1.Activosenniveldenormalizacin0.............................................................................33Cuadro2.Activosenniveldenormalizacin1.............................................................................33Cuadro3.Activosenniveldenormalizacin2.............................................................................34Cuadro4.Estadosenniveldenormalizacin2............................................................................34Cuadro5.Marcasenniveldenormalizacin2.............................................................................34Cuadro6.Modelosenniveldenormalizacin3...........................................................................34Cuadro7.Marcasenniveldenormalizacin3.............................................................................35Cuadro8.Tabladeroles.................................................................................................................37Cuadro9.Tabladepermisos..........................................................................................................37

  • NOMENCLATURA

    ROR:RubyonRails.

    CSS:CascadingStyleSheet.Hojasdeestiloencascada,formatoutilizadoparadescribirelformatodepginasescritasenHTMLoXML.XML: ExtensibleMarkupLanguage.Metalenguajeextensibledeetiquetasutilizadoendesarrolloweb.

    HTML: Hyper Text MarkupLanguage. Lenguajedemarcadopredominanteenel desarrollo depginaserb.

    RTML: Real Time Markup Language. Lenguaje propietario de Yahoo utilizado para describirpginaswebparalaaplicaciopnYahoo!StoreEditor.

    JavaScript:Lenguajedeprogramacininterpretadoutilizadoprincipalmenteenpginasweb.

    Framework:Estructura de soporte que permite desarrollar proyectos de software utilizando unametodologadedesarrolloespecfica.

  • RESUMEN

    Este proyecto tiene como objetivo desarrollar una aplicacin que permita almacenar y

    manejarlainformacindelosequiposexistentesenelinventariodelabodegadelaescuelade

    IngenieraElctricadelaUniversidaddeCostaRica.

    SeutilizelgestordebasededatosPostgreSQLdebidoasubuenareputacinyestabilidad

    enelmanejodelasbasesdedatos.

    Paradesarrollarlaaplicacinwebseutiliz ellenguaje Ruby medianteun framework de

    desarrollodenominadoRubyonRails.

    Laestructura de la aplicacincomode cualquier aplicacinde RubyonRails, sigueel

    paradigmaModelovistacontrolador.Estepermitesepararlaaplicacinenunmodeloquerealizala

    comunicacinconlabasededatos,unavistaquemanejalapartevisibleparaelusuario,esdecirlas

    pginas web propiamente y un controlador encargado de interpretar y ejecutar las acciones

    realizadasporelusuarioypermiteenlazarelmodeloylasvistasdelaaplicacin.

    Laaplicacinsedividienunabasededatosparamanejodelosactivosdebodega,enla

    cualsealmacenanlosdiferentesactivosclasificadospormarca,modelo,estadoyconsurespectivo

    nmerodeplacayserial,yunabasededatosparaelalmacenamientodelainformacindelos

    usuariosylassesionesdeestos.

    De esta manera se aadi a la aplicacin un sistemade autenticacin de usuarios con

    diferentespermisosparaestos,segnseanusuariosnormalesquenicamentepuedanconsultarla

    informacinousuariosadministradoresquepuedenmodificarlainformacin.

    Finalmentelaaplicacindesarrolladacumpleconlosobjetivosplanteadosysedetermin

    queesadecuadaparacumplirlafuncindeseadadealmacenarlainformacindeelinventariodela

    bodegadelaescuelaalmismotiempoquepermitealosusuariosconsultarymodificarinformacin

    demaneraremotaatravsdeInternet.

  • CAPTULO1:Introduccin.

    1.1Justificacin.

    Enlaactualidadvivimosenunmundoenelcuallaeficienciaesunfactordeterminanteen

    todosloscampos,ylabsquedadeestahallevadoaldesarrollotecnolgicoconequiposqueson

    capaces de realizar tareas que antes deban realizarse completamente por personas, lo cual

    conllevabaamuchoserroreshumanosyqueademsrequerandemuchotiempoparallevarsea

    cabo.

    Eldesarrollodelacomputacinhapermitidoampliardegranformalasfuncionalidadesque

    selepuedendaralosavancestecnolgicos,yaquehapermitidounprocesamientorpidoyeficaz

    delainformacin.Eldesarrollodebasesdedatosparallevarregistrosinformticosesunadelas

    cosasquemshacontribuidoenelmanejodelainformacin,loquelashallevadoaexpandirsey

    popularizarseenmuchoscampos,convirtindolasenunaherramientaindispensablealahorade

    competir.

    Elalmacenamientodelainformacinhasidounaspectomuyimportante,sinembargoeste

    almacenamientonoservirademuchosinosetuvieraunadecuadoaccesoalainformacin.Las

    redesdecomputadorashansidofundamentalesenesteaspecto,permitiendoausuariosaccedera

    informacinenotroladodelmundodesdeunacomputadora, atravsdelaInternetoderedes

    privadasdeinformacin.

    Esteproyectopretendeutilizarestasherramientasquenospresentalatecnologaactualpara

    crearunsistemadealmacenamientocomputarizadoparaelinventariodelabodegadelaEscuelade

    IngenieraElctricadelaUniversidaddeCostaRica,medianteunabasededatosmanejadapor

    mediodeunainterfaz web, quepermitaa losfuncionariosdelabodegallevarunregistroms

    adecuadodelosequiposymaterialespresentesenlabodegayquealavezpermitaalosestudiantes

    y profesores acceder a este inventario de forma remota para comprobar la existencia y

    1

  • disponibilidaddemateriales.

    1.2Objetivogeneral.

    Crear un sistema computarizado de base de datos que permita almacenar, consultar y

    modificarelinventariodelabodegadelaEscueladeIngenieraElctricadelaUniversidad

    deCostaRica,permitiendoalusuariounmanejosimplemedianteunainterfazweb.

    1.3Objetivosespecficos.

    Diseareimplementarunabasededatosquepermitadescribirdemaneraptimalosactivos

    delabodegadelaEscueladeIngenieraElctricadelaUniversidaddeCostaRica.

    Seleccionarelgestordebasededatos,lenguajesdeprogramacinyherramientasquese

    utilizarnparaeldesarrollodelaaplicacin,utilizandocriteriostalescomorendimiento,

    flexibilidadyseguridad,entreotros.

    Desarrollarunaaplicacinwebquepermitahacerconsultasyadministrarlabasededatos.

    Crearunsistemadecontroldeaccesopararestringirelaccesoaalgunasfuncionesdela

    basededatosasignandociertospermisosalosusuarios.

    1.4Metodologa.

    Seinvestigasobrebasesdedatosdelicencialibreylosdiferentesgestoresparadeterminarel

    gestorquemsseadecaalasnecesidadesyrequerimientosdelproyecto.

    Seinvestigasobrelateoradebasesdedatosparautilizarlaeneldiseodelabasededatosa

    construir.

    Serealizaunaentrevistaconelencargadodelabodegapararecolectarinformacinsobrelos

    diferentesaspectosquedebeconsiderarlabasededatosparaelinventario.

    SerealizaunaentrevistaconelprofesortutorJoseFreddyRojasparaobtenerunaguaenel

    diseodelabasededatos.

    Se disea la base de datos, tomando en cuenta la informacin recopilada y utilizando

    2

  • tcnicasdediseoadecuadas.

    Seinvestigasobreloslenguajesmsadecuadosquepermitancrearunainterfazwebparala

    basededatosdiseada,paraescogerellenguajemsconveniente.

    Se investiga sobre el lenguaje escogido y sus diferentes herramientas que permitan el

    desarrollodelproyecto.

    Sedesarrollaunainterfazwebparalabasededatos,quepermitaalusuariointeractuarcon

    estademanera.

    Serealizanpruebasalaaplicacinparadetectarycorregirfallasenelsistemaygarantizarel

    buenfuncionamiento.

    Alolargodetodoelproyectosedesarrollaladocumentacinescritadeeste.

    3

  • CAPTULO2:DesarrolloTerico.

    2.1BasesdeDatos[1][2].

    Lasbasesdedatosobancosdedatossonconjuntosdedatosqueformanpartedeunmismo

    contextoysonalmacenadosdeunaformaordenadaparasuutilizacinposterior.

    Una biblioteca es un ejemplo de base de datos, donde la mayora de los datos son

    documentosimpresosytextos.

    El desarrollo tecnolgico y en especial de la computacin ha contribuido a desarrollar

    nuevasymseficientesformasdealmacenarbasesdedatos.

    Lossistemasdebasesdedatosestndiseadosparapoderalmacenargrandescantidadesde

    datos,loqueimplicalacreacindeestructurasadecuadasparaalmacenarlainformacinascomo

    ascomodemecanismosparalagestindeesta.

    Otropuntoimportanteenlasbasesdedatosesquedebenserlossuficientementeseguras

    para garantizar el almacenamientoconfiable dedatos y nopermitir manipulacinpor parte de

    personasnoautorizadas.

    2.1.1Objetivodeunabasededatos.

    Los sistemas de bases de datos son creados para evitar diversos problemas en el

    almacenamientodedatoscomolossiguientes:

    Redundanciaeinconsistenciadelosdatos:Laredundanciapuedeaumentarelcostode

    almacenamientoyacceso,ademssepuedepresentarelcasodequediferentescopiasdelos

    datosnoconcuerdenporloquesepresentaunainconsistenciaenlosdatos,porejemplosi

    paraunclientedeunbancosepresentanvariasdireccionesdedomicilio.

    Dificultaddeaccesoalosdatos: Cuandolacantidaddedatosesconsiderable,sepuede

    quererencontrarlosdatosquecumplanciertascaractersticas,locualsepuedecomplicarsi

    noseutilizanmtodosadecuadosyaqueseranecesariofiltrarestainformacindemanera

    4

  • manualobiencrearunaaplicacinnuevaquehagaestetrabajo.

    Aislamientodedatos: Ladiferenciadeformatosydelugaresdealmacenamientopuede

    provocarqueseadifcilobtenertodoslosdatosnecesarios.

    Anomalasdelaccesoconcurrente:Ensistemasdealmacenamientodedatosquepermiten

    a varios usuarios acceder y actualizar la informacin al mismo tiempo, pueden ocurrir

    anomalasalahoradehacerestaactualizacindelosdatos,porejemplosisemodificaun

    datoalmismotiempopor2usuarios,elresultadofinalpuedeserincorrecto.

    ProblemasdeSeguridad:Elaccesoalainformacindebeserrestringidoaciertosusuarios

    de manera que otros no autorizados sean bloqueados y se de un acceso seguro a la

    informacin.

    ProblemasdeIntegridad:Elsistemadealmacenamientodedatosdebesercapazdeevitar

    que algunos datos obtengan ciertos valores que se consideraran errneos, para de esta

    maneralograrmantenerlaintegridaddelosdatos.

    Todosestosproblemashanllevadoalacreacindesistemasgestoresdebasesdedatospara

    evitar que se presenten dichos problemas, y as lograr un almacenamiento de los datos ms

    eficiente.

    2.1.2Tiposdebasesdedatos.

    Lasbasesdedatossepuedenclasificardediferentesformas:

    Segnlavariabilidaddelosdatos:

    Estticas: Sonbasesdedatosdesololecturaquepuedeutilizarseparaalmacenardatos

    histricosdondelosdatosnodebenvariareneltiempo.

    Dinmicas:Enestasbasesdedatoslainformacinalmacenadaesmodificadaatravsdel

    tiempo,demaneraquese leagregannuevosdatosyotrossonactualizados, ademspor

    5

  • supuestodeoperacionesdeconsulta.

    Segnsucontenido:

    Bibliogrficas:Contienennicamentelosdatosparalalocalizacindelafuenteprimaria.

    Porejemplolabasededatosdeunabibliotecaquecontienelosdatosdelostextosyenque

    seccinsepuedelocalizarperonocontieneeldocumentoens.

    De texto completo: Almacenan fuentes primarias en su totalidad por ejemplo todo

    contenidodediferentesedicionesdelibrosyrevistas.

    Directorios:Unejemplosonlasguastelefnicas.

    Deinformacinbiolgica: Almacenaninformacindedatosbiolgicoscomosecuencias

    denucletidosyprotenas.

    2.1.3Abstraccindedatos.

    Laabstraccindedatossepresentaen3nivelesdistintos:

    Nivelfsico:Esteniveleselmsbajoydescribelaformaenquelosdatossonalmacenados

    fsicamente.

    Nivelconceptual:Elnivelconceptualdescribecualesdatosvanaseralmacenados

    realmenteycualeslarelacinentreestosdatos.Enesteniveltrabajaeladministradordela

    basededatosqueeselquedecidelainformacinquesealmacenar.

    NiveldeVisin:Elniveldevisinmuestrasolounapartedelabasededatosquepuedeser

    importantesegnelusuarioqueaccedaalosdatos.Desdeestenivelpuedenhabervarios

    puntosdevistadependiendodelusuario.

    Lasiguientefiguranosmuestralainterrelacinentreestosnivelesdeabstraccin:

    6

  • Figura1.Interrelacinentrenivelesdeabstraccindedatos.

    2.2ModelosdeDatos[1].Unmodelodedatosesungrupodeherramientasconceptualesqueseutilizanparadescribir

    losdatos,lasrelacionesentreellos,lasemnticaylasrestriccionesdeconsistencia.Sedividenen:

    modeloslgicosbasadosenobjetos,modeloslgicosbasadosenregistrosymodelosfsicos.

    2.2.1Modeloslgicosbasadosenobjetos.

    Los modelos lgicos basados en objetos se utilizan para describir datos en el nivel

    conceptualyelniveldevisin.Estosmodelospermitenunaestructuracinflexible,ademsque

    permitenespecificarrestriccionesdelosdatosexplcitamente.

    Existenvariosmodelosdeestetipo, sinembargolosmsrepresentativossonel modelo

    entidadrelacinyelmodeloorientadoaobjetos.

    Elmodeloentidadrelacin:

    Enestemodelosedefinenentidadesquesonobjetosquesedistinguendeotrosobjetospor

    ciertos atributos especficos que poseen. Adems se describen las relaciones que presentan

    diferentesentidades.

    Elmodelopresentaademslasrestriccionesalasquesedebenajustarlabasededatoscomo

    porejemplolacantidaddeentidadesalaquesepuedeajustarotraentidadpormediodeunconjunto

    derelacin.

    7

    Vista1 Vista2 Vistan

    NivelConceptual

    Nivelfsico

  • Laestructuradeunmodeloentidadrelacinsepuededescribirgrficamentepormediode

    diagramasER,loscualespresentanlasdiferenteentidadesysurelacinentreellasascomolos

    atributosdecadaentidad.

    Elmodeloorientadoaobjetos:

    Estemodelosebasaenunacoleccindeobjetosloscualescontienenvaloresalmacenados

    envariables.Estosvaloresseconsideranalavezobjetos,porloquesetienenobjetosquecontienen

    otros objetos que operan sobre el objeto. Adems el objeto se componen de cdigos que se

    denominanmtodosyqueoperantambinsobreelobjeto.

    Ladiferenciaconelmodeloentidadrelacinesqueenelmodeloorientadoaobjetoscada

    objetoposeesupropiaidentidadsinimportarlosvaloresquecontiene.

    2.2.2Modeloslgicosbasadosenregistros.

    Losmodelos basados enregistros describendatosenel nivel conceptual y fsico. Estos

    modelosseutilizanparaespecificarlaestructuralgicadelabasededatos,ademsdeproporcionar

    unadescripcinaunnivelmsaltodelaimplementacin.

    Estemodelotrabajaconregistrosfijosenelnivelfsico,loscualesposeenuntipofijoyuna

    longitud tambin fija. Estos modelos noposeen mecanismos para la representacindirecta del

    cdigoenlabasededatos,sinoqueseapoyanenotros lenguajesseparadosqueseasocianal

    modelopararealizarlasconsultasyactualizacionesalabasededatos.

    Losmodelosmsimportantesbasadosenregistrossonelmodelorelacional,elderedyel

    modelojerrquico.Elprimerodeelloseselmsaceptado.

    Modelorelacional:Estemodelopresentalosdatoselarelacinentreellosenunacoleccin

    detablas.Cadatablapresentaunnmerodecolumnasdeterminado.

    Modelo de red: En el modelo de red los datos se presentan mediante colecciones de

    registros,ylasrelacionessepresentanmedianteenlaces,quesepuedenvercomopunteros.

    8

  • Modelojerrquico:Elmodelojerrquicoesparecidoalmodeloderedpueslosdatosysus

    relacionessonpresentadosenregistrosyenlaces.Ladiferenciaesqueenestemodelolos

    registrosseordenancomocoleccionesderboles.

    Ladiferenciaentrelosmodelosrelacionalesylosderedyjerrquicosradicaenqueenlos

    dosltimosseutilizanpunterosoenlaces,mientrasqueenelrelacionalseconectanestosregistros

    mediantelosvaloresquecontienen.

    2.2.3Modelosfsicos.

    Estosmodelosseutilizanparadescribirlosdatosenelnivelmsbajo.Losmsconocidos

    sonelmodelounificadoryeldememoriadeloselementos.

    2.3SistemasGestoresdebasesdedatos[1][3].

    Unsistemagestordebasededatos(SGBD), esunaaplicacindesoftwareespecficaque

    estdedicadaafuncionarcomounainterfazentrelabasededatos,elusuarioylosprogramasque

    utilizandichainformacin.

    Estospermitenalosusuariosaccedermodificarlosarchivosquecontienenlainformacin,

    presentandoestainformacinalusuarioatravsdediversosnivelesdeabstraccindemaneraquela

    interaccinconelsistemasealomssimpleposibleparaelusuario.

    ElpropsitofinaldelosSGBDseseldemanejardeformasencillayordenadaconjuntosde

    datosrelevantesparabrindarunbuenmanejodeestos.

    UnSGBDcumplelassiguientesfunciones:

    Interactuarconelgestordearchivos:Losdatossealmacenaneneldiscoduroutilizandoel

    sistemadearchivos propiodel sistemaoperativoutilizado. El SGBDes el encaradode

    transformarlassentenciasdealmacenamientodelosdatosalformatopropiodelsistemade

    archivosdebajonivel.

    Implantacindelaintegridad:ElSGBDseencargadehacercumplirlasrestriccionesque

    9

  • pueden tener ciertos datos. El administrador de la base de datos es el encargado de

    especificarestasrestricciones.

    Implantacindelaseguridad:Sedebencumplirlosrequisitosdeseguridaddelabasede

    datosparaevitaraccesosnoautorizadosaestaporpartedeusuariosrestringidos.

    Copiadeseguridadyrecuperacin:ElSGBDdebedetectarfallosenlabasededatoscomo

    problemasconeldiscodealmacenamientoydebesercapazdecrearcopiasdeseguridad

    paraunavezquesepresenteunfallopoderrecuperardichainformacin.

    Controldeconcurrencia:Sedebecontrolarlainteraccindevariosusuariosqueactualizan

    labasededatossimultneamente,paraqueseconservelaconsistenciadelosdatos.

    2.4Lenguajesdedefinicindedatos(DDL)[1].

    Unlenguajededefinicindedatosespecificaelesquemadeunabasededatospormediode

    unconjuntodesentencias.Elresultadodelacompilacindeestassentenciasesunconjuntode

    tablasalmacenadasenunarchivollamadodiccionariodedatos.

    2.5Lenguajesdemanipulacindedatos(DML)[1].

    Unlenguajedemanipulacindedatospermitealosusuariosaccederymanipularlosdatos

    segnsuorganizacin.

    Puedenserdedostipos:

    Procedimentales:Estosrequierenqueesusuarioespecifiquelosdatosquesonnecesitadosy

    dequemaneraobtenerlos.

    No procedimentales: El usuario debe especificar los datos necesitados pero no como

    obtenerlos.

    2.6Administradordebasededatos[1].

    Unadministradordebasesdedatoseslapersonaquetieneelcontrolcentraldelosdatosy

    10

  • delosprogramasqueaccedenalabasededatosoeninglsdatabaseadministrator(DBA).

    Losadministradoresdebasesdedatostienenvariasfuncionesentrelasqueseencuentran:

    Definirelesquema.

    Definirlaestructuradealmacenamientoyelmtododeacceso.

    Modificarelesquemaylaorganizacinfsica.

    Concederautorizacindeaccesoalosusuarios.

    Especificarlasrestriccionesdeintegridaddelosdatos.

    2.7Usuariosdebasededatos[1].

    Existencuatrotiposdistintosdeusuariosdebasededatosquesediferencianporlaformaen

    queinteractanconelsistema:

    Programadoresdeaplicaciones:Sonusuariosquecreanaplicacionesparainteractuarcon

    elsistemapormediodesentenciasDMLincorporadasenunlenguajeprincipal.

    Usuarios sofisticados: Son usuarios que interaccionan con el sistema sin escribir

    programas.nicamentehacensusconsultasenellenguajedeconsultasdelabasededatos.

    Usuarios especializados: Son usuarios que escriben aplicaciones de bases de datos

    especializadasquenoencajanenelmarcotradicionaldeprocesamientodedatos.

    Usuariosingenuos:Sonusuariosqueinteractanconelsistemautilizandolosprogramasde

    aplicacincreados.Comounusuariodeuncajeroautomtico.

    2.8LenguajerelacionalSQL[1][8].

    EllenguajeSQLfuedesarrolladooriginalmenteporlaempresaIBMaliniciodeladecada

    delossetenta.Sunombresignificalenguajedeconsultaestructurado,delinglsStructuredQuery

    Language.

    Estelenguajesehaestablecidocomoellenguajerelacionaldebasededatosestndar.

    Poseevariaspartes:

    11

  • Lenguajededefinicindedatos(DDL):Proporcionardenesquedefinenlosesquemasde

    relacin.Ademseliminanrelaciones,creanndicesymodificanlosesquemas.

    LenguajeDemanipulacindedatos(DML):ElSQLincluyeunsistemadeconsultasbasado

    enlgebrarelacionalyclculorelacionaldetuplas.Ademssepuedeninsertar,eliminary

    modificartuplasenlabasededatos.

    Definicindevistas:Seincluyenrdenesparadefinirvistas.

    Autorizacin:Sepuedendefinirpermisosdeaccesoadiferentesrelacionesyvistas.

    Integridad:Seincluyenrdenesparaespecificarrestriccionesdeintegridadcomplejas.

    Control de transacciones: Incluye rdenes para especificar el inicio y el final de las

    transacciones.Ademsalgunasimplementacionespermitenbloqueodedatosparacontrolde

    concurrencia.

    2.8.1Estructurabsica.

    UnaexpresinSQLconstadetresclusulasbsicas:select,fromywhere.

    Select: Estaoperacinseusaparalistarlosatributosquesedeseanenelresultadodela

    consulta.

    From: Esta clusula lista las relaciones que se van a examinar en la ecaluacin de la

    expresin.

    Where:Implicalosatributosdelasrelacionesqueseespecificaronconlaclusulafrom.

    UnaconsultatpicaenSQLpresentalasiguienteestructura:

    selectA1,A2,...,Anfromr1,r2,...,rmwhereP

    DondelosAirepresentanatributosmientrasquelosirrepresentanrelaciones.AdemsPes

    unpredicado.

    Siseomitelaclusula where sedaporunhechoqueelpredicadoPesverdadero.Para

    12

  • indicartodoslosatributossepuedesustituirlosAiporunasterisco(*),estoseleccionartodoslos

    atributosdelasrelacionesri.

    2.8.2Tuplasduplicadas.

    El lenguaje SQL as como casi todos los lenguajes de consulta comerciales permiten

    duplicadosenlasrelaciones.Hayvecesquequeremoseliminarestosduplicados,paraestoseutiliza

    ellapalabradistinctdespesdelafraseselect,delasiguienteforma:

    selectdistinctXfromY

    Demaneracontrariaseutilizalapalabraallparaevitarqueseeliminenlosduplicados.

    selectallXfromY

    2.8.3Operacionesdeconjuntos.

    Lasoperacionesdeconjuntosunin,interseccinydiferenciasonincluidasporellenguaje

    SQL.

    Paralaoperacindeuninseutilizalasentenciaunion,paralaoperacindeinterseccinse

    utilizaintersect,mientrasqueparalaoperacindediferenciaseutilizalapalabraminus.

    La operacin union elimina las tuplas duplicadas automticamente. Para mostrar los

    duplicadosdebemosescribirunionall.

    La operacin union es parte del estndar SQL, sin embargo varios productos no las

    soportan.Mientrastantolasoperacionesintersectyminusnoseincluyenenelestndar.

    2.8.4Operadoresagregados.

    SQLpresentaoperadoresagregadosqueutilizancomoargumentounatributo.Elvalordel

    operador agregado se calcula sobre todos los elementos de la columna especificada o de ser

    especificadosgrupossecalcularsobrelosvaloresdecadagrupo.

    13

  • AVG:Calculaelcostopromedio.

    COUNT:Haceunacuentadelosartculosquepertenecenalatabla.

    SUM:Calculalasumadetodoslosvalores.

    MIN:Calculaelvalormnimo.

    MAX:Calculaelvalormximo.

    2.8.5HAVING.

    Laclusulahavingessimilaralaclusulawhere, esutilizadaparaconsiderarsologrupos

    quecumplanunrequisitoespecfico. Esta clusulautilizaexpresiones quecontenganfunciones

    agregadas. Toda funcin que involucre expresiones con funciones agregadas debe ir en esta

    clusula.

    2.8.6Subconsultas.

    Lasclusulashavingywherepermitenelusodesubconsultasencualquierlugarendondese

    espereunvalor.Elvalordelasubconsultadebederivardelasubconsultaprevia,estapropiedad

    ampliaelpoderexpresivodeSQL.

    Unasubconsultapuedeserdelasiguienteforma:

    select Xfrom Ywhere Z > (select Z

    from Y where W= 'frase')

    2.8.7Definicindedatos.

    SQLposeevariassentenciasutilizadasparadefinirdatos.Paradefinirrelacionesseusael

    comandocreatetablequecreaunatablaconlosatribuutosespecificados.

    Lasintaxisdeestecomandoeslasiguiente:

    createtablenombredelatabla(atributo1,tipodelatributo1[,atributo2,tipodelatributo2][,...]);

    14

  • 2.8.8Tiposdedatos.

    SQLsoportavariostiposdedatos.Lostiposmsimportantesyutilizadossemuestrana

    continuacin:

    INTEGER:Esunenterobinariode31bitsdeprecisinconsignodepalabracompleta.

    SMALLINT:Unenterobinarioconsignodemediapalabrade15bitsdeprecisin.

    DECIMAL(p[,q]):Esunnmerodecimalconsignoquepresentapdigitosdeprecisiny

    ademscontieneqdigitosaladerechadelpuntodecimal.

    FLOAT:Nmerodedoblepalabraconsignoyconcomaflotante.

    CHAR(n):Esunacadenadecaracteresconunalongitudfijadencaracteres.

    VARCHAR(n):Esunacadenadecaracteresconunalongitudvariabledeunvalormximo

    dencaracteres.

    2.8.9ndices.

    Losndicesnospermitenrealizardeunaformamsrpidaelaccesoaunarelacin,sepuede

    compararconunndicedeunlibroquenospermiteencontrardemaneramsrpidalaubicacinde

    lainformacinquenecesitamos.

    El ndiceevitaqueelsistemadearchivosleatodalatablaparalocalizarlainformacin

    deseada,ypermitealsistemadebasededatoschequearelvalordelndiceprimeroparaversieste

    lepermiteencontrardeformamsrpidalainformacin.

    Es recomendado crear ndices en las tablas para hacer ms eficiente el acceso a la

    informacin.Paracrearunndiceseutilizaelcomando createindex. Lasintaxisutilizadaesla

    siguiente:

    createindexnombre_del_indiceonnombre_de_la_tabla(nombre_del_atributo);

    Elnicocambioquepuedepercibirunusuarioconlautilizacindendiceseselincremento

    15

  • enlavelocidadalahoradebuscarinformacin.

    2.8.10Vistas.

    Unavistaesunatablavirtual,esdecirunatablaquenoexistefsicamenteenlabasede

    datosperoqueelusuariolapuedevercomosiexistiese.

    Lavistanotienedatospropiosalmacenados,sinoqueelsistemaguardaladefinicindela

    vistaquepermitesabercualessonlastablasbasequepresentanlainformacinquelavistanecesita.

    Elcomandoutilizadoparacrearvistasescreatevie.Lasintaxisqueseutilizaes:

    createviewnombre_de_la_vistaassentencia_select

    Sentecia_selectserefiereaunainstruccinselectquepermiteadquirirlainformacinpara

    crearlatabladelavista.

    2.8.11Eliminacindetablas,ndicesyvistas.

    Paraeliminartablasseutilizalainstruccindroptable,conlssiguientesintaxis:

    droptablenombre_de_la_tabla

    Paralaeliminacindeindicesseutilizaelcomandodropindex,lasintaxiseslasiguiente:

    dropindexnombre_del_ndice

    Paraeliminarvistasseutilizaelcomandodropview,conlasiguientesintaxis:

    dropviewnombre_de_la_vista

    2.8.12Manipulacindedatos.

    Existencomandosparamanipulacindedatosquepermiteninsertar,actualizaryborrarlos

    datosencadatabla.

    Parainsertartuplasalastablasseutilizaelcomandoinsertinto,quepresentalasiguiente

    sintaxis:

    insertintonombre_de_la_tabla(nombre_atributo_1

    16

  • [,nombre_atributo_2][,...])values(valor_atributo_1

    [,valor_atributo_2][,...]);

    Paraborrarunatuplaseutilizaelcomandodeletefrom,conlasiguientesintaxis:

    deletefromnombre_de_la_tablawherecondicin;

    Tambinsepuedenrealizarcambiosenunvaloranteriormenteingresado,paralocualse

    utilizaelcomandoupdate,quepresentalasiguientesintaxis:

    updatenombre_de_la_tablasetnombre_atributo_1=valor_1[,...[,nombre_atributo_k=valor_k]]wherecondicin;

    2.8.13Normalizacindebasesdedatos[4].

    Lanormalizacindebasesdedatosesunprocesoutilizadoeneldiseodebasesdedatos

    relacionales,medianteelcualsepuedenevitarciertosproblemasenelmanejodelosdatos.

    Enlanormalizacinsetransformanlosdatosenestructurasmspequeasdemaneraque

    seanmssimples,msestablesymsfcilesdemantener.Ademshacemsfcilesdeentenderlas

    estructurasdedatosparalaspersonas.

    Otradesusventajas consisteenquesereduceel espaciodealmacenamientoporquese

    evitandatosduplicados.

    Lanormalizacinpermitebsicamenteevitarredundanciaenlosdatosalmacenados,adems

    deproblemasenlaactualizacindeestosdatos.Permitedeestaformagarantizarlaintegridadde

    losdatos.

    Enelmodelorelacionaldebasesdedatos,lasrelacionessesuelenvercomotablas,siempre

    ycuandocumplanciertosrequisitoscomoquetodaslascolumnasdebentenerunnombrenico.

    17

  • Lasfilasdelatablaotuplasnopuedenestarrepetidas,esdecir,nosepermitendatosduplicados.

    Ademsenunacolumnatodoslosdatosdebenserdelmismotipo.

    Formasnormales:

    Lasformasnormalessonlosdiferentesnivelesdenormalizacinquesepuedenalcanzaral

    realizarundiseodeunabasededatos.

    Existen 5 formas normales, sin embargo las primeras 3 formas sonsuficientes para las

    necesidadesdelamayoradebasesdedatos.Inclusiveseconsideraenalgunoscasosinadecuado

    llevar una base de datos a un nivel mayor al necesario ya que puede aumentar el nivel de

    complejidaddeestainnecesariamente.

    Formanormal1(1NF):

    Enestaformaseestablecequesedebeneliminartodoslosgruposrepetitivosenlastablas.

    Ademssedebecrearunatablaseparadaparalostiposdedatosrelacionados.

    Porltimoseestablecequecadatabladebetenerunaclaveprimariaparaidentificarasus

    datos,estaclaveprimariadebesernicaparacadaelementodelatabla.

    Formanormal2(2NF):

    Lasegundaformanormalestablecequelastablasqueposeengruposdedatosqueseaplican

    avarioselementosalavezsedebencreartablasseparadasparadichosdatosysedeberelacionar

    dichastablasmedianteclavesexternas.

    Formanormal3(3NF):

    Eltercerniveldenormalizacintienencomoobjetivoevitarqueexistandatosduplicadoso

    erroresenestos,porlocualsedebeubicarentablasseparadasloselementosquenodependandela

    clave,esdecirloselementosenlatablaquenoseanexclusivosdeelelementodelatablaquese

    identificaconelidentificadordelatabla.

    Eltercerniveldedenormalizacinimplicaquelastablaspuedencrecertodoloquequieran

    18

  • sin duplicacin ni corrupcin de datos. Este nivel de normalizacin se dice suficiente para la

    mayora de las aplicaciones, ya quepuedemanejar los datos obtenidos en su totalidad de una

    manerafcil.

    Formanormal4(4NF):

    Encasosespecficosenlosquesetieneunarelacindevariosconvariosesdecir,queun

    elementodelatablaAtengavarioselementosdelatablaB,yquealmismotiempounelementode

    latablaBtengavarioselementosdelatablaA,senecesitaunniveldeformalizacin4.

    Esteniveldeformalizacinindicaquecuandoexistenrelacionesdevariosconvarios,las

    entidadesindependientesnosepuedenalmacenarenlamismatabla.

    Formanormal5(5NF):

    Esteniveldenormalizacinseaplicaalgunasveces,sinembargoenlamayoradeloscasos

    noesnecesarioparaobtenerunamejorfuncionalidadennuestraaplicacin.

    El principio de esta dice que se puede reconstruir la tabla original desde las tablas

    resultantesenlasquefueseparadadichatabla.

    Elaplicarestareglapermiteasegurarquenosehacreadoningunaentradaextraaenlas

    tablas,yquelaestructuradetablascreadaesdeltamaojusto.Sinembargonoesnecesariaa

    menosqueseestetrabajandoconunaestructuradedatosdemasiadoextensa.

    2.9EllenguajedeprogramacinRuby[5][7].

    Ruby esunlenguajedeprogramacinorientadoaobjetos,interpretadoymultiplataforma,

    fuecreadoporYukihiroMatsumotoen1993ypresentadopblicamenteen1995. Lasintaxisdel

    lenguajeestainspiradaenotroslenguajescomo Perl y Python, ademsposeecaractersticasde

    programacin orientada a objetos. Adems comparte funcionalidad con otros lenguajes de

    programacincomoLisp,Lua,DylanyCLU.

    Suimplementacinoficialesdistribuidabajounalicenciadesoftwarelibre.

    19

  • ElnombredellenguajeprocededeunabromaenalusinalnombredellenguajePerl,yaque

    amboshacenreferenciaanombresdepiedraspreciosas.

    Laltimaversinestabledellenguajehastaestemomentoesla1.8.6quefuepublicadaen

    Diciembredel2007,mientrasqueesemismomesaparecilaversin1.9.0queesunaversinde

    desarrolloquepresentavariasmejoras.

    2.9.1Filosofadellenguaje.

    El creador de este lenguaje ha expresado que su creacin fue hecha pensando en la

    productividadascomolafacilidadydiversinparaelprogramador,esporesoquepresentauna

    buenainterfazalusuario,dndoleunmayornfasisalasnecesidadesdelprogramadorquealasde

    lamquina.

    Ellenguajesigueunprincipiollamadoprincipiodelamenorsorpresa,quequieredecir

    queellenguajedebegenerarlamenorconfusindelosusuariosexperimentados,estodebidoaque

    elcreadordecidihacerunlenguajequefueracapazdehacerlaprogramacinmsdivertidaparael

    mismo,minimizandoeltrabajoalahoradeprogramaryevitandoconfusiones.

    2.9.2Semntica.

    Enestelenguajetodoslostiposdedatossonconsideradocomounobjeto,incluyendolas

    clasesylostiposqueenotroslenguajessondefinidoscomoprimitivas. Todaslasfuncionesdon

    mtodosylasvariablessonreferenciasaobjetos,peronuncaunobjetoporsisolas.

    Permiteademsutilizarprogramacinprocedural,esdecirquesepuedendefinirfuncionesy

    yvariablesfueradelasclases,todasestasdefinicionessernpartedeunobjetorazllamadoObject.

    En Ruby noserequieredepolimorfismodefuncionesyaqueentodas lasfuncionesse

    puedenpasardatosdedistintaclaseencadallamadadelmtodo,debidoaqueellenguajemaneja

    tiposdedatosdinmicos.

    20

  • Elpolimorfismodetipossiessoportado,esdecirquesepuedenmanejarclasesutilizandola

    interfazdesuclasepadre.

    2.9.3Sintaxis.

    LasintaxisdeestelenguajeesmuyparecidaaladePerlyPython.Lasclasesylosmtodos

    sedefinenconpalabrasclaves.

    Lasvariablespuedenllevarprefijosparaindicarelrangodevaloresquepuedetomaresa

    variable.

    Laspalabrasclavesseutilizanparadefinirvaloressinutilizarllaves,adiferenciadeotros

    lenguajescomoPerly C.Lossaltosdelneasoninterpretadoscomoelfinaldeunasentencia,el

    puntoycomatambinsepuedeutilizarparadichopropsito.

    EnRubylasvariablesdeclasesprivadassemantienendentrodeellas,ysolosepueden

    utilizaratravezdemtodosdeacceso.Seobligaatodaslasvariablesdeclasesaserprivadaspero

    tambinseproporcionaunaformasencilladeutilizarmtodosdeaccesoaellas.

    2.9.4Metaprogramacin.

    LametaprogramacinesunadelascaractersticasdeRuby.Consisteencrearprogramasque

    puedanmanipularoinclusivecrearotrosprogramascomodatos,orealizardurantelacompilacin

    partedeltrabajoqueserealizaradurantelaejecucindeotraforma.

    Estacaractersticapermitealprogramadorahorrartiempodedesarrollodecdigo.

    El compilador es la herramienta que comnmente utiliza la metaprogramacin, ya que

    permitealprogramadorrealizarunprogramaenunlenguajedealtonivelyluegolotraducea

    lenguajeensamblador,locualahorramuchotiempo.

    2.10ModeloVistaControlador[9][10].

    ElModeloVistaControladoresunpatrndediseodesoftwarequeseutilizaeneldiseo

    deaplicacionesconinterfacessofisticadas.

    21

  • Este patrn permite separar una aplicacinen tres componentes distintos: La lgica de

    control,losdatosylainterfazdeusuario.

    EsutilizadocomnmenteenaplicacioneswebendondelavistaeselcdigoHTMLyotros

    cdigosquepermitendesplegardatosdinmicamente,elmodeloeselsistemagestordebasesde

    datosylalgicadenegociomientrasqueelcontroladoreselmecanismoquerecibeloseventos

    desdelavista.

    2.10.1Descripcindelpatrn.

    Elpatrnestaconformadoportreselementoscomosemencion:

    Modelo: Elmodelo es el encargadodeacceder a la capa de almacenamientodedatos,

    adems dedefinir la funcionalidaddel sistema. Ademsdebellevarunregistrodelas vistas y

    controladoresdelsistema,paraqueseacapazdenotificaraestossobreloscambiosquepueda

    producirunagenteexternoalosdatos.

    Vista:Lavistaseencargaderecibirlosdatosdeunmodeloymostrarlosalusuario.Debe

    tenerademsunregistrodelcontroladorqueporlogeneralesinstanciadoporestafase.Presentael

    modeloenunformatoquepuedainteractuarconelusuario,porlogeneraleslainterfazdelusuario.

    Controlador: Es el encargado de recibir los eventos de entrada e interpretarlos para

    determinarlaaccinquedeberealizarcadaevento.Porejemplocuandounusuariorealizaunclic

    sobreunbotnelcontroladordeberecibirlasolicitudydeterminarlaaccinarealizar.

    2.11RubyonRails[6][11].

    RubyonRailsesunframeworkparadiseodeaplicacioneswebdecdigoabiertoescritoen

    ellenguajeRuby.EstesigueelparadigmadelaarquitecturadeModeloVistaControlador(MVC).

    Un framework es unaestructuradedesarrollodesoftwareapartir de la cual sepueden

    desarrollar otrosproyectos. Por lo general incluyesoportedeprogramas, bibliotecasy lenguaje

    interpretadoquepermiteunirloscomponentesdelproyecto.

    22

  • RubyonRailsfueescritoporDavidHeinemeierHanssonyliberadoalpblicoporprimera

    vezenelao2004.Apartirdeesemomentosehanlanzadovariasversiones,siendolamsactual

    laversin2.1publicadael1deJuniodel2008.

    Laprincipal caracterstica de este framework es que permite desarrollar aplicaciones de

    utilidad en el mundo real de una forma sencilla, reduciendo la cantidad de cdigo y de

    configuracinnecesariosconrespectoaotrasopciones.

    LametaprogramacinpropiadellenguajeRubyesutilizadaporRubyonRailsparapermitir

    unasintaxismslegibleparalosusuarios.

    Existenmuchosproyectosypginasconocidosqueutilizan RubyonRails, queaunquees

    muyrecientehatenidogranaceptacinentrelosusuariosademsqueposeegrandocumentacinen

    lneaparafacilitarlaayudaadesarrolladores.

    2.11.1 PrincipiosFundamentales.

    RubyonRails utiliza dos principios fundamentales comolosonel principiode Note

    repitasyeldeConvencinsobreConfiguracin.

    ElprincipiodeNoterepitasserefierealhechoderealizarlasdefinicionesunasolavez.

    Esporesoquealahoradeprogramarloscomponentesseintegrandemaneraquenoesnecesario

    establecerpuentesentreellosyaqueelmismosistemalosrealiza,porejemplosisequieredefinir

    una clase no es necesario especificar los nombres de las columnas sino que son identificadas

    automticamenteatravsdelabasededatos.

    ElprincipiodeConvencinsobreConfiguracinbuscaqueelprogramadornicamente

    debaespecificarlasconfiguracionesquenoseanconvencionales.Estopermitequealrealizaruna

    basededatospartiendodecero,sepuedanseguirlasconvencionespropiasdeRubyonRailsloque

    ahorracdigo.

    2.11.2ElModeloVistaControladordeRubyonRails.

    23

  • RubyonRailspresentaunpatrnModeloVistaControladordefinido,loselementosdeeste

    modelosonlossiguientes:

    Modelo: El modeloconsiste bsicamenteen las clases queson la representacinde las

    diferentes tablasdelabasededatos. Paraaccedera lasclasesdelmodelosedebenicamente

    heredar la clase ActiveRecord::Base y el programa encontrar que tabla debe utilizar y que

    columnasposeedichatabla.

    Aldefinirunaclasesedetallaasuvezlasrelacionesentrelasclasesmedianteunaestructura

    objetorelacional.

    Lasrutinasparavalidacindedatosascomolasdeactualizacintambinsonespecificadas

    eimplementadasenelmodelo.

    Vista:Lavistapresentalalgicaquepermitelavisualizacindelosdatosdelasclasesdel

    Controlador.Estaesconsideradaporlogeneralparaaplicacioneswebcomoelcdigoincluidoen

    HTML.

    EnRails seutilizaunmodelodeRuby integrado,queutilizaarchivosconformatoRTML.

    EstosestncompuestosporcdigosHTML,mezcladosconcdigode Ruby. Tambinsepueden

    construirvistasenHTMLoXML.

    CadamtododelcontroladordebellevaruncdigoenHTMLparamostrarinformacinal

    usuario.Ladistribucindeloselementosdelapginasedescribeseparadamentedelasaccionesdel

    controlador.

    Controlador: Estas clases son las que responden a la interaccin con el usuario y

    determinanlalgicaquesedebeseguircuandosedaunevento,paramanipularlosdatosdelas

    clasesymostrarlosresultadosatravsdelavista.Estosmtodossoninvocadosporelusuario

    utilizandounnavegadorwebenaplicacionesdeestetipo.

    Elcontroladoresimplementadoen RubyonRailspor el ActionPack. Apartirdelaclase

    24

  • ApplicationController se puedenheredar otras clases para definir acciones comomtodos para

    invocaratravsdelnavegadorweb.

    RubyonRailspermiteconstruirdeformarpidalamayorpartedelalgicadecontrolylas

    vistasnecesariasparalasoperacionesmscomunes.

    2.11.3Soportedebasesdedatos.

    RubyonRailsproporcionasoporteparalautilizacindebasesdedatos,favoreciendosuuso

    atravsdeungestordebasesdedatos.SesoportalabibliotecaSQLiteencasodequenosepueda

    utilizarunabasededatos.Lainteraccinconlabasededatosesabstractadesdeelpuntodevista

    delprogramador,ylosaccesossonrealizadosautomticamentesinnecesidaddeutilizarconsultas

    detipoSQLaunquedequererusarsesepuedenutilizar.

    Entrelossistemasgestoresdebasededatossoportadosseencuentran:MySQL,PostgreSQL,

    SQLite,IBMDB2,OracleyMicrosoftSQLServer.

    25

  • CAPTULO3:Estructurageneraldelsistemadeinventariode

    bodega.

    3.1Estructuradelaaplicacinyaspectosgenerales.

    Labasededatosdelsistemadesarrolladoestadivididaendospartesesenciales:Unabase

    dedatosquemanejalosactivosdelabodega,consusdiferentesmarcas,modelosyestadosdelos

    activos,yotratablaquemanejalosusuariosenlacualsealmacenalainformacinpersonaldeestos

    ascomolainformacinutilizadaparalaconexindeestosalsistemacomolosonelnombrede

    usuarioylascontraseas.

    Paralabasededatosseutilizelgestordebasededatos PostgeSQL,queesdeusolibre,

    ademsdeserunodelosmsreconocidosporsuexcelentemanejodedatospermitiendoconservar

    suintegridadycoherencia.

    Laaplicacinsedesarrolloenellenguajedeprogramacin Ruby utilizandoel framework

    RubyonRails, el cual permite implementar el manejo de la basededatos deuna formams

    sencilla, ahorrando al programador muchocdigo que se puede hacer genrico para todas las

    aplicaciones.

    Laaplicacinutilizaunaestructuramodelovistacontrolador,porlotantoloscdigosestas

    clasificados segn estas tres secciones. Todos estos archivos relacionados directamente con la

    aplicacinseencuentranenlacarpetaapp,divididosencarpetasseparadasparacadaunadelas

    secciones.

    Ademsexistenvariosarchivosdeconfiguracinascomolibrerasutilizadasentreotras

    cosas.

    3.2Basededatos.

    ComoyasemencionseutilizaesgestordebasededatosPostgreSQL,paraeldesarrollode

    laaplicacinseutilizlaversin8.3.3.

    26

  • Seutilizaunadaptadorqueseencargaderealizarelmanejodelabasededatos,incluyendo

    lacreacindelasbasesdedatosautilizarylacreacindesustablas,traduciendocdigoRubyen

    sentenciasSQLpararealizardichastareas.

    La base de datos se encarga del almacenamiento de forma segura y confiable de la

    informacin, tanto de activos de bodegacomode usuarios, sesiones y roles utilizados para la

    autenticacinalsistema.

    3.3Modelo.

    Elmodeloeslaparteencargadadelmanejodirectodelabasededatosysusrelaciones.Esla

    representacinde la basededatosdesde la aplicacin,demaneraquemaneja las tablasysus

    elementoscomoclases,demaneraquesepuedahacerreferenciaaellasdeunaformasencilladesde

    cualquierpartedelcdigo.

    Enestapartesedefinenademslassentenciasdemapeoobjetorelacionalquedescribenla

    relacinentrelasclases,esdecirentreloselementosdelastablasdelabasededatos.

    Ademssedefinenlasrutinasdevalidacindedatosquepermitenconservarlaintegridad

    delosmismos,especificandoquereglassedebenseguirantesdeintroducirunvaloralabasede

    datos.

    Sedefinentambinalgunasfuncionesquerequierenlarevisinomanipulacindirectamente

    delosvaloresdelabasededatos,porejemplosisequiereencriptarlacontraseadelosusuariosse

    puededefiniraqulafuncinquerealicedichatarea.

    Entre las funciones que se puede definir esta tambin funciones para filtrar los datos

    ingresados mediante expresiones regulares que permitan eliminar caracteres indeseados en una

    entradadeunvaloralabasededatos.

    3.4Controlador.

    Elcontroladoreselencargadodemanejarloseventosqueserealizanenlaaplicacin,porlo

    27

  • generalprovocadosporunaaccindelusuario.

    Setienencontroladoresseparadosparacadatabladelabasededatos,pordefecto,aunquese

    puedencrearnuevoscontroladoresparaotrasacciones.

    Lasaccionesbsicasquemanejaelcontroladorsonlasdenuevo,crear,editar,actualizar,

    destruirylistarymostrar.

    Nuevo: Cuando se quiere crear un nuevo elemento esta accin se encarga de crear un

    elementoenblancoque luegoes actualizadocon los datosquese ingresanporel usuario. La

    necesidaddecrearunelementoenblancoesquedeestaformasepuedeasignarenlavistaun

    campodelavariableacadaelementodelaformaquedebellenarelusuario.

    Crear: La accin de crear se encarga de tomar los datos ingresados por el usuario y

    actualizarelelementoquepreviamentefuecreadoconlaaccinnuevo.

    Editar:Editarseencargadeasignarenlavistalosvaloresactualesdeelelementoaeditar

    deformaqueelusuariolomodifiqueaplacer.

    Actualizar: Tomalos elementos modificados por el usuario en la vista deeditar, y los

    actualizaenlabasededatos.

    Destruir:Destruyeeloloselementosseleccionados,eliminndolodelabasededatos.

    Listar:Haceunabsquedaymuestraunalistadeloselementosqueelusuariodeseaver.

    Mostrar:Muestraelcontenidodeunelementoespecficoqueelusuarioquierever.

    Enalgunoscasoshayaccionesquenosenecesitan,comoporejemploenelcasodelas

    sesiones, estassecreancuandounusuarioseconectaal sistema, sinembargonoesnecesario

    editarlasniactualizarlas,simplementeseeliminancuandoelusuariosedesconecta,porlotanto

    dichasaccionesnoestndefinidasparaestecaso.

    3.5Vista.

    La vista maneja la interfaz del sistemacon el usuario. Esta dividida tambin segnel

    28

  • elementoadesplegarylaaccinquesevaarealizar.Porejemploexisteunavistaparalistarlos

    activos,otraconlaformaparaqueelusuariocreeunnuevoactivoconlosdatosrequeridos,otra

    muysimilar a la anteriorconunaformaquedespliegalosdatosactualesdeel activoparaser

    modificadosporelusuario,ascomounavistaparamostrarlosdatosdeunactivoespecfico.

    Estasvistasseencargandecomunicarseconelcontroladorparatomarlosdatosqueestele

    pidealmodeloydesplegarlosenpantallaalusuario.

    LasvistasestnenlenguajeHTML,sinembargoposeencdigo Ruby integradomediante

    unasentenciaespecialquepermiteinsertarestoscdigos.

    Apartedeunavistaparacadaaccinarealizarexistaunaarchivodemscaraolayoutque

    manejaunainterfazalrededordelapantalladondesedesplieganlosdatos,esdecir,manejalabarra

    dettulodelaaplicacin,labarralateralyenfin,laestructurageneraldelainterfazconelusuario.

    RubyonRailscreaunlayoutpordefectoparacadaunadelastablas,sinembargo,ennuestra

    aplicacin se utiliz un nico layout para desplegar todas las vistas, el cual fue llamado

    aplicacin.html.rb.Ellayoututilizadonoposeeningunadescripcindeestilosyformatos,para

    estoseutilizaunarchivonombradoinventario.csselcualestaescritoenunlenguajedeHojade

    estilo en cascada (CSS), en el cual se especifican los tipos y tamaos de letra, el color y las

    tabulacionesdelosdiferenteselementosdelastablas.

    3.6Archivosdeconfiguracin.

    Losarchivosdelacarpetaconfigposeenlaconfiguracindelaaplicacin,dondesepuede

    definirconfiguracionesparalosdiferentesambientesdetrabajo,ascomolaconfiguracindela

    base de datos, las rutas por defecto para las vistas e informacin relacionadacon los plugins

    instaladosparalaaplicacin.

    Losarchivosdeconfiguracinmsimportantesson:

    database.yml:Enestearchivoseespecificalascaractersticasdelabasededatosautilizar.

    29

  • Elnombredelabasededatos,eladaptadorparamanejardichabasededatos,lacodificacin,el

    usuariodelabasededatosylacontraseasonloselementosdescritosenestearchivo,paracada

    unodelosambientesdetrabajo,yaseadesarrollo,produccinoprueba.

    environment.rb:Enestearchivoposeeinformacinrelacionadaconlasgemasinstaladasy

    quelaaplicacinvaautilizar.Lasgemassonbibliotecasde Ruby queseadministrandeforma

    sencillaconelcomandogemdesdelaterminal.

    routes.rb:Enestearchivoseespecificalasrutasporlascualessevaainvocarlasdiferentes

    vistasenelnavegador.Ademsseespecificalarutapordefectodelaaplicacin.

    3.7Otrascarpetas.

    Elsistemaestacompuestoporotrascarpetasquecontienentambininformacinimportante

    paraelfuncionamientodelaaplicacin.Acontinuacinseresumelafuncinycontenidodelas

    msrelevantes:

    db: Tieneinformacindelabasededatos.Enellaseguardaelcdigodelasdiferentes

    migracionesrealizadasparalabasededatos.Lasmigracionespermitenmodificarlasbasesdedatos

    sincomprometerlaintegridaddelosdatosexistentes.

    Ademsenelarchivoschema.rbsepresentaladescripcindelaestructuraactualdela

    basededatos,ascomolaversindelamigracinqueseestacorriendo.

    lib:Contieneinformacindebibliotecasinstaladaselelproyecto.Enlaaplicacinrealizada

    contienearchivosdeunodelospluginsinstalados,necesariosparasubuenfuncionamiento.

    log: Contieneunregistrodelasnotificacionesdesplegadasporelsistemadurantetodoel

    desarrollodelaaplicacin.Ascomoalgunasnotificacionesdealgunosdelos plugins utilizados

    quepermitenrevisarlasaccionesquesehanrealizado.

    public: Poseearchivos web quenocambiancomolasimgenes,lashojasdeestiloylos

    archivosenlenguajeJavaScript,ademsdealgunosarchivoenHTML.

    30

  • script: Estacarpetacontiene scripts parapodercorrervariasherramientasqueseutilizan

    con RubyonRails. Entre los scripts quesepuedenencontrar estn losutilizados paragenerar

    cdigoyelqueseutilizaparaarrancarelfuncionamientodelservidordedesarrollo.

    vendor: Este directorio contiene bibliotecas desarrolladas por terceros, es decir que no

    correspondenaladistribucinde RubyonRails.Porejemploaquseencuentranlasbibliotecas

    utilizadasporlospluginsinstaladosdentrodelacarpetadelproyecto.

    Index: Estacarpetaescreadaporel pluginActasferret.Enellaseguardanlosndices

    generadosporlasbsquedasquesehayanrealizadodemaneraquelasbsquedassubsiguientes

    puedanutilizarestainformacinparaagilizareltiempoderespuestadedichabsqueda.

    3.8Pluginsutilizados.

    Seutilizaron6 plugins paraeldesarrollodelaaplicacin.Tresdeellosseutilizaronpara

    podercrearllavesforneaspararealizarlasrelacionesentrelastablasyaumentarlaconfiabilidad

    delsistemaenelmanejodelosdatos.MuchasreferenciasindicabanqueenRubyonRailsnoera

    necesariocrearestasllavesforneas,yaquelaaplicacinseencargademanejarlarelacinentrelos

    datos.Sinembargo,lacreacindeestasllavespermiteunmanejomsseguroyconfiabledeestos

    datosyaprovocaqueelpropiosistemagestordebasededatoscompruebeestasrelaciones.

    Lostrespluginsutilizadosparaestepropsitofueron:

    redhillonrails_core:Esteplugincontienebibliotecasnecesariasparaelfuncionamientodelosotros

    dosplugins.

    foreign_key_migrations: Creallavesforneasenlabasededatosautomticamentealahorade

    realizar una migracin de la base de datos. Se pueden especificar de varias formas las llaves

    forneasdeseadasenelsistema.Alcrearunacolumnadelaformacosa_id,esteautomticamente

    creaunallaveforneausandoelidentificadordelatablacosas

    foreign_key_associations: Crea automticamente relaciones en el modelo basado en las llaves

    31

  • forneasexistentesenlabasededatos.

    Losotrostrespluginsutilizadosenfueron:

    Restful_authentication:Creaunaestructurabaseparalacreacindeunsistemadeautenticacinde

    usuarios.

    acts_as_ferret:Realizabsquedasenlabasededatosdelsistema.Permiteutilizarvariasfunciones

    parabsquedascondiferentesparmetros.

    will_paginate:Utilizadoparalapaginacindeloselementosdesplegadosenpantalla.Seconsider

    que al crecer la basede datos es mejor desplegarla deuna manera ms ordenadacomo lo es

    mediantepginas,especificandounnmerorazonabledeelementosporpginademaneraquesise

    deseacargarunatablaconmuchoselementoslapginacargueestosporseccionesaumentandola

    velocidaddenavegacindelapginaweb.

    32

  • CAPTULO4:Diseodelabasededatos.

    Comoseexplicanteriormente,labasededatosestadivididaendosseccionesprincipales.

    Elprimerconjuntodetablasseencargadealmacenarlainformacinobjetivodelsistema,esdecirla

    informacindelosactivosdeinventariojuntoconsusmarcas,modelosyestados.

    Laotrapartedelabasededatoseslaencargadadealmacenarlainformacindelosusuarios

    creadosenelsistemaqueesutilizadaporelsistemadeautenticacin.Aqusetieneunatablapara

    informacindelosusuarios,otraenlaquesealmacenanlosrolesexistentesyunaquecontienela

    informacinquedescribecualesrolesposeecadausuario.

    4.1Basededatosparaactivosdebodega.

    Paradisearestapartedelabasededatosseinvestigconelencargadodelabodegadela

    EscueladeIngenieraElctricadelaUniversidaddeCostaRica,cualeralainformacinimportante

    quedebaposeercadaunodelosactivosdebodegaycualesclasificacioneseraimportanterealizar

    conestos.

    Lainformacinquesedebealmacenarenlabasededatoseslasiguiente:

    Cuadro1.Activosenniveldenormalizacin0.

    Activos

    #Placa #Serie Modelo Descripcin Marca Estado

    Aplicandolaprimeraregladenormalizacindebasesdedatosseagregaunidentificadora

    latabla.Seconsiderlaopcindeutilizarelnmerodeplacacomoidentificador,sinembargola

    posibilidaddequeestenmerodeplacanoexistaoesterepetidoevitaquesepuedautilizarpara

    esto.Unavezincluidalacolumnadelidentificadorsetiene:

    Cuadro2.Activosenniveldenormalizacin1.

    Activos

    ActivoId #Placa #Serie Modelo Descripcin Marca Estado

    33

  • Elsegundoniveldenormalizacinindicaquesedebendecreartablasseparadasparalos

    gruposdedatosqueapliquenavariosregistros.Ennuestronoexisteningngrupodedatosqueeste

    aplicadovariasvecesaunregistroporlotantonoesnecesariorealizarningncambio.

    El tercer nivel de normalizacin indica que se deben de eliminar los campos que no

    dependen de la clave. Podemos notar como el modelo con su respectiva descripcin es

    independientedecadaactivoindividual,porlocualsepuedesepararenunanuevatabla.Deigual

    formaelestadodelequipoesindependientedelaclaveprimariadeelactivodemaneraquela

    estructuradetablasseconvierteenlasiguiente:

    Cuadro3.Activosenniveldenormalizacin2.

    Activos

    ActivoId #Placa #Serie Rel.Modelo_id Rel.Estado_id

    Cuadro4.Estadosenniveldenormalizacin2.

    Estados

    EstadoId Nombre_estado

    Cuadro5.Marcasenniveldenormalizacin2.

    Modelos

    Modelo_id Nombre_Modelo Descripcin Marca

    Peropodemosnotarcomoenestaltimatablalamarcapuedeaplicarsetambinavarios

    modelosporloqueestanodependedelallaveprimariadedichatablaporloquesecreaunatabla

    separadapara lasmarcasyserelacionan las tablasmedianteunallavefornea, de lasiguiente

    forma:

    Cuadro6.Modelosenniveldenormalizacin3.

    34

  • Modelos

    Modelo_id Nombre_Modelo Descripcin Rel.Marca_id

    Cuadro7.Marcasenniveldenormalizacin3.

    Marcas

    MarcaId Nombre_marca

    Figura2.DiagramaERsistemademanejodeactivos.

    Tenemosahoracuatrotablasseparadas.Elcuartoniveldenormalizacinsedicequesedebe

    aplicarensituacionesenlasquesedaunarelacindevariosconvarios.Ennuestrocasonoes

    necesarioestenivelporlotantoseconsideraqueeltercernivelessuficienteparaquesedeun

    manejofcilysegurodelosdatos.

    4.2Basededatosparamanejodeusuarios.

    Lasegundapartedelabasededatoseslaqueestarelacionadaconel manejodeusuariosdel

    sistema.Enestaparteseutilizunesquemasiguiendoalgunoslineamientosbrindadosporelplugin

    35

  • instalado para dicho propsito. Adems se decidi aadir algunos campos para informacin

    personaldelosusuarioscomolosonelnombre,eltelfono,nmerodecdulaycarnencasode

    existir.

    Elesquemaposee3tablas:Unatabladeusuariosconlainformacindeestos,unaderoles,

    conlosdatosdelosdiferentesrolescreadosyunatabladepermisosenlacualserelacionanlos

    usuarioscondiferentesrolesparadeestaformaasignarlospermisosalosusuariossegnelnivelde

    accesoalaaplicacindeseadoparacadaunodeellos.

    Labasededatosdeusuarioscontienelassiguientescolumnas:

    Id_usuario:Elidentificadordelatabla.

    Login:Elnombredelusuarioenelsistema.

    Email:Elcorreoelectrnico.

    crypted_password:Lacontraseaencriptada.

    Salt:Variableutilizadaparalaencriptacindelosdatos.

    remenber_token: Un identificador para ser recordado por el sistemaen un computador

    especfico.

    remember_token_expires_at:Eltiempodevencimientodelidentificador.

    Nombre:Elnombredelapersonaasignadaadichousuario.

    Apellido:Elapellidodelapersonaasignadaadichousuario.

    Telfono:Elnmerotelefnicodelusuario.

    Cdula:Lacduladeidentidaddelapersona.

    Carn:Encasodeserestudiantesealmacenalainformacindesucarn.

    Latabladerolesalmacenaelnombredelosrolesexistentesenelsistema,demaneraquesele

    puedaasignardichorolaunusuarioparabrindarlepermisosespecialesaeste.Latablaposeela

    36

  • siguienteinformacin:

    Cuadro8.Tabladeroles.

    Roles

    Role_Id Rolename

    Latabladepermisosalmacenalainformacindecualesusuariosestnrelacionadoscon

    ciertosroles,esdecir,lospermisosquecadausuarioposeeenelsistema:

    Cuadro9.Tabladepermisos.

    Permisos

    Permissions_Id role_Id User_Id

    Elarchivoschema.rbdelacarpetadbnosmuestrafinalmentelaestructuradelabasededatos

    consusllavesforneasrespectivas.

    ActiveRecord::Schema.define(:version=>20081126080143)do

    create_table"activos",:force=>truedo|t|t.string"num_serie"t.integer"placa"t.integer"modelo_id"t.integer"estado_id"t.datetime"created_at"t.datetime"updated_at"end

    create_table"estados",:force=>truedo|t|t.string"nombre"t.datetime"created_at"t.datetime"updated_at"end

    create_table"marcas",:force=>truedo|t|t.string"nombre_marca"t.datetime"created_at"t.datetime"updated_at"

    37

  • end

    create_table"modelos",:force=>truedo|t|t.string"nombre_modelo"t.string"descripcion"t.integer"marca_id"t.datetime"created_at"t.datetime"updated_at"end

    create_table"permissions",:force=>truedo|t|t.integer"role_id",:null=>falset.integer"user_id",:null=>falset.datetime"created_at"t.datetime"updated_at"end

    create_table"roles",:force=>truedo|t|t.string"rolename"t.datetime"created_at"t.datetime"updated_at"end

    create_table"users",:force=>truedo|t|t.string"login"t.string"email"t.string"crypted_password",:limit=>40t.string"salt",:limit=>40t.datetime"created_at"t.datetime"updated_at"t.string"remember_token"t.datetime"remember_token_expires_at"t.string"nombre"t.string"apellido"t.integer"telefono"t.string"carne"t.integer"cedula"end

    add_foreign_key"activos",["modelo_id"],"modelos",["id"],:name=>"activos_modelo_id_fkey"add_foreign_key"activos",["estado_id"],"estados",["id"],:name=>"activos_estado_id_fkey"

    add_foreign_key"modelos",["marca_id"],"marcas",["id"],:name=>"modelos_marca_id_fkey"

    add_foreign_key"permissions",["role_id"],"roles",["id"],:name=>"permissions_role_id_fkey"add_foreign_key"permissions",["user_id"],"users",["id"],:name=>"permissions_user_id_fkey"

    end

    Entre las cosas que se puede notar es que Ruby on Rails al crear una tabla, crea

    automticamenteenelladoscolumnascorrespondientesa la fechadecreacinya la fechade

    actualizacindelelemento,estevalorsealmacenaautomticamentealahoradecrearydeeditarun

    38

  • elementorespectivamente.Estopermitellevarunseguimientoporfechadelasmodificacionesenla

    basededatosypuedesermuytilenalgunoscasos.

    Parallegaralaestructuraanteriordelabasededatossedebieronrealizarvariasmigraciones

    de esta, ya que conforme avanz el desarrollo de la aplicacin, se encontraron nuevos

    requerimientosysenecesitorealizaralgunoscambios.

    De igual manera de necesitarse en el futuro agregar nuevos elementos o cambiar la

    estructuradelabasededatos,sepuederealizardemanerasencillamediantemigraciones.

    39

  • CAPTULO5:Modelo.

    Elmodeloeslaseccindelprogramaencargadadehacerelmanejodirectodelabasede

    datos.Enel sedefinenloselementosdeunatablacomoobjetosde Ruby yademssehacela

    validacin de los datos introducidos, para definir las reglas en el manejo de los datos que

    contribuyanacuidarlaintegridaddeestos.

    Existeunmodeloparacadaunadelastablaspresentesenlabasededatos.

    5.1Modelosdelsistemadeactivos.

    activos.rb:

    classActivo[:num_serie,:placa]

    defself.per_page 40 end

    validates_uniqueness_of :placavalidates_numericality_of:placa,:allow_nil=>truevalidates_presence_of:num_serie,:placa

    end

    Podemosvercomosedefinenlasrelacionesenentrelastablas.Enestecasoseespecifica

    quecadamodeloperteneceaunestadoyaunmodelo.

    Lasentenciaacts_as_ferretesutilizadaporelplugindelmismonombre.Medianteestase

    especificaquesevaautilizarelsistemadebsquedasenlascolumnasespecificadasluegoentre

    parntesis.

    Seconsiderquelasbsquedasdelosactivossedebanrealizarporsunmerodeserieopor

    suplaca.Deestamanerasepuedeencontrarunactivoespecficocuandosenecesite.

    Lasentenciadef_self.per_pagedefineelnmerodeelementosquesedebedesplegarpor

    pgina.Estenmeroeselparmetroqueutilizaelplugindepaginacinparasabercomoacomodar

    loselementosporpginayesmuysencillocambiarloparaajustarloalgustodelusuario.

    40

  • Sequierequeelvalordelaplacaseaunvalornico,yademsqueseasiempreunnmero,

    porloqueseindicaquesedebevalidarestedatoparacomprobarqueseaunnmero.

    Finalmenteseespecificaquetantoelnmerodeseriecomolaplacadebenestarpresentes,

    deotraformanosepermitecrearoeditarelactivo.

    estados.rb:

    classEstado[:nombre_marca]

    end

    Enelcasodelasmarcas,sedefinequeestastienenmuchosmodelos,ademscomocada

    modeloposeevariosactivos,seespecificaquecadamarcatienemuchosactivosatravsde los

    modelos.

    41

  • Denuevoseutilizael pluginparabsquedas,enestecasoserealizanbsquedasenla

    columnadenombredelamarca.

    5.2Modelosdelsistemadeautenticacindeusuarios.

    Comosemencionoanteriormentetenemosunatabladepermisosusuariosquealmacenala

    informacindetodoslosusuariosregistradosenelsistema.Ademsexisteunatabladerolesque

    poseeunaidentificacindelosrolesexistentesyunatabladepermisosqueposeelainformacinde

    cualesusuariosposeencualespermisos.Acadausuarioselepuedeasignarvariospermisos,es

    decirvariosroles.

    user.rb:

    attr_accessor:passwordacts_as_ferret:fields=>[:login,:email,:nombre,:apellido,:telefono,:carne,:cedula]validates_presence_of:login,:emailvalidates_presence_of:password,:if=>:password_required?validates_presence_of:password_confirmation,:if=>:password_required?validates_length_of:password,:within=>4..40,:if=>:password_required?validates_confirmation_of:password,:if=>:password_required?validates_length_of:login,:within=>3..40validates_length_of:email,:within=>3..100validates_uniqueness_of:login,:email,:case_sensitive=>falsevalidates_numericality_of:telefonovalidates_numericality_of:cedulahas_many:permissionshas_many:roles,:through=>:permissionsbefore_save:encrypt_password

    Lasanteriores sentencias definen la validacindedatos para los usuarios. Eneste caso

    tenemosqueseactivanlasbsquedasenelnombredelusuario,enelcorreoelectrnico,enel

    nombreyapellidodelapersona,eltelfono,carnycdula.

    Adems se define que tanto el nombre de usuario, comoel correo, la contrasea y su

    confirmacindebenestarpresentesalahoradecrearunusuario,deotraformasepresentaunerror.

    Elnombredeusuarioyelcorreoelectrnicodebentenerunlargodeterminadoparaser

    vlidos,porloqueseespecificaunlargomnimode3caracteresenamboscasosyunmximode

    40yde100paraelnombredeusuarioyelcorreorespectivamente.Estosdebensernicosadems.

    42

  • Lavalidacindedatosespecificaademsqueloscamposdenombredeusuarioycorreo

    debensernicos.

    Loscamposdetelfonoynmerodecduladebensersolonmeros,deestamaneraseevita

    queseingresencaracteresnodeseadosalatablaquepuedenalterareldatoquesequiere.

    En cuanto a las relaciones con otras tablas, se define que los usuarios tienen muchos

    permisos,yasuveztienenmuchosrolesatravsdelospermisos.

    Enestearchivoademsseespecificanvariasfuncionesquetienenqueverconelchequeode

    labasededatos.Entreestasfuncionesseencuentranlasqueseencargandeencriptarlosdatosde

    lascontraseas,lasqueseencarganderecordarunusuarioenunequipoyotrasfuncionesalas

    cualesnoselesdiounusoennuestraaplicacinyaquealgunasfuncionalidadescomolaactivacin

    porcorreonoerannecesariassegnlosrequerimientosdelaaplicacin.

    role.rb:

    classRole:permissionsend

    Elmodelodelosrolesdefinenicamentequeestosposeenvariospermisosyqueademsa

    travsdeestospermisosposeemuchosusuarios.

    permissions.rb:

    classPermission

  • puedetenervariosrolesyasuvezunrolpuedeestarasociadoavariosusuariosalmismotiempo.

    44

  • CAPTULO6:Controladores.

    Los controladores son las partes del cdigo encargadas de realizar las acciones que el

    usuarioordene.Estaspuedenirdesdedesplegarelementosenpantalla,hastahacermodificacionesa

    labasededatosagregando,quitandoomodificandoelementosenesta.

    Las acciones bsicas que Ruby on Rails define por defecto son: Nuevo, crear, editar,

    actualizar,destruir,mostrarylistar.

    SesabequeRubyonRailscreaestasaccionespordefectoalcrearlaestructuraparacada

    unadesustablas.Envarioscontroladoresdelaaplicacinestasaccionesnofueronmodificadas,

    porlotantosonidnticasenvarioscontroladores.Porlotantosevaacomentarestasunanicavez

    yademssevanaexplicarloscambiosrealizadosenelcasodehaberlos.

    6.1Controladoresdesistemadeactivos.

    Setienencomosemencionmuchoscdigosquesonsimilaresenloscontroladoresdeel

    sistemadeactivos.Debidoaestosemencionaprimeroloscdigosquesonsimilaresentodoslos

    casos,conelobjetivodeevitarlaexplicacinrepetidadecdigos.

    Lassiguientes lneasestnpresentesentodosloscontroladoresdeel sistemadeactivos

    comoloson:Activos,modelos,marcasyestados.

    includeAuthenticatedSystemlayout'application'before_filter:login_required,:only=>[:show,:index]before_filter:check_administrator_role,:only=>[:destroy,:new,:edit,:update]

    Aliniciodelarchivotenemoslassentenciasanteriores.Enellassedefinequesevaaincluir

    las libreras del sistema de autenticacin de usuarios, esto para utilizar seguidamente algunas

    funcionesparaaplicarlosfiltrosalasaccionesdelcontrolador.

    Sedefinequesevaautilizarellayoutapplication,elcualfuecreadocomounamscara

    genricaparatodosloscontroladores.Estoseexplicarmsadelanteenelcaptulodevistas.

    Sedefinen adems los filtros a la pgina. Mediante esto se puedegenerar permisos de

    45

  • ingresoalasdiferentesaccionesdelcontrolador.Enestecasoyeneldelosotroscontroladoresdel

    sistemadeactivos,siunusuarioseencuentraconectadoalsistema.Encasodequeestesed,el

    usuario tiene acceso a las funciones de mostrar y de listar. Sin embargo si adems de estar

    conectado,elusuarioposeeunpermisodeadministrador,selebrindaaccesoalasfuncionesque

    realizanmodificacionesdelabasededatos,comolosonlasdecrear,editarydestruirelementos.

    defindex @estados=Estado.find(:all)

    respond_todo|format| format.html#index.html.erb format.xml{render:xml=>@estados} endend

    Elmtododelistarmostradoanteriormentepermiteencontrartodosloselementospresentes

    enlatabla,mediantelafuncinfindquetienecomoparmetro:alllocualindicaquesedeben

    buscartodosloselementospresentes.

    LassiguienteslneassonfuncionesqueutilizaRubyparadeterminarsisedebedesplegarla

    pginaencdigoHTMLoenXML.Estodependedelasextensionesdelosarchivoscreadosenlas

    vistas.MedianteestoRubygeneraautomticamenteelcdigoparadesplegarloquesedesee,enel

    formatoquesedecida.

    [email protected]=Estado.find(params[:id])

    respond_todo|format|format.html#show.html.erbformat.xml{render:xml=>@estado}endend

    Elmtodode mostrar es muysimilar al anterior, con la diferenciaqueeneste casose

    selecciona nicamente unode los elementos de la tabla, especificandoen la funcinfind el

    identificadordeesteelemento,mediante:id.

    defnew

    46

  • @estado=Estado.new

    respond_todo|format|format.html#new.html.erbformat.xml{render:xml=>@estado}endend

    Elmtododenuevopermitecrearunelementovacoparadesplegarunaformadondeel

    usuario puedaasignar los valores deseados al elemento. Esto permite asignar una variable del

    elementoacadaunodeloscamposdelaformaparaluegopasarledichosparmetrosintroducidos

    porelusuarioalmtododecrearparaqueestecreeelelementoconestosparmetros.

    [email protected]=Estado.new(params[:estado])

    respond_todo|format|[email protected][:notice]='Elestadofuecreado.'format.html{redirect_to(@estado)}format.xml{render:xml=>@estado,:status=>:created,:location=>@estado}elseformat.html{render:action=>"new"}format.xml{render:xml=>@estado.errors,:status=>:unprocessable_entity}endendend

    Comosemencion anteriormenteestemtodopermitecrearunnuevoelemento(eneste

    caso un estado) con los parmetros introducidos por el usuario, que se indican a travs de la

    sentenciaparams[:estado].Ademssielusuarioescreadoseespecificaquesedebemostrarel

    elementocreadoenlasiguientepgina, ydesplegarunmensaje indicandoqueel elementofue

    creado.

    Encasodequenosehayapodidocrearelelementosedebevolveralapginanuevopara

    modificarlosparmetros.

    [email protected]=Estado.find(params[:id])

    47

  • end

    Elmtododeeditarsimplementebuscaunelementoconelnmerodeidentificacinelegido

    paraagregarestosvaloresalaformademaneraqueelusuariopuedamodificarestosvalorespara

    realizarloscambiosquequiera.

    [email protected]=Estado.find(params[:id])respond_todo|format|[email protected]_attributes(params[:estado])flash[:notice]='Elestadofueactualizado.'format.html{redirect_to(@estado)}format.xml{head:ok}elseformat.html{render:action=>"edit"}format.xml{render:xml=>@estado.errors,:status=>:unprocessable_entity}endendend

    Elmtododeactualizarbuscainicialmenteelelementoquesevaamodificarmedianteel

    identificadorindicadoparaluegohacerunllamadoalafuncinupdate_attributesqueactualiza

    los atributos de el elemento con los parmetros indicados entre parntesis que provienen del

    formulariodeedicinquesemodificanteriormente.

    Sedireccionaluegoamostrarelelementomodificadoencasodequedichamodificacinse

    hayarealizadosatisfactoriamente,ademssedespliegaunmensajeindicandoquedichoelemento

    fueactualizado.

    Encasodequenosepuedarealizarlaactualizacinsevuelvealapginadeeditarpara

    realizarloscambioscorrespondientes.

    [email protected]=Estado.find(params[:id])@estado.destroy

    respond_todo|format|format.html{redirect_to(estados_url)}format.xml{head:ok}endend

    48

  • Elmtododedestruirbuscaelelementoquesedeseaeliminaratravsdesuidentificadory

    llamaalmtododestroyqueseencargadeeliminarlodelabasededatos.Posteriormenteenvaa

    lapginandicedeloselementos.

    Enelcasodelosactivoselmtododelistarfuemodificadodemaneraquesiseindicaun

    estadoounmodeloespecficosedesplieguesolamentelosactivosqueposeeneseatributo.Para

    estofuenecesariopasarcomoparmetroaestemtodoyaseaelidentificadordeelmodeloodeel

    estadosegncorresponda.Encasodequeningunodelosdosexistasedespliegantodoslosactivos

    existentes.

    defindex

    ifparams[:q]query=params[:q]@activos=Activo.find_by_contents(query,:limit=>:all)

    elseif(params[:estado_id].nil?andparams[:modelo_id].nil?)

    @activos=Activo.paginate:page=>params[:page],:order=>'updated_atDESC'elseifparams[:modelo_id].nil?

    @activos=Activo.paginate:page=>params[:page],:conditions=>["estado_id=?",params[:estado_id]]else

    @activos=Activo.paginate:page=>params[:page],:conditions=>["modelo_id=?",params[:modelo_id]]

    endend

    endrespond_todo|format|format.html#index.html.erbformat.xml{render:xml=>@activos}endend

    Podemosnotarcomoseverificaprimerosiexistealgnparmetrodebsqueda,encasode

    queexistasellamaalafuncionfind_by_contentsqueproporcionael plugin acts_as_ferret,

    mediantelacualserealizalabsquedadeactivosrelacionadosaelparmetroindicado.

    Si no existe el parmetro anterior se revisa la existencia de algnotro parmetro, para

    determinar cuales activos se deben desplegar. Si existe algn parmetro se revisa si es un

    identificadordemodeloodeestadoyencadacasosesebuscaloselementosconesteidentificador.

    49

  • Enelcasodelcontroladordelosmodelosseutilizalamismalgicaparadeterminarsiexiste

    un parmetro de marca que haya sido enviado para desplegar nicamente los modelos

    pertenecientesadichamarcaencasodeexistirelparmetro.Ademsseverificalaexistenciadeun

    parmetrodebsquedatambin.

    ifparams[:q]

    query=params[:q]@modelos=Modelo.find_by_contents(query,:limit=>:all)

    elseifparams[:marca_id][email protected]=Modelo.find(:all)

    [email protected]=Modelo.find(:all,:conditions=>["marca_id=?",params[:marca_id]])

    end

    6.2Controladoresdesistemadeautenticacindeusuarios.

    Entreloscontroladoresdelsistemadeusuariostenemosuncontroladorquemanejatodolo

    correspondientealmanejodelosusuarios,esdecir,lacreacin,edicin,eliminacinydespliegue

    deestos.Ademsdeestosetieneuncontroladorpararealizarlaactualizacindelascontraseas,

    llamadoaccounts.

    Otrocontroladoreselqueseencargadelmanejodelosroles.Estepermitecrearrolesas

    comoasignarlosausuarios.

    Elltimocontroladoreselqueseencargadecrearydestruirlassesiones,estepermiteque

    unasesinsearecordadaenunequipoespecfico.

    users_controller.rb:

    layout'application'before_filter:login_required,:only=>[:show,:edit,:update]before_filter:check_administrator_role,:only=>[:index,:destroy,:new,:create]

    Aligualqueenlosotroscontroladoresdiscutidos,seespecificaquesevaautilizarellayout

    application. Seguidamentesedefinenlosfiltrospara losusuarios. Enestecasoaunusuario

    normalselepermitenicamentelasaccionesdemostrar,editaryactualizar,esosiestaslas

    50

  • podrrealizarsolosobresupropiousuario.

    Alusuarioadministradorselepermiteademscrear,eliminaryverusuarios.

    Elmtododelistaressencilloynicamenteseleagreglaverificacindeparmetrospara

    bsquedas.

    defindexifparams[:q]

    query=params[:q]@users=User.find_by_contents(query,:limit=>:all)

    [email protected]=User.find(:all)

    endend

    Losmtodosdemostrar,nuevo,editar,actualizarydestruirsonidnticosalos

    explicadosparaelsistemadeactivos,porloqueseevitarsudiscusin.

    sessions_controller.rb:

    Eneste controlador se maneja la creacin de sesiones de usuarios, es decir cuandoun

    usuarioconectaalsistemasecreaunasesin,lacualesdestruidaenelmomentoenqueesteusuario

    sedesconecta.

    layout'application'before_filter:login_required,:only=>:destroybefore_filter:not_logged_in_required,:only=>[:new,:create]

    Primero se define que se utilizar el layout application al igual que para todos los

    controladoresdelaaplicacin.

    Adems se aplican los filtros a los usuarios, demanera quesi unusuariose encuentra

    conectado,elsistemalepermitadestruirlasesin,esdecirdesconectarse.Deigualformasiun

    usuarionoestaconectadoselepermitecrearunasesin,esdecirconectarsealsistema.

    defcreatepassword_authentication(params[:login],params[:password])end

    Elmtododecrearllamaelmtodopassword_authenticationconlosparmetrosdeel

    51

  • nombredeusuarioylacontraseaquehayansidoingresadosporelusuario.

    defpassword_authentication(login,password)user=User.authenticate(login,password)ifuser==nilfailed_login("Sunombredeusuarioocontraseaesincorrecto.")elseself.current_user=usersuccessful_loginendend

    Elmtodopassword_authenticationasuvezllamaelmtodoauthenticatedelmodelo

    delosusuarios,queverificalaexistenciadeunusuarioconlosparmetrosintroducidos.Encasode

    existir se iguala el usuario actual current_user a dicho usuario y se llama al mtodo

    succesful_login. Encasodenoexistir se llamaalmtodofailed_loginintroduciendocomo

    parmetrounmensajedeerrorindicandoqueelnombredeusuarioolacontraseanosoncorrectos.

    deffailed_login(message)flash.now[:error]=messagerender:action=>'new'end

    Elmtodofailed_logindespliegaelmensajequesepascomoparmetroyenvadenuevo

    alapginadeingresoalsistema.

    defsuccessful_loginifparams[:remember_me]=="1"self.current_user.remember_me cookies[:auth_token] = { :value => self.current_user.remember_token , :expires =>self.current_user.remember_token_expires_at}endflash[:notice]="Sehaconectado!"return_to=session[:return_to]ifreturn_to.nil?redirect_touser_path(self.current_user)elseredirect_toreturn_toend

    El mtodo successful_login se encarga de revisar si el usuario marc la casilla de

    remember_meparaserrecordadoeneseequipo,silacasillafuemarcadaentoncessellamael

    mtodoremember_tokenyremember_token_expires_atqueseencargandeasignarunafecha

    enlaquesedebedejarderecordaralusuarioeneseequipo.Eltiempoconfigur