Tutoriales
>> SQL para Bibliotecarios
>> Seguridad
en los Catálogos en Línea Win95 y Win98
>> Funciones
de Circulación en Horizonte 5.3
SQL para Bibliotecarios
El instructivo que encontrarán a continuación
ha sido desarrollado específicamente para el uso por
parte de bibliotecarios usuarios del sistema automatizado
de bibliotecas Horizonte.
No se recomienda la aplicación de
las instrucciones que aquí aparezcan, en otros sistemas
de bibliotecas que puedan también utilizar SQL, pues
se corre el riesgo de causar corrupción de tablas o
pérdida de información.
Fundamentos y comandos básicos
del lenguaje SQL, para la obtención de reportes desde
el sistema de bibliotecas Horizonte. (Héctor
Aracena M., 1998)
1. Introducción a SQL.
SQL es la sigla de Structured Query Language,
es decir, Lenguaje Estructurado de Comandos. Es una herramienta
que permite diseñar, consultar, manipular y administrar
datos en una base de datos relacional.
El modelo de administración de bases
de datos relacionales fue propuesto en 1970 por el Dr. E.
F. Codd, del Laboratorio de Investigación de IBM, en
San José, California, y luego desarrollado durante
la década siguiente en otras universidades y laboratorios
de desarrollo. Con el transcurso del tiempo, SQL se ha convertido
en el standard de lenguaje de bases de datos relacionales.
Un hecho que ha ayudado enormemente a este desarrollo ha sido
el creciente perfeccionamiento y disponibilidad de computadores
más poderosos y, también, el desarrollo de métodos
mejorados para accesar, recuperar y almacenar información
y datos.
El primer producto comercial basado en SQL
fue SQL/DS, lanzado por IBM al mercado en 1981. desde esa
fecha, hasta el presente, se han desarrollado alrededor de
setenta y cinco sistemas de administración de bases
de datos en SQL o basados en él, ejecutándose
en computadores de todos los tamaños y arquitecturas.
Como lenguaje, SQL trata de aproximarse lo
más posible al lenguaje natural; para ello, utiliza
una sintaxis que recuerda algo de teoría de conjuntos,
y otros comandos, generalmente de una sola palabra, complementan
las sentencias básicas.
Para saber operar eficientemente el SQL,
y obtener la información deseada desde la base de datos,
es preciso, además de conocer bien la sintaxis de interrogación
de SQL, conocer a profundidad la estructura y enlaces dentro
de cada base de datos relacional.
2. ¿Qué es una base de datos relacional?
(RDB en inglés)
Es aquella base de datos cuyo lenguaje de
manipulación de datos permite al usuario definir relaciones
entre elementos de datos, y tratar a las propias definiciones
relacionales como elementos de datos.
Una base de datos relacional, además:
- representa toda la información de
la BD en forma de tablas, es decir, estructuras de almacenamiento
de datos comunes.
- soporta las tres operaciones relacionales básicas
conocidas como:
selección, proyección y unión, para especificar
exactamente qué datos desean ser consultados,absolutamente
independiente de la forma física en que estos datos
están guardados.
Las Tablas, entonces, son elementos de datos comunes, por
ejemplo:
- tabla borrower: información sobre usuarios.
- tabla bib: información sobre registros bibliográficos.
- tabla auth: información sobre registros de autoridades
Dentro de las tablas, existen además otras estructuras:
- filas: representan secuencias de datos
completas, es decir, registros completos dentro de la base
de datos.
- columnas: representan los nombres de los
campos controlados dentro de la base de datos.
Vistas
Las "vistas" en SQL, son estructuras
de datos que contienen elementos de dos o más tablas
unidas para generar reportes o estructuras más elaboradas,
por ejemplo:
- item_report: es una vista que une información
de tablas de ítemes, adquisiciones y usuarios, porque
incluye columnas (campos) como: título, nombre,precio,
tipo de Usuario, etc.
- items_out: es una vista que une información
de tablas de ítemes y usuarios, pues permite visualizar
los ítemes prestados, su fecha de vencimiento, a qué
usuarios están prestados, de qué ubicación,
etc.
Comandos Básicos de SQL y Delimitadores
SELECT es el "corazón"
de la función de consulta de datos en una base de datos
relacional. Este comando permite extraer datos para formar
reportes o informes. Select delimita la o las columnas (campos)
que se desean recuperar.
FROM este comando o "cláusula"
es en realidad un delimitador de SELECT, pues permite especificar
de dónde se va a obtener la información, es
decir, desde qué tabla, desde qué vista, etc.
FROM establece la tabla o vista a usar como fuente de los
datos extraídos con SELECT.
WHERE este comando o "calificador"
permite condicionar nuestra selección de acuerdo a
algun criterio determinado, filtrando los datos no deseados.
Ejemplo de los tres comandos:
SELECT name seleccionar campo nombre
FROM borrower desde la tabla borrower
WHERE btype = 'DIR' donde el tipo de usuario sea DIR
Otros comandos auxiliares o delimitadores son:
AND permite agregar otra condición al WHERE, para
hacer más específica una consulta.
Ejemplo: SELECT name seleccione usuarios
FROM borrower desde la tabla borrower
WHERE btype = 'DIR' donde el btype sea "DIR"
AND location = 'BIB' y además la ubicación sea
"BIB"
ORDER BY permite ordenar los resultados de acuerdo a alguno
de los campos (columnas) recuperados.
Ejemplo: select name, location seleccione usuario y ubicación
from borrower desde la tabla borrower
where btype = 'DIR' donde el btype sea DIR
and location = 'BIB' y además la ubicación sea
BIB
ORDER BY name ordenados por usuario (nombre)
GROUP BY permite agrupar los resultados en
base a alguna de las columnas seleccionadas y recuperadas
con SELECT.
IMPORTANTE: SIEMPRE EL GROUP BY DEBE IR
ANTES QUE EL ORDER BY.
IN este delimitador o cláusula permite combinar dos
consultas en una, en lo que se llama consultas anidadas.
Ej: where bib# in (select bib# from bib where ....)
NOT IN este delimitador permite excluir información,
en lo
que se llama consultas anidadas.
Ej: where bib# not in (select bib# from bib where ..)
* este comando o utilitario permite seleccionar
todas las columnas (campos) de una tabla o vista, sin necesidad
de digitar cada nombre de columna, separado por coma.
Ejemplo: select *
from borrower
where btype = 'DIR'
and location = 'BIB'
order by name
Aunque name no se especifica en la sentencia
SELECT, el asterisco hace que el sistema reconozca la columna
name.
SUBSTRING este comando permite recuperar sólo cierta
cantidad de caracteres de una columna o campo.
Ejemplo: select bib#, substring(text,1,50)
from bib
where tag = 245
Se pretende seleccionar sólo 50 caracteres del campo
título.
Otros Operadores para Seleccionar Información.
a. de comparación: = < >
Ej: select item# from item
where n_ckos > 1
b. de combinación o negación lógica de
condiciones: OR NOT
Ej: where n_ckos < 20 or ibarcode > 35611000250000
o bien:
where bib# not in (select bib# from bib where tag = 245)
c. rangos: BETWEEN NOT BETWEEN
Ej: where bib# between 1000 and 2500
o bien:
where bib# not between 1 and 100001
d. valores desconocidos: IS NULL IS NOT NULL
Ej: select borrower from borrower
where street2 is null
Con esta sentencia se pretende encontrar
todos los usuarios que no tenga información en el campo
street2
e. recuperación de caracteres: LIKE NOT LIKE
Ej: where btype like "%ALU%"
Otros Operadores de Comparación
>= Mayor o igual que
<= Menor o igual que
!= No igual a (or)
<> No igual que
Ejs.: select item#, ibarcode, n_ckos
from item
where n_ckos >= 30
select name, btype, bbarcode
from borrower
where n_ckos <= 1
select name, btype, bbarcode, street1, street2
from borrower
where btype != 'ALU'
Niveles de Consultas en SQL y su Sintaxis
1. CONSULTAS SIMPLES.
Permiten extraer información desde
una sola tabla o vista, pudiendo estar o no condicionada a
alguna limitante:
Ejemplos:
select name este query permite listar TODOS
los nombres de from borrower usuarios que hay ingresados en
la base de datos.
Aunque util, es poco práctico a la hora de elaborar
reportes más específicos de usuarios.
select bib#, text este query permite obtener
un listado de los números from bib bib y de los títulos
de todos los registros bib. de la where tag = 245 base de
datos. Los recuperará TODOS, sin mayores delimitaciones
(puede ser práctico o no, dependerá
de cada biblioteca)
select item#, btype, call,
n_ckos, location este query selecciona los números
de
from item item, el tipo de item, el número de
where location = 'BIB' pedido, la cantidad de préstamos
y la
and btype = 'RF' ubicación, de aquellos ítemes
que están
order by item# en la ubicación BIB y que pertenecen
al Tipo de Item RF (Referencia). Todo
esto ordenado por número del item.
select text, tag este query permite seleccionar el texto de
las
from auth etiquetas (campos) de autoridades, y el número
where text like "%Neruda%" de las etiquetas, que
contengan la palabra
order by tag Neruda. Todo ello ordenado por número
de
etiqueta (campo).
2. CONSULTAS ANIDADAS.
Las consultas anidadas permiten extraer datos
en forma mucho más específica que con una consulta
simple, pero siempre desde sólo una tabla o vista de
la base de datos. Este tipo de consultas permite incluir algun
factor, o excluirlo de la selección.
Ejemplos:
select bib#, text
from bib
where tag = 245
and bib# not in (select bib# from bib where tag = 740)
order by text
Este query permite seleccionar todos los números bib.
y los títulos de aquellos registros bibliográficos
que tengan un campo 245, QUE NO TENGAN CAMPO 740 (título
alternativo). Para seleccionar los que SI TENGAN campo 740,
se debe cambiar el not in por in
select text
from bib
where tag = 245
and bib# in (select bib# from bib where tag = 082 and
text like "%658.3%")
order by text
Este query seleccionará sólo
los títulos de aquellos registros bibliográficos
que en el campo 082 tengan el texto 658.3. Podría ser
util para generar listados de títulos por materias,
basándose en el Número Dewey o CDU, más
que en los encabezamientos de materia.
3. UNION DE TABLAS (JOIN)
La unión de tablas permite al usuario
de SQL extraer datos desde diferentes tablas o vistas a la
vez, aún cuando estos no tengan una relación
directa entre si.
Para saber generar estas uniones de tablas,
es absolutamente necesario identificar la llave o columna
común a las tablas o vistas sobre las que se desea
trabajar. Por ejemplo:
bib# (número bib)esta columna es común a las
tablas bib e item;
por tanto, es posible obtener reportes combinando
información desde ambas fuentes.
Ejemplo:
select b.bib#, b.text, i.item#, i.call, i.location
from bib b, item i
where b.bib# = i.bib#
and b.tag = 245
and i.location = 'BIB'
order by b.text
En este caso, la llave común (el campo
bib#) permitió extraer datos desde bib e item, al mismo
tiempo. Se debe siempre especificar que la llave debe ser
igual en cada una de las tablas incluidas. En este caso el
número bib de la tabla bib debía ser igual al
de la tabla item.
Importante, al hacer consultas anidadas,
se debe asignar un código de tabla o vista a cada columna
que se desea seleccionar, para que el sistema sepa exactamente
dónde debe recuperar las columnas. En el ejemplo anterior,
se puso : ... b.text ... from bib b , se le está diciendo
al sistema que el nombre bib se abrevió al código
b para identificar de
dónde viene el dato text, en este caso, de la tabla
bib.
Ejemplo de unión de dos tablas:
use biblioteca
go
select substring(b.text,3,40), substring(i.call,1,25), i.copy,
i.ibarcode, i.n_ckos
from bib b, item i
where b.tag = 245
and b.bib# = i.bib#
and i.collection = "CG"
order by n_ckos desc
go
En este query, se seleccionaron 37 caracteres del título
de los registros bibliográficos, 24 caracteres del
número de pedido en los ítemes, la información
de copia/vol., y la información de la cantidad de prestamos
que han tenido los ítemes de la colección CG,
desde que se inició la circulacion automatizada.
Recordar: la "llave" o campo común
entre las tablas o vistas debe ser idéntica en todas
ellas, por eso se digita
ejemplo:
where b.bib# = i.bib# para chequear que el
número bib de la tabla
bib sea igual al número
bib de la tabla item.
Ejemplo de unión de tres tablas:
use biblioteca
go
select a.text, b.bib#, i.collection
from auth a, bib b, item i
where a.auth# = b.auth#
and b.bib# = i.bib#
and i.collection = 'TS'
go
En este query se ha pedido al sistema que
muestre la información de autoridades que ha sido utilizada
por los ítemes pertenecientes a la colección
TS, indicando además los números de los registros
bib. a que pertenecen esos ítemes.
Aqui, como se trata de tres tablas, debe haber dos llaves
o elementos
comunes, no uno sólo. En este caso, auth# es común
a bib y a auth, pero
no a item; no obstante, el campo bib# es común a bib
y a item; entonces:
- se une auth con bib gracias al elemento auth#
- se une bib con item gracias al elemento bib#
¿Cómo se puede saber las columnas que existen
en el sistema, y a qué tablas o vistas pertenecen?
Al entrar al Editor de Tablas de Horizonte, debe haber una
tabla llamada lister_column. Dicha tabla enlista todas las
columnas existentes en la base de datos, siendo posible ordenarlas
por tabla u otros criterios, y así se sabe qué
columnas se repiten en qué otras vistas del sistema.
¿Cómo se puede saber qué columnas integran
determinada tabla o vista?
Con la siguiente instrucción (en SAF o a través
de un ISQL)
sp_help nombre_de_tabla_o_vista
Ejemplo:
sp_help item
sp_help bib
Un último consejo importante:
Al crear una sentencia select, no es determinante el orden
que le den a los campos o columnas que desean recuperar, es
decir, la selección puede incluir las columnas deseadas
en el orden que más convenga al objetivo del reporte.
Por ejemplo:
1. select name, location, street2, btype, n_ckos
from borrower
Dará el mismo resultado que:
2. select name, btype, street2, location, n_ckos
from borrower
Bibliografía:
1. Bowman. Judith; Emerson, Sandra L.; Darnowsky, Marcy.
The practical SQL handbook: using structured query language.
Massachusetts: Addison-Wesley, 1996. 454 p.
2. Curso "Lenguaje SQL". Valparaíso: Universidad
Federico Santa María, 8 al 10 de Octubre de 1997. (Apuntes
de clase).
Seguridad en los Catálogos
en Línea Win95 y Win98
Los computadores que se usan como Catálogos
al Público de la base de datos de una determinada Biblioteca,
deben quedar configurados de tal modo que los usuarios no
puedan abrir otras carpetas o ejecutar aplicaciones no autorizadas
que podrían causar pérdida de datos o fallas
en el equipo.
Para evitar esto, se entregará a continuación
un procedimiento para bloquear los computadores que acceden
a la base de datos Horizonte, usando los sistemas operativos
Windows95 o Windows98.
Procedimiento
Previamente: asegurarse de contar con los
programas y utilitarios de POLEDIT, que es una carpeta de
editor de sistemas que se encuentra en el CD de Windows95/98.
Pesa aproximadamente 200K, por lo que puede caber perfectamente
en un diskette. Otra opción es tener POLEDIT en algún
PC a través de la red, con acceso compartido mediante
contraseña.
1. Asegurarse de que el PC se conecta bien
a Internet (puede ser mediante un telnet o PING al servidor
de e-mail).
2. Asegurarse de que el WUI funcione y que
el PC se conecte bien a la base de datos Horizonte.
3. Luego, acceder a POLEDIT y activar POLEDIT.EXE.
4. Si es la primera vez que se abre, se mostrará una
ventana con el archivo Admin.adm ... se debe hacer click en
ABRIR.
5. Luego, en el menú Archivo se debe escoger Abrir
Registro.
6. Aparecerán dos íconos. Se debe escoger Usuario
Local.
7. Aparecerá una serie de carpetas de sistema:
Escritorio, Panel de Control, Shell, Red y Sistema.
Se debe abrir en primer lugar SHELL y luego Restricciones.
8. Aparecerá una serie de cuadros
en blanco para seleccionar la restricción deseada.
Se recomienda quitar (marcando el cuadro correspondiente):
- menú Ejecutar
- mostrar unidades en Mi PC
- menú configuración y barra de tareas
- opción Apagar el Sistema
- comando Buscar
- no guardar configuración al salir del sistema
NO QUITAR ENTORNO DE RED, PUES SE DEBE PODER ACCEDER AL PC
QUE TIENE POLEDIT, YA QUE SE SUPRIMEN LOS ICONOS DE LAS UNIDADES
DEL PC.
9. Luego, Ir a SISTEMA, luego Restricciones
y deshabilitar las dos opciones de DOS.
10. Recomendado: Ir a Panel de Control y
marcar para deshabilitar o restringir: Panel de Control de
Monitor (y sus sub-opciones) y Panel de Control de Red (y
sus sub-opciones)
11. Finalmente, hacer click en Aceptar, luego
se debe hacer click en la opción Guardar del menú
Archivo. Salir de Poledit.
Finalmente, reiniciar el PC con CTRL+ALT+SUPR
y probar si Windows sube automáticamente; probar también
si las carpetas no deseadas ya no se ven y, finalmente, probar
si accede a la base de datos.
RECOMENDACIONES ANTES DE EJECUTAR POLEDIT:
- si los PCs no están en muebles cerrados
(las CPU), se recomienda deshabilitar las disketteras, para
que no puedan bootear los PCs con algún diskette de
DOS.
- borrar archivos y accesorios de Windows
como:
Wordpad, Notepad, Write, Paintbrush, Juegos, Calculadora,
Ayuda de Windows, Tutorial de Windows.
- borrar del Menú Inicio todos los
accesos, incluso los del Explorador de Windows, DOS, etc.
Sólo debe quedar el acceso a Catálogo Electrónico
5.3 y a algún antivirus instalado.
- también se debe vaciar la carpeta
Favoritos (si estuviese) y la carpeta Documentos (si estuviese).
Funciones de Circulación
en Horizonte 5.3
1. Solicitud de devolución anticipada
(Recall) : se aplica cuando se desea que uno o más
ítemes sean devueltos antes de la fecha que le(s) dio
el sistema. Se hace buscando el o los ítemes en el
módulo de búsqueda y enviándolo(s) a
Circulación. Se abre una pantalla que indica dónde
se desea enviar :
Préstamo
Devolución
Solicitud ---> se debe escoger ese botón
... Se abre una caja de diálogo para
cambiar la fecha de devolución del ítem.
Se debe notificar al usuario del cambio efectuado.
2. Cambio de Fecha / Hora en Devolución
: se usa en caso de interrupciones del servicio, para que
los ítemes con hora de vencimiento no se registren
atrasados. Incluso aplica para días completos.
Ejemplo: el item 9999 estaba para las 14:30
pm del 31/10/2001
Hubo una falla de la red y la biblioteca
estuvo cerrada desde las 13:00 hasta las 16:00 hrs. de ese
día.
Al volver el sistema, ir al Menú DEV
y seleccionar Cambiar Fecha DEV e ingresar la fecha / hora
deseada, en este caso podrían ser las 13:00 hrs (se
"engaña" al PC). Si la falla dura un día,
se ingresa la fecha "anterior" cuando el sistema
es restaurado (conexión). Con lo anterior se evita
tener que pasar por alto multas por atraso.
Al terminar de devolver los ítemes,
volver a abrir Cambiar fecha DEV y escoger Reiniciar Reloj
... para que tome la fecha/hora normal del PC.
3. Préstamos indefinidos : si se desea
que un ítem en préstamo permanente se vea en
el OPAC como "préstamo indefinido" basta
con editar el Item en Circulación, e ingresar cualquier
fecha posterior al 31 / 12 / 2049 ---> aparecerá
en el detalle de ítemes como "Préstamo
Indefinido" sin fecha de expiración.
|