Está en la página 1de 10

Modelo de Base de Datos en MySQL

Tenemos dos tipos de usuarios: Estudiantes Profesores Un Profesor puede: Crear, modificar o eliminar una teora. Crear, modificar o eliminar Proyectos. Crear, modificar o eliminar una Periodo Acadmico. Crear, modificar o eliminar Secciones. Consultar Alumnos. Otorgar Pri ilegios de Proyectos a los Estudiantes. Consultar !ecords. Crear, "odificar o Eliminar su Perfil. Un Estudiante puede: Crear, "odificar o Eliminar su perfil. Consultar la Teora. Consultar los Proyecto #a$o los %ue tenga permiso. Consultar Estadsticas &lo#ales. Consultar Estadsticas o record Personales. Este fue el primer enfo%ue, en el cual creamos las ta#las para er como %uedara mas o menos la 'ase de (atos.

*uego de tener el primer modelo, nos sentamos a er donde estamos redundando y cu+les son los posi#les caminos de consulta y sali, el segundo modelo de 'ase de (atos el cual est+ su$eto a m+s cam#ios en los pr,-imos das.

Los tipos CHAR y VARCHAR


*os tipos C/A! y 0A!C/A! son similares, pero difieren en c,mo se almacenan y recuperan. (esde "yS1* 2.3.4, tam#in difieren en la longitud m+-ima y en c,mo se tratan los espacios finales. *os tipos C/A! y 0A!C/A! se declaran con una longitud %ue indica el m+-imo n5mero de caracteres %ue %uiere almacenar. Por e$emplo, C/A!6437 puede almacenar 8asta 43 caracteres. *a longitud de una columna C/A! se fi$a a la longitud %ue se declara al crear la ta#la. *a longitud puede ser cual%uier alor de 3 a .22. Cuando los alores C/A! se almacenan, se a9aden espacios a la derec8a 8asta las longitud especfica. Cuando los alores C/A! se recuperan, estos espacios se #orran. En contraste con C/A!, 0A!C/A! almacena los alores usando s,lo los caracteres necesarios, m+s un #yte adicional para la longitud 6dos #ytes para columnas %ue se declaran con una longitud superior a .227. *os alores 0A!C/A! no se cortan al almacenarse. El tratamiento de espacios al final depende de la ersi,n. (esde "yS1* 2.3.4, los espacios finales se almacenan con el alor y se retornan, seg5n el est+ndar S1*. Antes de "yS1* 2.3.4, los espacios finales se eliminan de los alores cuando se almacenan en una columna 0A!C/A!, esto significa %ue los espacios tam#in est+n ausentes de los alores retornados. (urante el almacenamiento y la recuperaci,n de alores no 8ace ninguna con ersi,n de may5sculas y min5sculas. *a siguiente ta#la ilustra las diferencias entre los dos tipos de columnas mostrando el resultado de almacenar arios alores de cadenas de caracteres en columnas C/A!6:7 y 0A!C/A!6:7 : Valor
;; ;a#; ;a#cd; C/A!6:7 ; ;

Almacenamiento necesario : #ytes : #ytes : #ytes : #ytes

0A!C/A!6:7 ;; ;a#; ;a#cd; ;a#cd;

Almacenamiento necesario ) #yte 4 #ytes 2 #ytes 2 #ytes

;a# ; ;a#cd;

;a#cdefg8; ;a#cd;

*os alores retornados de las columnas C/A!6:7 y 0A!C/A!6:7 son los mismos en cada caso, ya %ue los espacios finales se eliminan en la recuperaci,n de alores C/A!. En "yS1* 2.3, los alores en columnas C/A! y 0A!C/A! se almacenan y comparan seg5n la colaci,n del con$unto de caracteres asignado a la columna.

Cmo validar campos de un formulario mediante Javascript


mplementos necesarios!
). Un editor <e# (recomendamos y utilizamos Adobe Dreamweaver). Si no poseen, pueden escri#ir el c,digo en alg5n editor de te-to como #loc= de notas. Con todo eso claro, amos, manos a la o#ra:

"rocedimiento!
).> *o primero %ue 8aremos ser+ crear un nue o arc8i o /T"*, en donde incluiremos un formulario y definiremos una funci,n en ?a ascript %ue se encargar+ de la alidaci,n. ..> En nuestro /T"*, creamos un formulario, el cual contendr+ 4 campos:

