Sistema computarizado para el manejo de inventario de bodega.
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