You are on page 1of 13

TUTORIAL DE SQL

Qu es SQL?
Las aplicaciones en red son cada da ms numerosas y verstiles. En muchos casos, el
esquema bsico de operacin es una serie de scripts que rigen el comportamiento de
una base de datos.
Debido a la diversidad de lenguajes y de bases de datos existentes, la manera de
comunicar entre unos y otras sera realmente complicada a gestionar de no ser por la
existencia de estndares que nos permiten el realiar las operaciones bsicas de una
!orma universal.
Es de eso de lo que trata el "tructured #uery Language que no es mas que un
lenguaje estndar de comunicacin con bases de datos. $ablamos por tanto de un
lenguaje normaliado que nos permite trabajar con cualquier tipo de lenguaje %&"' o
'$'( en combinacin con cualquier tipo de base de datos %)" &ccess, "#L "erver,
)y"#L...(.
El hecho de que sea estndar no quiere decir que sea id*ntico para cada base de
datos. En e!ecto, determinadas bases de datos implementan !unciones espec!icas que
no tienen necesariamente que !uncionar en otras.
&parte de esta universalidad, el "#L posee otras dos caractersticas muy apreciadas.
'or una parte, presenta una potencia y versatilidad notables que contrasta, por otra,
con su accesibilidad de aprendiaje.
El manual de "#L de desarrollo+eb pretende dar a conocer las operaciones bsicas
que se pueden realiar con "#L y que tienen una aplicacin directa con la creacin de
aplicaciones en red sin pro!undiar ms de lo estrictamente necesario. ,uscamos con
ello o!recer al +ebmaster un manual de re!erencia prctico y aplicado.
TIPOS DE CAMPOS
-omo sabemos una base de datos esta compuesta de tablas donde almacenamos
registros catalogados en !uncin de distintos campos %caractersticas(.
.n aspecto previo a considerar es la naturalea de los valores que introducimos en
esos campos. Dado que una base de datos trabaja con todo tipo de in!ormaciones, es
importante especi!icarle qu* tipo de valor le estamos introduciendo de manera a, por
un lado, !acilitar la b/squeda posteriormente y por otro, optimiar los recursos de
memoria.
-ada base de datos introduce tipos de valores de campo que no necesariamente estn
presentes en otras. "in embargo, existe un conjunto de tipos que estn representados
en la totalidad de estas bases. Estos tipos comunes son los siguientes0
Alfanumricos
-ontienen ci!ras y letras. 'resentan una longitud limitada %122
caracteres(
Numricos
Existen de varios tipos, principalmente, enteros %sin decimales(
y reales %con decimales(.
Booleanos 'oseen dos !ormas0 3erdadero y !also %" o 4o(
Fechas
&lmacenan !echas !acilitando posteriormente su explotacin.
&lmacenar !echas de esta !orma posibilita ordenar los registros
por !echas o calcular los das entre una !echa y otra...
Memos
"on campos al!anum*ricos de longitud ilimitada. 'resentan el
inconveniente de no poder ser indexados %veremos ms
adelante lo que esto quiere decir(.
Autoincrementables
"on campos num*ricos enteros que incrementan en una unidad
su valor para cada registro incorporado. "u utilidad resulta ms
que evidente0 "ervir de identi!icador ya que resultan exclusivos
de un registro.
AADIR UN NUEVO REGISTRO
Los registros pueden ser introducidos a partir de sentencias que emplean la instruccin
5nsert.
La sintaxis utiliada es la siguiente0
5nsert 5nto nombre6tabla %nombre6campo7, nombre6campo1,...( 3alues
%valor6campo7, valor6campo1...(
.n ejemplo sencillo a partir de nuestra tabla modelo es la introduccin de un nuevo
cliente lo cual se hara con una instruccin de este tipo0
5nsert 5nto clientes %nombre, apellidos, direccion, poblacion, codigopostal, email,
pedidos( 3alues %8'erico8, 8'alotes8, 8'ercebe n97:8, 8Lepe8, 871:;2<8,
8perico=desarrollo+eb.com8, ::(
-omo puede verse, los campos no num*ricos o booleanos van delimitados por
apostro!es0 8. >ambi*n resulta interesante ver que el cdigo postal lo hemos guardado
como un campo no num*rico. Esto es debido a que en determinados paises
%5nglaterra,como no( los codigos postales contienen tambi*n letras.
'or supuesto, no es imprescindible rellenar todos los campos del registro. Eso s,
puede ser que determinados campos sean necesarios. Estos campos necesarios
pueden ser de!inidos cuando construimos nuestra tabla mediante la base de datos.
?esulta muy interesante, ya veremos ms adelante el por qu*, el introducir durante la
creacin de nuestra tabla un campo autoincrementable que nos permita asignar un
/nico n/mero a cada uno de los registros. De este modo, nuestra tabla clientes
presentara para cada registro un n/mero exclusivo del cliente el cual nos ser muy util
cuando consultemos varias tablas simultneamente.
BORRAR N RE!ISTRO
'ara borrar un registro nos servimos de la instruccin Delete. En este caso debemos
especi!icar cual o cuales son los registros que queremos borrar. Es por ello necesario
establecer una seleccin que se llevara a cabo mediante la clusula @here.
La !orma de seleccionar se ver detalladamente en captulos posteriores. 'or ahora nos
contentaremos de mostrar cul es el tipo de sintaxis utiliado para e!ectuar estas
supresiones0
Delete Arom nombre6tabla @here condiciones6de6seleccin
"i queremos por ejemplo borrar todos los registros de los clientes que se llamen 'erico
lo haramos del siguiente modo0
Delete Arom clientes @here nombreB8'erico8
$ay que tener cuidado con esta instruccin ya que si no especi!icamos una condicin
con @here, lo que estamos haciendo es borrar to"a la tabla0
Delete From clientes
ACTA#I$AR N RE!ISTRO
.pdate es la instruccin que nos sirve para modi!icar nuestros registros. -omo para el
caso de Delete, necesitamos especi!icar por medio de @here cules son los registros
en los que queremos hacer e!ectivas nuestras modi!icaciones. &dems, obviamente,
tendremos que especi!icar cules son los nuevos valores de los campos que deseamos
actualiar. La sintaxis es de este tipo0
.pdate nombre6tabla "et nombre6campo7 B valor6campo7, nombre6campo1 B
valor6campo1,... @here condiciones6de6seleccin
.n ejemplo aplicado0
.pdate clientes "et nombreB8Cos*8 @here nombreB8'epe8
)ediante esta sentencia cambiamos el nombre 'epe por el de Cos* en todos los
registros cuyo nombre sea 'epe.
&qu tambi*n hay que ser cuidadoso de no olvidarse de usar @here, de lo contrario,
modi!icaramos todos los registros de nuestra tabla.
SE#ECCI%N DE TAB#AS I
La seleccin total o parcial de una tabla se lleva a cabo mediante la instruccin "elect.
En dicha seleccin hay que especi!icar0
DLos campos que queremos seleccionar
DLa tabla en la que hacemos la seleccin
En nuestra tabla modelo de clientes podramos hacer por ejemplo una seleccin del
nombre y direccin de los clientes con una instruccin de este tipo0
"elect nombre, direccin Arom clientes
"i quisi*semos seleccionar todos los campos, es decir, to"a la tabla, podramos
utiliar el comodn E del siguiente modo0
Select & From clientes
?esulta tambi*n muy /til el !iltrar los registros mediante condiciones que vienen
expresadas despu*s de la cl'usula (here. "i quisi*semos mostrar los clientes de una
determinada ciudad usaramos una expresin como esta0
"elect E Arom clientes @here poblacion LiFe 8)adrid8
&dems, podramos or"enar los resulta"os en !uncin de uno o varios de sus
campos. 'ara este ultimo ejemplo los podramos ordenar por nombre as0
"elect E Arom clientes @here poblacion LiFe 8)adrid8 Or"er ,y nombre
>eniendo en cuenta que puede haber ms de un cliente con el mismo nombre,
podramos dar un segundo criterio que podra ser el apellido0
"elect E Arom clientes @here poblacion LiFe 8)adrid8 Grder ,y nombre, apellido
"i invirti*semos el orden H nombre,apellido I por H apellido, nombre I, el resultado
sera distinto. >endramos los clientes ordenados por apellido y aquellos que tuviesen
apellidos id*nticos se subclasi!icaran por el nombre.
Es posible tambi*n clasificar )or or"en in*erso. "i por ejemplo quisi*semos ver
nuestros clientes por orden de pedidos realiados teniendo a los mayores en primer
lugar escribiramos algo as0
"elect E Arom clientes Grder ,y pedidos Desc
.na opcin interesante es la de e!ectuar selecciones sin coinci"encia. "i por
ejemplo buscsemos el saber en qu* ciudades se encuentran nuestros clientes sin
necesidad de que para ello apareca varias veces la misma ciudad usaramos una
sentencia de esta clase0
"elect Distinct poblacion Arom clientes Grder ,y poblacion
&s evitaramos ver repetido )adrid tantas veces como clientes tengamos en esa
poblacin.
SE#ECCI%N DE TAB#AS II
$emos querido compilar a modo de tabla ciertos operadores que pueden resultar /tiles
en determinados casos. Estos operadores sern utiliados despu*s de la clusula
@here y pueden ser combina"os h'bilmente me"iante )arntesis para optimiar
nuestra seleccin a muy altos niveles.

O)era"ores matem'ticos+
J )ayor que
K )enor que
JB )ayor o igual que
KB )enor o igual que
KJ Distinto
B 5gual
O)era"ores l,-icos
&nd
Gr
4ot
Otros o)era"ores
LiFe
"elecciona los registros cuyo valor de campo se asemeje, no
teniendo en cuenta may/sculas y min/sculas.
5n y 4ot 5n
Da un conjunto de valores para un campo para los cuales la
condicin de seleccin es %o no( valida
5s 4ull y 5s 4ot
4ull
"elecciona aquellos registros donde el campo especi!icado esta %o no(
vaco.
,et+een...&nd "elecciona los registros comprendidos en un intervalo
Distinct "elecciona los registros no coincidentes
Desc -lasi!ica los registros por orden inverso
Como"ines
E "ustituye a todos los campos
L "ustituye a cualquier cosa o nada dentro de una cadena
6 "ustituye un solo carcter dentro de una cadena
3eamos a continuacin aplicaciones practicas de estos operadores.
En esta sentencia seleccionamos todos los clientes de )adrid cuyo nombre no es 'epe.
-omo puede verse, empleamos #i.e en lugar de / simplemente para evitar
inconvenientes debido al empleo o no de may/sculas.
"elect E Arom clientes @here poblacion #i.e 8madrid8 An" Not nombre #i.e 8'epe8
"i quisi*ramos recoger en una seleccin a los clientes de nuestra tabla cuyo a)elli"o
comien0a )or A 1 cu1o n2mero "e )e"i"os esta com)ren"i"o entre 34 1 540
"elect E Arom clientes @here apellidos li.e 6A76 &nd pedidos Bet8een 34 An" 54
El operador In, lo veremos ms adelante, es muy prctico para consultas en varias
tablas. 'ara casos en una sola tabla es empleado del siguiente modo0
"elect E Arom clientes @here poblacion In 96Ma"ri"6:6Barcelona6:6;alencia6<
De esta !orma seleccionamos a=uellos clientes =ue *i*an en esas tres ciu"a"es.
SE##ECCI%N DE TAB#AS III
.na base de datos puede ser considerada como un conjunto de tablas. Estas tablas en
muchos casos estn relacionadas entre ellas y se complementan unas con otras.
?e!iri*ndonos a nuestro clsico ejemplo de una base de datos para una aplicacin de eD
comercio, la tabla clientes de la que hemos estado hablando puede estar
per!ectamente coordinada con una tabla donde almacenamos los pedidos realiados
por cada cliente. Esta tabla de pedidos puede a su ve estar conectada con una tabla
donde almacenamos los datos correspondientes a cada artculo del inventario.
De este modo podramos !cilmente obtener in!ormaciones contenidas en esas tres
tablas como puede ser la designacin del artculo ms popular en una determinada
regin donde la designacin del artculo sera obtenida de la tabla de artculos, la
popularidad %cantidad de veces que ese artculo ha sido vendido( vendra de la tabla de
pedidos y la regin estara comprendida obviamente en la tabla clientes.
Este tipo de organiacin basada en m/ltiples tablas conectadas nos permite trabajar
con tablas mucho ms manejables a la ve que nos evita copiar el mismo campo en
varios sitios ya que podemos acceder a *l a partir de una simple llamada a la tabla que
lo contiene.
En este captulo veremos como, sirvi*ndonos de lo aprendido hasta ahora, podemos
realiar !cilmente selecciones sobre varias tablas. De!inamos antes de nada las
di!erentes tablas y campos que vamos a utiliar en nuestros ejemplos0
Tabla "e clientes
Nombre cam)o Ti)o cam)o
id6cliente 4um*rico entero
nombre >exto
apellidos >exto
direccion >exto
poblacion >exto
codigopostal >exto
tele!ono 4um*rico entero
email >exto
Tabla "e )e"i"os
Nombre cam)o Ti)o cam)o
id6pedido 4um*rico entero
id6cliente 4um*rico entero
id6articulo 4um*rico entero
!echa Aecha
cantidad 4um*rico entero
Tabla "e art>culos
Nombre cam)o Ti)o cam)o
id6articulo 4um*rico entero
titulo &l!anum*rico
autor &l!anum*rico
editorial &l!anum*rico
precio 4um*rico real
Estas tablas pueden ser utiliadas simultneamente para extraer in!ormaciones de todo
tipo. "upongamos que queremos enviar un mailing a todos aquellos que hayan
realiado un pedido ese mismo da. 'odramos escribir algo as0
Select clientes?a)elli"os: clientes?email From clientes:)e"i"os (here
)e"i"os?fecha li.e 63@A43A446 An" )e"i"os?i"Bcliente/ clientes?i"Bcliente
-omo puede verse esta ve, despu*s de la clusula Arom, introducimos el nombre de
las dos tablas de donde sacamos las in!ormaciones. &dems, el nombre de cada campo
va precedido de la tabla de provenencia separados ambos por un punto. En los campos
que poseen un nombre que solo aparece en una de las tablas, no es necesario
especi!icar su origen aunque a la hora de leer la sentencia puede resultar ms claro el
precisarlo. En este caso el campo !echa podra haber sido designado como M!echaM en
lugar de Mpedidos.!echaM.
3eamos otro ejemplo ms para consolidar estos nuevos conceptos. Esta ve queremos
ver el ttulo del libro correspondiente a cada uno de los pedidos realiados0
Select )e"i"os?i"B)e"i"o: articulos?titulo From )e"i"os: articulos (here
)e"i"os?i"Barticulo/articulos?i"Barticulo
En realidad la !iloso!a continua siendo la misma que para la consulta de una /nica
tabla.
SE#ECCI%N DE TAB#AS I;
&dems de los criterios hasta ahora explicados para realiar las consultas en tablas,
"#L permite tambi*n aplicar un conjunto de !unciones prede!inidas. Estas !unciones,
aunque bsicas, pueden ayudarnos en algunos momentos a expresar nuestra seleccin
de una manera ms simple sin tener que recurrir a operaciones adicionales por parte
del script que estemos ejecutando.
&lgunas de estas !unciones son representadas en la tabla siguiente 0
Funci,n Descri)ci,n
"um%campo( -alcula la suma de los registros del campo especi!icado
&vg%-ampo( -alcula la media de los registros del campo especi!icado
-ount%E(
4os proporciona el valor del numero de registros que han sido
seleccionados
)ax%-ampo( 4os indica cual es el valor mximo del campo
)in%-ampo( 4os indica cual es el valor mnimo del campo
Dado que el campo de la !uncin no existe en la base de datos, sino que lo estamos
generando virtualmente, esto puede crear inconvenientes cuando estamos trabajando
con nuestros scripts a la hora de tratar su valor y su nombre de campo. Es por ello que
el valor de la funci,n ha "e ser recu)era"a a )artir "e un alias que nosotros
especi!icaremos en la sentencia "#L a partir de la instruccin AS. La cosa podra
quedar as0
Select Sum9total< As sumaB)e"i"os From )e"i"os
& partir de esta sentencia calculamos la suma de los valores de todos los pedidos
realiados y almacenamos ese valor en un campo virtual llamado suma6pedidos que
podr ser utiliado como cualquier otro campo por nuestras paginas dinmicas.
'or supuesto, todo lo visto hasta ahora puede ser aplicado en este tipo de !unciones de
modo que, por ejemplo, podemos establecer condiciones con la clusula @here
construyendo sentencias como esta0
Select Sum9canti"a"< as sumaBarticulos From )e"i"os (here i"Barticulo/C
Esto nos proporcionara la cantidad de eDem)lares "e un "etermina"o libro =ue
han si"o *en"i"os.
Gtra propiedad interesante de estas !unciones es que )ermiten reali0ar o)eraciones
con *arios cam)os "entro "e un mismo )arntesis0
Select A*-9totalAcanti"a"< From )e"i"os
Esta sentencia da como resultado el )recio me"io al =ue se est'n *en"ien"o los
libros. Este resultado no tiene por qu* coincidir con el del )recio me"io "e los libros
)resentes en el in*entario, ya que, puede ser que la gente tenga tendencia a
comprar los libros caros o los baratos0
Select A*-9)recio< as )recioB*enta From articulos
.na clusula interesante en el uso de !unciones es Nroup ,y. Esta clusula nos permite
agrupar registros a los cuales vamos a aplicar la !uncin. 'odemos por ejemplo calcular
el "inero -asta"o )or ca"a cliente0
Select i"Bcliente: Sum9total< as sumaB)e"i"os From )e"i"os !rou) B1
i"Bcliente
G saber el numero "e )e"i"os =ue han reali0a"o0
Select i"Bcliente: Count9&< as numeroB)e"i"os From )e"i"os !rou) B1
i"Bcliente
Las posibilidades como vemos son numerosas y pueden resultar prcticas. >odo queda
ahora a disposicin de nuestras ocurrencias e imaginacin.
OPTIMI$AR PRESTACIONES I
Las bases de datos %,D( cuanto ms extensas requieren una mayor atencin a la hora
de organiar sus contenidos. -uando se trabaja con tablas de miles o decenas de miles
de registros la b/squeda de un determinado dato puede resultar un proceso largo que
ralentia enormemente la creacin de nuestra pgina.
Es por ello importante tener en cuenta una serie de aspectos indispensables para el
mejor !uncionanmiento de la base.
!esti,n 1 elecci,n "e los >n"ices
Los ndices son campos elegidos arbitrariamente por el constructor de la ,D que
permiten la b/squeda a partir de dicho campo a una velocidad notablemente superior.
"in embargo, esta ventaja se ve contrarrestada por el hecho de ocupar mucha ms
memoria %el doble ms o menos( y de requerir para su insercin y actualiacin un
tiempo de proceso superior.
Evidentemente, no )o"emos in"eEar to"os los cam)os de una tabla extensa ya
que doblamos el tamaOo de la ,D. 5gualmente, tampoco sirve de mucho el indexar
todos los campos en una tabla pequeOa ya que las selecciones pueden e!ectuarse
rpidamente de todos modos.
.n caso en el que los ndices pueden resultar muy /tiles es cuando realiamos
peticiones simultneas sobre varias tablas. En este caso, el proceso de seleccin puede
acelerarse sensiblemente si in"eEamos los cam)os =ue sir*en "e neEo entre las
"os tablas. En el ejemplo de nuestra librera virtual estos campos seran id6cliente e
id6articulo.
Los ndices pueden resultar contraproducentes si los introducimos sobre campos
triviales a partir de los cuales no se realia ning/n tipo de peticin ya que, adems del
problema de memoria ya mencionado, estamos ralentiando otras tareas de la base de
datos como son la edicin, insercin y borrado. Es por ello que vale la pena pensarselo
dos veces antes de indexar un campo que no sirve de criterio para b/squedas de los
internautas y que es usado con muy poca !recuencia por raones de mantenimiento.
!esti,n "e los neEos entre tablas
El enlace entre tablas es uno de los puntos ms peliagudos y que puede llevar a la
absoluta ralentiacin de la base de datos a causa MpequeOosM detalles que resultan ser
!atales.
5maginemos que trabajamos con una pequeOa ,D constituida por dos tablas de 7PPP
registros cada una. 5maginemos ahora una seleccin simultnea en la que imponemos
la condicin de que el valor un campo de la primera sea igual a de una segunda, algo
que se realia con mucha !recuencia. En este tipo de casos, la ,D leer y comparar
cada valor de campo de una con cada valor de campo de la otra. Esto representara un
milln de lecturas. Este hecho podra agravarse si consultamos una tercera tabla al
mismo tiempo y podra llegar a ser catastr!ico si tenemos en cuenta que la ,D esta
siendo consultada por varios internautas al mismo tiempo.
'ara evitar situaciones de colapso, es necesario in"eEar ca"a uno "e los cam)os
=ue sir*en "e enlace entre esas tablas. En el ejemplo de nuestra librera virtual, ya
lo hemos dicho, estos campos seran id6cliente e id6articulo. &dems, resulta tambi*n
de vital importancia el "efinir esos cam)os "e una forma estrictamente i"ntica
en ca"a una "e las tablas, es decir, el campo ha de ser de la misma naturalea y
caractersticas. 4o vale de!inirlo como real en una tabla y entero en otra o cambiar la
longitud mxima para los al!anum*ricos o que en una tabla sea de longitud constante y
en otra variable...
El gestionar inteligentemente estos aspectos puede solucionarnos muchos quebraderos
de cabea y permitir a los internautas navegar ms agradablemente por nuestro sitio.
OPTIMI$AR PRESTACIONES II
!estion "e los cam)os
Qa hemos comentado por encima los di!erentes tipos de campo existentes en una base
de datos. La eleccin del tipo de campo apropiado para cada caso puede ayudarnos
tambi*n a optimiar el tamaOo y rapide de nuestra base de datos.
La preguntas que hay que hacerse a la hora de elegir la naturalea y dimensiones del
campo son0
FGHu ti)o "e "ato *o1 a almacenar en el cam)oI N2meros: teEto: fechas???
FGCu'l es el tamaJo m'Eimo =ue es)ero =ue )ue"a alcan0ar al-uno "e los
re-istros "el cam)oI
$ay que tener en cuenta que cuanto ms margen le demos al valor mximo del
campo, ms aumentar el tamaOo de nuestra base de datos y ms tiempo tardara en
realiar las consultas. &dems, el !actor tamaOo puede verse agravado si estamos
de!iniendo un campo indexado, para los cuales, el espacio ocupado es
aproximadamente del doble.
.n consejo prctico es que las !echas sean almacenadas en !ormato de !echa ya que
ello nos permite reducir el espacio que ocupan en memoria de ms del doble y por otro
lado, podremos aprovechar las prestaciones que "#L y nuestro lenguaje de servidor
nos o!recen. 'odremos calcular la di!erencia de das entre dos !echas, ordenar los
registros por !echa, mostrar los registros comprendidos en un intervalo de tiempo...
Existe la posibilidad para los campos de texto de !ijar una cierta longitud para el campo
o dejar que cada registro tenga una longitud variable en !uncin del n/mero de
carcteres que posea. Elegir campos de longitud variable nos puede ayudar a optimiar
los recursos de memoria de la ,D, no obstante, es un arma de doble !ilo ya que las
consultas se realian ms lentamente puesto que obligamos a la tabla a establecer cul
es el tamaOo de cada registro que se est comparando en lugar de saberlo de
antemano. Es por tanto aconsejable, para los campos indexados de pequeOo tamaOo,
atribuirles una longitud !ija.
A#!NOS TRCOS PRKCTICOS
Eliminar llama"as a bases "e "atos
En pginas tipo portal en las que a los lados se encuentran enlaces que son impresos a
partir de bases de datos %distintas secciones, servicios,...( existe siempre un e!ecto
ralentiador debido a que se trata de pginas altamente visitadas que e!ect/an
m/ltiples llamadas a ,D sistemticamente en cada una de sus pginas.
.na !orma de agiliar la visualiacin de estas pginas es textualiando estos enlaces a
partir de scripts internos. 'ongamos el ejemplo de Desarrollo+eb0
-omo puede verse, a los lados hay secciones como M3uestras pginasM, M-osecha del
1PPPM, M)anualesM cuyos enlaces estn almacenados en bases de datos. "in embargo,
los enlaces que se visualian en la pgina no han sido obtenidos por llamadas a bases
de datos sino que, cada ve que un nuevo elemento de la seccin es aOadido, esto
actualia automticamente, por medio de un script, un archivo texto en el que el
nuevo enlace es incluido y *l ms antiguo es eliminado. Es, de hecho, este archivo
texto el que es insertado en el cdigo !uente de la pgina. De este modo evitamos
media docena de llamadas a bases de datos cada ve que una pgina es vista lo cual
permite optimiar recursos de servidor de una manera signi!icativa.
Eliminar )alabras cortas 1 re)eticiones
En situaciones en la que nuestra base de datos tiene que almacenar campos de texto
extremadamente largos y dichos campos son requeridos para realiar selecciones del
tipo L5RE 8LalgoL8, los recursos de la ,D pueden verse sensiblemente mermados. .na
!orma de ayudar a gestionar este tipo b/squedas es incluyendo un campo adicional.
Este campo adicional puede ser creado automticamente por medio de scripts y en *l
incluiramos el texto original, del cual habremos eliminado palabras triviales como
artculos, preposiciones o posesivos. 4os encargaremos adems de eliminar las
palabras que est*n repetidas. De esta !orma podremos disminuir sensiblemente el
tamaOo del campo que va a ser realmente consultado.
$emos comentado en otros captulos que los campos texto de mas de 122 caracteres
denominados memo no pueden ser indexados. "i a/n despu*s de esta primera
!iltracin nuestro campo continua siendo demasiado largo para ser indexado, lo que se
puede hacer es cortarlo en troos de 122 caracteres de manera a que lo almacenemos
en distintos campos que podrn ser indexados y por tanto consultados con mayor
rapide.
CREACI%N DE TAB#AS
En general, la mayora de las bases de datos poseen potentes editores de bases que
permiten la creacin rpida y sencilla de cualquier tipo de tabla con cualquier tipo de
!ormato.
"in embargo, una ve la base de datos est alojada en el servidor, puede darse el caso
de que queramos introducir una nueva tabla ya sea con carcter temporal %para
gestionar un carrito de compra por ejemplo( o bien permanente por necesidades
concretas de nuestra aplicacin.
En estos casos, podemos, a partir de una sentencia "#L, crear la tabla con el !ormato
que deseemos lo cual nos puede ahorrar ms de un quebradero de cabea.
Este tipo de sentencias son especialmente /tiles para bases de datos como )ysql, las
cuales trabajan directamente con comandos "#L y no por medio de editores.
'ara crear una tabla debemos especi!icar diversos datos0 El nombre que le queremos
asignar, los nombres de los campos y sus caractersticas. &dems, puede ser necesario
especi!icar cules de estos campos van a ser ndices y de qu* tipo van a serlo.
La sintaxis de creacin puede variar ligeramente de una base de datos a otra ya que
los tipos de campo aceptados no estn completamente estandariados.
& continuacin os explicamos someramente la sintaxis de esta sentencia y os
proponemos una serie de ejemplos prcticos0
SintaEis
-reate >able nombre6tabla
%
nombre6campo67 tipo67
nombre6campo61 tipo61
nombre6campo6n tipo6n
Rey%campo6x,...(
(
'ongamos ahora como ejemplo la creacin de la tabla pedidos que hemos empleado en
captulos previos0
-reate >able pedidos
%
id6pedido 54>%;( 4G> 4.LL &.>G654-?E)E4>,
id6cliente 54>%;( 4G> 4.LL,
id6articulo 54>%;(4G> 4.LL,
!echa D&>E,
cantidad 54>%;(,
total 54>%;(, REQ%id6pedido,id6cliente,id6articulo(
(
En este caso creamos los campos id los cuales son considerados de tipo entero de una
longitud especi!icada por el n/mero entre par*ntesis. 'ara id_pedido requerimos que
dicho campo se incremente automticamente %&.>G654-?E)E4>( de una unidad a
cada introduccin de un nuevo registro para, de esta !orma, automatiar su creacin.
'or otra parte, para evitar un mensaje de error, es necesario requerir que los campos
que van a ser de!inidos como ndices no puedan ser nulos %4G> 4.LL(.
El campo fecha es almacenado con !ormato de !echa %D&>E( para permitir su correcta
explotacin a partir de las !unciones previstas a tal e!ecto.
Ainalmente, de!inimos los ndices enumerndolos entre par*ntesis precedidos de la
palabra REQ o 54DES.
Del mismo modo podramos crear la tabla de artculos con una sentencia como *sta0
-reate >able articulos
%
id6articulo 54>%;( 4G> 4.LL &.>G654-?E)E4>,
titulo 3&?-$&?%2P(,
autor 3&?-$&?%12(,
editorial 3&?-$&?%12(,
precio ?E&L,
REQ%id6articulo(
(
En este caso puede verse que los campos al!anum*ricos son introducidos de la misma
!orma que los num*ricos. 3olvemos a recordar que en tablas que tienen campos
comunes es de vital importancia de!inir estos campos de la misma !orma para el buen
!uncionamiento de la base.
)uchas son las opciones que se o!recen al generar tablas. 4o vamos a tratarlas
detalladamente pues sale de lo estrictamente prctico. >an slo mostraremos algunos
de los tipos de campos que pueden ser empleados en la creacin de tablas con sus
caractersticas0
Ti)o B1tes Descri)ci,n
54> o
54>ENE?
;
4/meros enteros. Existen otros tipos de mayor o menor
longitud espec!icos de cada base de datos.
DG.,LE o
?E&L
T
4/meros reales %grandes y con decimales(. 'ermiten
almacenar todo tipo de n/mero no entero.
-$&? 7Ucaracter &l!anum*ricos de longitud !ija prede!inida
3&?-$&? 7UcaracterV7 &l!anum*ricos de longitud variable
D&>E :
Aechas, existen multiples !ormatos espec!icos de cada base
de datos
,LG, 7UcaracterV1 Nrandes textos no indexables
,5> o
,GGLE&4
7 &lmacenan un bit de in!ormacin %verdadero o !also(

You might also like