Un campo de te-to para ingresar el nom#re. Un campo de te-to para ingresar la edad. Una lista desplega#le indicando el moti o del contacto.

Adicionalmente a9adiremos un #ot,n para el en o de datos. El c,digo del formulario es el siguiente: @form nameABform)C actionABpagina>de>destino.8tmlBD @ta#leD @trD @tdDEom#re: @FtdD @tdD@input typeABte-tB nameABnom#reB siGeAB43C ma-lengt8AB)33CD@FtdD @FtrD @trD @tdDEdad: @FtdD @tdD@input typeABte-tB nameABedadB siGeAB4C ma-lengt8AB.CD@FtdD @FtrD @trD @tdD"oti o:@FtdD @tdD @select nameAmoti oD @option alueABSeleccionarBDSeleccionar @option alueAB&eneralBDContacto &eneral @option alueABTecnicoBDPro#lemas Tcnicos @option alueABSugerenciasBDSugerencias @FselectD @FtdD @FtrD @trD @td colspanAB.C alignABcenterBD@input typeAB#uttonB alueABEn iarB onclic=AB alidarHformulario67BD@FtdD @FtrD

@Fta#leD @FformD Como podemos apreciar, el c,digo es el est+ndar de un formulario como los %ue 8emos 8ec8o en otros tutoriales. Sin em#argo, en la eti%ueta /T"* correspondiente al #ot,n de en o 8emos agregado un nue o atri#uto llamado onclic#, el cual cumple la funci,n de %ue cuando se presione el #ot,n en eG de cargar una p+gina, llamar+ a una funci,n ?a ascript de nom#re validar$formulario%& 4.> A continuaci,n, a9adiremos la funci,n en ?a ascript %ue realiGar+ la alidaci,n. El c,digo es el siguiente, el cual de#emos insertarlo entre las eti%uetas @8eadD y @F8eadD. *os comentarios an en negrita, cursi a y entre FI y IF: @scriptD /* Abrimos etiqueta de cdigo */ function alidarHformulario67J /* Abrimos la funcin validar_formulario */ /* Partimos por validar que se haya ingresado un valor para el nombre, esto lo hacemos mediante un if y preguntamos si el campo es igual a 0, si es as, desplegamos un mensa e para que se ingrese el nombre y volvemos al formulario! */ if 6document.form).nom#re. alue.lengt8AA37J alert6K(e#e ingresar su nom#reB7 document.form).nom#re.focus67 return 3L M /* "uego validamos la edad, viendo si se ingresa una mayor a #$ a%os! Asignamos primero a una variable el valor ingresado y luego comprobando que no este vaco y que cumpla el requerimiento! &ambi'n llamaremos a una funcin validar(ntero que definiremos en el siguiente paso, d)ndole como par)metro la edad ingresada! (sta funcin reali*ar) las validaciones necesarias para definir si es un dato num'rico! */ edad A document.form).edad. alue edad A alidarEntero6edad7 document.form).edad. alueAedad if 6edadAABN7J alert6K(e#e ingresar su edad.B7 document.form).edad.focus67 return 3L MelseJ if 6edad@)O7J alert6K(e#e ser mayor de )OC7 document.form).edad.focus67 return 3L M M /* +inalmente, validamos el motivo del contacto */ if 6document.form).moti o.selectedPnde-AA37J alert6K(e#e seleccionar un moti o de su contacto.B7 document.form).interes.focus67 return 3L M

/* ,i paso todas las validaciones, desplegamos un mensa e de '-ito y enviamos el formulario */ alert6K*os datos fueron ingresados correctamente y seran en iadosB7L document.form).su#mit67L M @FscriptD :.> A continuaci,n de la funci,n anterior, crearemos otra funci,n %ue realiGar+ una con ersi,n del dato ingresado para la edad a entero y comprue#a si lo %ue se ingres, es realmente un alor numrico: function alidarEntero6 alor7J /* .ediante parse/nt intentaremos transformar el valor a n0mero entero! ,i el dato fue ingresado bien y ya lo era, no har) nada */ alor A parsePnt6 alor7 /* ,e comprobar) si el valor es un n0mero */ if 6isEaE6 alor77 J /* ,i no lo es, se devuelve una cadena vaca */ return KB MelseJ /* 1e lo contrario se devuelve el n0mero */ return alor M M

'ormulario con validacin de campos en (Query


@form nameANformularioN idANformularioN classANformularioN actionANN met8odANp ostND @ulD @liDEom#re @spanD6I7@FspanD@FliD @liDApellidos @spanD6I7@FspanD@FliD @liD@input nameANnom#reN idANnom#reN typeANte-tN FD@FliD @liD@input nameANapellidosN idANapellidosN typeANte-tN FD@FliD @liDTelfono @spanD6I7@FspanD@FliD @liDE>"ail @spanD6I7@FspanD@FliD @liD@input nameANtelefonoN idANtelefonoN typeANte-tN FD@FliD @liD@input nameANemailN idANemailN typeANte-tN FD@FliD @liD*ocalidad @spanD6I7@FspanD@FliD @liDPro incia @spanD6I7@FspanD@FliD @liD@input nameANlocalidadN idANlocalidadN typeANte-tN FD@FliD @liD @select nameANpro inciaN idANpro inciaN classANmailHpro inciaND ............................... @FselectD @FliD @liDR(esea apuntarse al #oletn de noticiasS @spanD6I7@FspanD@FliD @liDTn#spL@FliD @liD @input nameAN#oletinN idAN#oletinN typeANradioN alueANSiN FD Si @input nameAN#oletinN idAN#oletinN typeANradioN alueANEoN FD Eo @FliD @liDTn#spL@FliD @liDRCada cuanto nos isitasS @spanD6I7@FspanD@FliD @liDTn#spL@FliD @liD@input nameAN isitasN idAN isitasN typeANc8ec=#o-N alueANdiariamenteN FD (i ariamente@FliD @liDTn#spL@FliD @liD@input nameAN isitasN idAN isitasN typeANc8ec=#o-N alueANsemanalmenteN FD Semanalmente@FliD @liDTn#spL@FliD @liD@input nameAN isitasN idAN isitasN typeANc8ec=#o-N alueANmensualmenteN FD "ensualmente@FliD @liDTn#spL@FliD @li classAN#otonesND@input nameANsu#mitN idANsu#mitN typeANsu#mitN alueAN0ali darN FD@FliD @li classAN#otonesND@input nameANresetN idANresetN typeANresetN alueAN!esta#lece rN FD@FliD @FulD @FformD

Cdi)o (Query para validar los campos!


V6document7.ready6function67J V6NWformularioN7.su#mit6function 67 J if6V6NWnom#reN7. al67.lengt8 @ :7 J alert6NEl nom#re de#e tener m+s de 4 caracteresN7L return falseL M if6V6NWapellidosN7. al67.lengt8 @ :7 J alert6N*os apellidos de#en tener m+s de 4 caracteresN7L return falseL M if6V6NWtelefonoN7. al67.lengt8 @ : XX isEaE6V6NWtelefonoN7. al6777 J alert6NEl telfono de#e tener m+s de 4 caracteres y solo n5merosN7L return falseL M if6V6NWemailN7. al67.lengt8 @ )7 J alert6N*a direcci,n e>mail es o#ligatoriaN7L return falseL M if6V6NWemailN7. al67.inde-Of6;Y;, 37 AA >) XX V6NWemailN7. al67.inde-Of6;.;, 37 AA >)7 J alert6N*a direcci,n parece incorrectaN7L return falseL M if6V6NWlocalidadN7. al67.lengt8 @ )7 J alert6N*a localidad es o#ligatoriaN7L return falseL M if6V6NWpro incia option:selectedN7. al67 AA NN7 J alert6N*a pro incia es o#ligatoriaN7L return falseL M if6V6NWlocalidadN7. al67.lengt8 @ )7 J alert6N*a localidad es o#ligatoriaN7L return falseL M if6V6NW#oletinN7.is6;:c8ec=ed;77 J M else J alert6NPndi%ue si desea apuntarse al #oletn de noticiasN7L return falseL M if6V6NW isitasN7.is6;:c8ec=ed;77 J M else J alert6NPndi%ue cada cuanto nos isitasN7L return falseL M return falseL M7L M7L

Validar formularios *ue usan A(a+


@form actionANN met8odANpostN nameANf)N onsu#mitANZA$a-6;principal.p8p;,;contenido.;,;nom#reA;[document.getElement'yPd6;nom#re;7. alue[;Ta pellidoA;[document.getElement'yPd6;apellido;7. alue[;TtelefonoA;[document.getElement'yPd6;telefono; 7. alue[;Ten iadoA;[document.getElement'yPd6;en iado;7. alue,;post;7L return falseND Eom#re de Usuario @input typeAte-t nameAnom#re idAnom#re alueAD@#rD Apellido de Usuario @input typeAte-t nameAapellido idAapellido alueAD@#rD Telefono de Usuario @input typeAte-t nameAtelefono idAtelefono alueAD@#rD Prue#a select @select nameASelectD @option alueA) Deric=@FoptionD @option alueA. DPepe@FoptionD @option alueA4 DTa=as8i@FoptionD @FselectD@#rD Prue#a. @select nameASelect.D @option alueA) D8ernandeG@FoptionD @option alueA. DTrueno@FoptionD @option alueA4 DOnimaru@FoptionD @FselectD@#rD @input typeAsu#mit nameAen iar idAen iar alueAEn iarD@#rD

@script languageAN?a aScriptN typeANte-tF$a ascriptND FFFFFFO#$eto a$afunction nue oA$a-67J ar -ml8ttp A falseL try J -ml8ttp A ne\ Acti e]O#$ect6N"s-ml..]"*/TTPN7L M catc8 6e7 J try J -ml8ttp A ne\ Acti e]O#$ect6N"icrosoft.]"*/TTPN7L M catc8 6E7 J -ml8ttp A falseL MM if 6^-ml8ttp TT typeof ]"*/ttp!e%uest^A;undefined;7 J -ml8ttp A ne\ ]"*/ttp!e%uest67L M return -ml8ttpL M FFFFFFFFFFF function AddEe\User67JFFFFFFFFFfuncion %ue alida los campos y ademas en ia por POST los alores form A document.addHne\Huser FFFnom#re del formularoi form.nom#re.classEame A Nte-tHareaNL FFcampo te-t#oform.mail.classEame A Nte-tHareaNL FFcampo te-t#oform.pass).classEame A Nte-tHareaNL FFcampo te-t#oif 6form.nom#re. alue AA ;; XX form.nom#re. alue.lengt8 @A :7J di Hmsg.inner/T"* A ;Pngrese un nom#re TaacuteLlido.;L _

form.nom#re.classEame A Ninput#o-NL form.nom#re.focus67L return 6false7L M if 6form.mail. alue AA ;; XX form.mail. alue.lengt8 @A : XX ^form.mail. alue.matc86NYN7 XX ^form.mail. alue.matc86N.N77J di Hmsg.inner/T"* A ;Pngrese un E>mail TaacuteLlido.;L form.mail.classEame A Ninput#o-NL form.mail.focus67L return 6false7L M if 6form.pass). alue AA ;; XX form.pass). alue.lengt8 @ Q7J di Hmsg.inner/T"* A ;Su contraseTntildeLa de#e ser de Q caracteres o mTaacuteLs.;L form.pass).classEame A Ninput#o-NL form.pass..classEame A Ninput#o-NL form.pass).focus67L return 6false7L M c) A document.getElement'yPd6;loading);7L FFFeste es un di donde cargo una imagen gif de NcargandoN c4 A document.getElement'yPd6;contenedor;7L FFFFeste es la capa di donde se mostrara el resultado del p8p %ue procesa los datos %ue en iamos por POST a$a- A nue oA$a-67L c).inner/T"* A ;@img srcANimagesFloading.gifNFD;L FFFunicacion del gif loader a$a-.open6NPOSTN, NaddHne\Huser.p8pSnocac8eAN[ne\ (ate67.getTime67,true7L FFeste arc8i o recoge los datos del formulario y los procesa 6le pongo una aria#le nocac8e igual a un numero al aGar para e itar almacenamiento en cac8e del na egador7 a$a-.onreadystatec8ange A function67 J if 6a$a-.readyState AA:7 J c4.inner/T"* A a$a-.responseTe-tL FF luego %ue se en ian los datos por POST se completa el di con los resultados %ue arro$e el arc8i o addHne\Huser.p8pM M datos A Nnom#reAN[form.nom#re. alue[NTmailAN[form.mail. alue[NTpassAN[form.pass). al ueL FFFse esta#leces las aria#les para en iarlas al P/P a$a-.set!e%uest/eader6NContent>TypeN,NapplicationF->\\\>form>urlencodedN7L a$a-.set!e%uest/eader6NAccept>C8arsetN, Niso>OO2_>)N7L a$a-.send6datos7L M @FscriptD

)3