You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
783 lines
26 KiB
783 lines
26 KiB
12 years ago
|
<!--
|
||
|
<!DOCTYPE appendix PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd">
|
||
|
-->
|
||
|
|
||
|
<appendix id="database">
|
||
|
<title
|
||
|
>Introducción a las bases de datos</title>
|
||
|
|
||
|
<sect1 id="what-is-a-database">
|
||
|
<title
|
||
|
>¿Qué es una base de datos?</title>
|
||
|
<para
|
||
|
>Puede definir una base de datos como una colección de datos sobre un tema. Se organiza de forma que se permite navegar fácilmente por la información, realizar cambios o añadir elementos nuevos. </para>
|
||
|
<para
|
||
|
>Puede ver este diagrama si quiere acceder a un o más de los ejemplos anteriores: una libreta de teléfonos sencilla. </para>
|
||
|
<screenshot>
|
||
|
<screeninfo
|
||
|
>Un diagrama de base de datos de números telefónicos</screeninfo>
|
||
|
<mediaobject>
|
||
|
<imageobject>
|
||
|
<imagedata fileref="contact-example.png" format="PNG"/>
|
||
|
</imageobject>
|
||
|
<textobject>
|
||
|
<phrase
|
||
|
>Un diagrama de base de datos de números telefónicos</phrase>
|
||
|
</textobject>
|
||
|
</mediaobject>
|
||
|
</screenshot>
|
||
|
<para
|
||
|
>La imagen de arriba muestra un conjunto con dos contactos, cada uno de los cuales se presenta en una tarjeta individual. Parece que esa tarjeta puede constituir una línea sencilla de una tabla: </para>
|
||
|
|
||
|
<para
|
||
|
><emphasis
|
||
|
>Tabla <guilabel
|
||
|
>Contactos</guilabel
|
||
|
></emphasis
|
||
|
></para>
|
||
|
<informaltable>
|
||
|
<tgroup cols="2">
|
||
|
<tbody>
|
||
|
<row>
|
||
|
<entry
|
||
|
><guilabel
|
||
|
>Nombre</guilabel
|
||
|
></entry>
|
||
|
<entry
|
||
|
><guilabel
|
||
|
>Nº tel.</guilabel
|
||
|
></entry>
|
||
|
</row>
|
||
|
<row>
|
||
|
<entry
|
||
|
>Juan</entry>
|
||
|
<entry
|
||
|
>799 23 43 12</entry>
|
||
|
</row>
|
||
|
<row>
|
||
|
<entry
|
||
|
>Adán</entry>
|
||
|
<entry
|
||
|
>711 19 77 21</entry>
|
||
|
</row>
|
||
|
</tbody>
|
||
|
</tgroup>
|
||
|
</informaltable>
|
||
|
|
||
|
<para
|
||
|
><emphasis
|
||
|
>Términos y definiciones</emphasis
|
||
|
>: Un solo dato constituye una parte de una colección mayor que se puede llamar <firstterm
|
||
|
>fila</firstterm
|
||
|
> o, usando un término más profesional, <firstterm
|
||
|
>registro</firstterm
|
||
|
>. La colección se suele llamar <firstterm
|
||
|
>tabla</firstterm
|
||
|
>. Además, el nombre más natural para la tabla es la que describe los datos que se ofrecen o que se almacenan es <guilabel
|
||
|
>Contactos</guilabel
|
||
|
>. Además, cada línea de la tabla consta de <firstterm
|
||
|
>columnas</firstterm
|
||
|
>, a menudo llamadas <firstterm
|
||
|
>campos</firstterm
|
||
|
>. En la tabla <guilabel
|
||
|
>Contactos</guilabel
|
||
|
> hay dos columnas (campos): <guilabel
|
||
|
>Nombre</guilabel
|
||
|
> y <guilabel
|
||
|
>Nº tel.</guilabel
|
||
|
>. </para>
|
||
|
<para
|
||
|
>Para usos sencillos, una sola tabla puede constituir una <firstterm
|
||
|
>base de datos</firstterm
|
||
|
>. Mucha gente considera que ambos son equivalentes. Como podrá ver, las bases de datos reales necesitan más de una tabla. </para>
|
||
|
<para
|
||
|
>En resumen, ya tiene una base de datos sencilla con una tabla <guilabel
|
||
|
>Contactos</guilabel
|
||
|
>. </para>
|
||
|
</sect1>
|
||
|
|
||
|
|
||
|
<sect1 id="database-and-spreadsheet">
|
||
|
<title
|
||
|
>Base de datos y hojas de cálculo</title>
|
||
|
<para
|
||
|
>Es muy probable que haya utilizado alguna aplicación de hoja de cálculo como KSpread, OpenOffice.org Calc o Microsoft Excel. Si es así, quizás se pregunte: si tanto las hojas de cálculo como las bases de datos tienen tablas, ¿por qué debo usar estas últimas? </para>
|
||
|
<para
|
||
|
>Al comparar las hojas de cálculo con las bases de datos se pueden destacar los siguientes puntos, que se analizar posteriormente: </para>
|
||
|
<itemizedlist>
|
||
|
<listitem
|
||
|
><para
|
||
|
><link linkend="referential-data-integrity"
|
||
|
>Integridad de datos referencial</link
|
||
|
></para
|
||
|
></listitem>
|
||
|
<listitem
|
||
|
><para
|
||
|
><link linkend="data-redundyncy"
|
||
|
>Redundancia de datos</link>
|
||
|
</para
|
||
|
></listitem>
|
||
|
<listitem
|
||
|
><para
|
||
|
><link linkend="data-integrity-and-validity"
|
||
|
>Integridad y validación de datos</link
|
||
|
></para
|
||
|
></listitem>
|
||
|
<listitem
|
||
|
><para
|
||
|
><link linkend="data-limiting"
|
||
|
>Limitar la vista de datos</link
|
||
|
></para
|
||
|
></listitem>
|
||
|
<listitem
|
||
|
><para
|
||
|
><link linkend="performance-and-capacity"
|
||
|
>Rendimiento y capacidad</link
|
||
|
></para
|
||
|
></listitem>
|
||
|
<listitem
|
||
|
><para
|
||
|
><link linkend="convenient-data-entry"
|
||
|
>Entrada de datos adecuados</link
|
||
|
></para
|
||
|
></listitem>
|
||
|
<listitem
|
||
|
><para
|
||
|
><link linkend="reports"
|
||
|
>Informes</link
|
||
|
></para
|
||
|
></listitem>
|
||
|
<listitem
|
||
|
><para
|
||
|
><link linkend="programming"
|
||
|
>Programación</link
|
||
|
></para
|
||
|
></listitem>
|
||
|
<listitem
|
||
|
><para
|
||
|
><link linkend="multiuse"
|
||
|
>Usos varios</link
|
||
|
></para
|
||
|
></listitem>
|
||
|
<listitem
|
||
|
><para
|
||
|
><link linkend="security"
|
||
|
>Seguridad</link
|
||
|
></para
|
||
|
></listitem>
|
||
|
</itemizedlist>
|
||
|
|
||
|
<sect2 id="difference-database-and-spreadsheet">
|
||
|
<title
|
||
|
>¿En qué se diferencia una base de datos de una hoja de cálculo?</title>
|
||
|
|
||
|
<para
|
||
|
>Para aumentar gradualmente la capacidad de un teléfono móvil, expanda la tabla <guilabel
|
||
|
>Contactos</guilabel
|
||
|
> añadiendo una columna (campo) <guilabel
|
||
|
>Dirección</guilabel
|
||
|
>. Añada más números de teléfono (oficina, casa) para cada persona y añada apellidos a los nombres. Para que sea más sencillo, asumamos lo siguiente: </para>
|
||
|
<itemizedlist>
|
||
|
<listitem
|
||
|
><para
|
||
|
>la tabla está limitada a dos personas (obviamente, podría haber cientas o miles de ellas en una base de datos real)</para
|
||
|
></listitem>
|
||
|
<listitem
|
||
|
><para
|
||
|
>no hay dos personas con el mismo nombre y apellidos</para>
|
||
|
</listitem>
|
||
|
</itemizedlist>
|
||
|
<para
|
||
|
><emphasis
|
||
|
>Tabla de contactos</emphasis
|
||
|
></para>
|
||
|
<informaltable>
|
||
|
<tgroup cols="3">
|
||
|
<tbody>
|
||
|
<row>
|
||
|
<entry
|
||
|
><emphasis
|
||
|
>Nombre y apellidos</emphasis
|
||
|
></entry>
|
||
|
<entry
|
||
|
><emphasis
|
||
|
>Tel</emphasis
|
||
|
></entry>
|
||
|
<entry
|
||
|
><emphasis
|
||
|
>Dirección</emphasis
|
||
|
></entry>
|
||
|
</row>
|
||
|
<row>
|
||
|
<entry
|
||
|
>María Ejemplo</entry>
|
||
|
<entry
|
||
|
>799 23 43 12</entry>
|
||
|
<entry
|
||
|
>Calle Larga 1, Córdoba</entry>
|
||
|
</row>
|
||
|
<row>
|
||
|
<entry
|
||
|
>Adán Prueba</entry>
|
||
|
<entry
|
||
|
>711 19 77 21</entry>
|
||
|
<entry
|
||
|
>Mérida, Paseo Marítimo 5</entry>
|
||
|
</row>
|
||
|
<row>
|
||
|
<entry
|
||
|
>María Ejemplo</entry>
|
||
|
<entry
|
||
|
>110 98 98 00</entry>
|
||
|
<entry
|
||
|
>Calle Larga 1</entry>
|
||
|
</row>
|
||
|
<row>
|
||
|
<entry
|
||
|
>Ejemplo María</entry>
|
||
|
<entry
|
||
|
>312 43 42 22</entry>
|
||
|
<entry
|
||
|
>Sevilla, Calle Larga 1</entry>
|
||
|
</row>
|
||
|
<row>
|
||
|
<entry
|
||
|
>ADÁN Prueba</entry>
|
||
|
<entry
|
||
|
>231 83 02 04</entry>
|
||
|
<entry
|
||
|
>Paseo Marítimo 5, Mérida</entry>
|
||
|
</row>
|
||
|
</tbody>
|
||
|
</tgroup>
|
||
|
</informaltable>
|
||
|
|
||
|
<para
|
||
|
>Una tabla así puede existir tanto en una hoja de cálculo como en una base de datos. Utilizar una hoja de cálculo es muy fácil, por supuesto. ¿Qué problemas hay en esta fase? </para>
|
||
|
|
||
|
<sect3 id="referential-data-integrity">
|
||
|
<title
|
||
|
>Integridad referencia de datos</title>
|
||
|
<para
|
||
|
>Supongamos que va a utilizar una hoja de cálculo y que tiene que cambiar la dirección de al menos una persona. Tiene un pequeño problema: probablemente tenga que cambiar la dirección en varias líneas. Por ejemplo, María aparece en tres líneas. Se produciría un problema si olvida cambiar una de las líneas. Las direcciones asignadas a esta persona es <emphasis
|
||
|
>ambigua</emphasis
|
||
|
>, por tanto <emphasis
|
||
|
>sus datos pierden la integridad</emphasis
|
||
|
>. </para>
|
||
|
<para
|
||
|
>Además, no hay una forma sencilla de eliminar una única persona de la tabla, porque tiene que eliminar todas las filas en las que aparezca esa persona. </para>
|
||
|
</sect3>
|
||
|
|
||
|
|
||
|
<sect3 id="data-redundyncy">
|
||
|
<title
|
||
|
>Redundancia de datos</title>
|
||
|
<para
|
||
|
>Está directamente relacionado con el problema anterior. En los campos <guilabel
|
||
|
>Nombre y apellidos</guilabel
|
||
|
> y <guilabel
|
||
|
>Dirección</guilabel
|
||
|
> se han introducido varias veces los mismos datos. Esto es algo habitual en las hojas de cálculo, una forma poco eficiente de almacenar los datos, porque la base de datos crecería innecesariamente, por lo que necesitaría más recursos de computación (datos de mayor tamaño y un menor tiempo de acceso). </para>
|
||
|
<para
|
||
|
>¿Cómo puede solucionar estos problemas con una base de datos? Puede dividir la información en unidades de menor tamaño creando la tabla adicional <emphasis
|
||
|
>Personas</emphasis
|
||
|
>, con sólo dos columnas: <guilabel
|
||
|
>Nombre y apellidos</guilabel
|
||
|
> y <guilabel
|
||
|
>Dirección</guilabel
|
||
|
>: </para>
|
||
|
|
||
|
<para
|
||
|
><emphasis
|
||
|
>Tabla <guilabel
|
||
|
>Personas</guilabel
|
||
|
></emphasis
|
||
|
></para>
|
||
|
<informaltable>
|
||
|
<tgroup cols="2">
|
||
|
<tbody>
|
||
|
<row>
|
||
|
<entry
|
||
|
><emphasis
|
||
|
>Nombre y apellidos</emphasis
|
||
|
></entry>
|
||
|
<entry
|
||
|
><emphasis
|
||
|
>Dirección</emphasis
|
||
|
></entry>
|
||
|
</row>
|
||
|
<row>
|
||
|
<entry
|
||
|
>María Ejemplo</entry>
|
||
|
<entry
|
||
|
>Calle Larga 1, Córdoba</entry>
|
||
|
</row>
|
||
|
<row>
|
||
|
<entry
|
||
|
>Adán Prueba</entry>
|
||
|
<entry
|
||
|
>Paseo Marítimo 5, Mérida</entry>
|
||
|
</row>
|
||
|
</tbody>
|
||
|
</tgroup>
|
||
|
</informaltable>
|
||
|
|
||
|
<para
|
||
|
>Cada fila de la tabla <guilabel
|
||
|
>Personas</guilabel
|
||
|
> se corresponde con una <emphasis
|
||
|
>única persona</emphasis
|
||
|
>. La tabla <guilabel
|
||
|
>Contactos</guilabel
|
||
|
> está relacionada desde ahora con la tabla <guilabel
|
||
|
>Personas</guilabel
|
||
|
>. </para>
|
||
|
|
||
|
</sect3>
|
||
|
|
||
|
<sect3 id="data-integrity-and-validity">
|
||
|
<title
|
||
|
>Integridad y validación de datos</title>
|
||
|
<para
|
||
|
>Fíjese en la forma de introducir los datos en los campos <guilabel
|
||
|
>Nombre y apellidos</guilabel
|
||
|
> y <guilabel
|
||
|
>Dirección</guilabel
|
||
|
>. La gente que introduce los datos puede cometer errores, a veces incluso neglicencias. En nuestro ejemplo, tenemos una secuencia diferente para introducir el nombre y los apellidos (María Ejemplo y Ejemplo María, Adán y ADÁN) y muchas más formas de introducir la misma dirección. Probablemente pueda pensar en muchas otras formas. </para>
|
||
|
<para
|
||
|
>Los problemas anteriores muestran que, al buscar ⪚ el número telefónico de una persona cuya dirección es «Calle Larga 1, Córdoba», no se obtendrá un resultado completo. Sólo se obtendrá una fila, en lugar de tres. Además, no podrá encontrar todos los números de teléfono cuando busque el valor «María García» en el campo <guilabel
|
||
|
>Nombre y apellidos</guilabel
|
||
|
>, porque «García María» no coincide con «María García». </para>
|
||
|
<para
|
||
|
>¿Cómo puede solucionar estos problemas usando una base de datos? Puede hacerlo cambiando el diseño de la tabla <guilabel
|
||
|
>Personas</guilabel
|
||
|
> por: </para>
|
||
|
<orderedlist>
|
||
|
<listitem
|
||
|
><para
|
||
|
><emphasis
|
||
|
>Dividir los datos</emphasis
|
||
|
> del campo <guilabel
|
||
|
>Nombre y apellidos</guilabel
|
||
|
> en dos campos distintos: <guilabel
|
||
|
>Nombre</guilabel
|
||
|
> y <guilabel
|
||
|
>Apellidos</guilabel
|
||
|
>. </para
|
||
|
></listitem>
|
||
|
<listitem
|
||
|
><para
|
||
|
><emphasis
|
||
|
>Dividir los datos</emphasis
|
||
|
> del campo <guilabel
|
||
|
>Dirección</guilabel
|
||
|
> en tres campos distintos: <guilabel
|
||
|
>Calle</guilabel
|
||
|
>, <guilabel
|
||
|
>Número de la casa</guilabel
|
||
|
> y <guilabel
|
||
|
>Ciudad</guilabel
|
||
|
>. </para
|
||
|
></listitem>
|
||
|
<listitem
|
||
|
><para
|
||
|
><emphasis
|
||
|
>Garantizar la exactitud de los datos:</emphasis
|
||
|
> para asegurarse de que no hay campos vacíos y de que, ⪚, siempre se debe introducir el número de la casa. </para
|
||
|
></listitem>
|
||
|
</orderedlist>
|
||
|
|
||
|
<para
|
||
|
>Una tabla modificada tiene un aspecto parecido a: </para>
|
||
|
|
||
|
<para
|
||
|
><emphasis
|
||
|
>Tabla de personas</emphasis
|
||
|
></para>
|
||
|
<informaltable>
|
||
|
<tgroup cols="5">
|
||
|
<colspec colnum="1" colname="c1"
|
||
|
></colspec>
|
||
|
<colspec colnum="2" colname="c2"
|
||
|
></colspec>
|
||
|
<colspec colnum="3" colname="c3"
|
||
|
></colspec>
|
||
|
<colspec colnum="4" colname="c4"
|
||
|
></colspec>
|
||
|
<colspec colnum="5" colname="c5"
|
||
|
></colspec>
|
||
|
<tbody>
|
||
|
<row>
|
||
|
<entry
|
||
|
><emphasis
|
||
|
>Nombre</emphasis
|
||
|
></entry>
|
||
|
<entry
|
||
|
><emphasis
|
||
|
>Apellidos</emphasis
|
||
|
></entry>
|
||
|
<entry
|
||
|
><emphasis
|
||
|
>Calle</emphasis
|
||
|
></entry>
|
||
|
<entry
|
||
|
><emphasis
|
||
|
>Número de la casa</emphasis
|
||
|
></entry>
|
||
|
<entry
|
||
|
><emphasis
|
||
|
>Ciudad</emphasis
|
||
|
></entry>
|
||
|
</row>
|
||
|
<row>
|
||
|
<entry
|
||
|
>Juan</entry>
|
||
|
<entry
|
||
|
>Ejemplo</entry>
|
||
|
<entry
|
||
|
>Calle Larga</entry>
|
||
|
<entry
|
||
|
>1</entry>
|
||
|
<entry
|
||
|
>Córdoba</entry>
|
||
|
</row>
|
||
|
<row>
|
||
|
<entry
|
||
|
>Adán</entry>
|
||
|
<entry
|
||
|
>Prueba</entry>
|
||
|
<entry
|
||
|
>Paseo Marítimo</entry>
|
||
|
<entry
|
||
|
>5</entry>
|
||
|
<entry
|
||
|
>Mérida</entry>
|
||
|
</row>
|
||
|
<row>
|
||
|
<entry namest="c1" nameend="c5"
|
||
|
><emphasis
|
||
|
>Condiciones</emphasis
|
||
|
></entry>
|
||
|
</row>
|
||
|
<row>
|
||
|
<entry
|
||
|
>campo obligatorio</entry>
|
||
|
<entry
|
||
|
>campo obligatorio</entry>
|
||
|
<entry
|
||
|
>campo obligatorio</entry>
|
||
|
<entry
|
||
|
>campo obligatorio</entry>
|
||
|
<entry
|
||
|
>campo obligatorio</entry>
|
||
|
</row>
|
||
|
</tbody>
|
||
|
</tgroup>
|
||
|
</informaltable>
|
||
|
|
||
|
<para
|
||
|
>Mediante la condición <guilabel
|
||
|
>campo obligatorio</guilabel
|
||
|
> se puede asegurar que los datos introducidos forman un todo completo. En el caso de otras tablas, por supuesto puede permitir la omisión de algunos campos al introducir los datos. </para>
|
||
|
|
||
|
</sect3>
|
||
|
|
||
|
<sect3 id="data-limiting">
|
||
|
<title
|
||
|
>Limitar la vista de datos</title>
|
||
|
<para
|
||
|
>Una hoja de cálculo muestra todas las líneas y las columnas de la tabla, que a veces puede ser molesto en las hojas enormes de datos. Por supuesto, puede filtrar y ordenar las líneas de la hoja de cálculo, aunque debe extremar los cuidados cuando vaya a hacerlo. Los usuarios de la hoja de cálculo pueden olvidar que la vista de datos se ha filtrado, lo que puede inducir a cometer errores. Por ejemplo, para calcular las sumas puede pensar que tiene 100 filas de datos aunque, de hecho, hay 20 filas ocultas más. </para>
|
||
|
<para
|
||
|
>Si quiere trabajar con un pequeño subconjunto de los datos, ⪚, para enviarlos para que otras personas los puedan editar, puede copiarlos y pegarlos en otra hoja de cálculo y, después de modificarlos, volver a pegar los datos editados en la hoja de cálculo principal. Esta edición «manual» puede provocar la pérdida de datos o cálculos incorrectos. </para>
|
||
|
<para
|
||
|
>Para limitar la <emphasis
|
||
|
>vista de datos</emphasis
|
||
|
>, las aplicaciones de base de datos ofrecen <emphasis
|
||
|
>consultas</emphasis
|
||
|
>, <emphasis
|
||
|
>formularios</emphasis
|
||
|
> e <emphasis
|
||
|
>informes</emphasis
|
||
|
>. </para>
|
||
|
<para
|
||
|
>Una forma muy práctica de limitarla es extender la versión anteriormente descrita de la tabla <guilabel
|
||
|
>Personas</guilabel
|
||
|
>: </para>
|
||
|
|
||
|
<para
|
||
|
><emphasis
|
||
|
>Tabla de personas</emphasis
|
||
|
></para>
|
||
|
<informaltable>
|
||
|
<tgroup cols="6">
|
||
|
<tbody>
|
||
|
<row>
|
||
|
<entry
|
||
|
><emphasis
|
||
|
>Nombre</emphasis
|
||
|
></entry>
|
||
|
<entry
|
||
|
><emphasis
|
||
|
>Apellidos</emphasis
|
||
|
></entry>
|
||
|
<entry
|
||
|
><emphasis
|
||
|
>Calle</emphasis
|
||
|
></entry>
|
||
|
<entry
|
||
|
><emphasis
|
||
|
>Número de la casa</emphasis
|
||
|
></entry>
|
||
|
<entry
|
||
|
><emphasis
|
||
|
>Ciudad</emphasis
|
||
|
></entry>
|
||
|
<entry
|
||
|
><emphasis
|
||
|
>Sueldo</emphasis
|
||
|
></entry>
|
||
|
</row>
|
||
|
<row>
|
||
|
<entry
|
||
|
>Juan</entry>
|
||
|
<entry
|
||
|
>Ejemplo</entry>
|
||
|
<entry
|
||
|
>Calle Larga</entry>
|
||
|
<entry
|
||
|
>1</entry>
|
||
|
<entry
|
||
|
>Córdoba</entry>
|
||
|
<entry
|
||
|
>2300</entry>
|
||
|
</row>
|
||
|
<row>
|
||
|
<entry
|
||
|
>Adán</entry>
|
||
|
<entry
|
||
|
>Prueba</entry>
|
||
|
<entry
|
||
|
>Paseo Marítimo</entry>
|
||
|
<entry
|
||
|
>5</entry>
|
||
|
<entry
|
||
|
>Mérida</entry>
|
||
|
<entry
|
||
|
>1900</entry>
|
||
|
</row>
|
||
|
</tbody>
|
||
|
</tgroup>
|
||
|
</informaltable>
|
||
|
|
||
|
<para
|
||
|
>Asumamos que la nueva columna <guilabel
|
||
|
>Sueldo</guilabel
|
||
|
> contiene datos confidenciales. ¿Cómo puede compartir, ⪚, los detalles del contacto de las personas con sus compañeros de trabajo sin <emphasis
|
||
|
>mostrar su sueldo</emphasis
|
||
|
>? Es posible si <emphasis
|
||
|
>comparte sólo una consulta y no la tabla completa</emphasis
|
||
|
>. La consulta podría seleccionar todas las columnas, salvo la de <guilabel
|
||
|
>Sueldo</guilabel
|
||
|
>. En la jerga de las bases de datos, este tipo de consulta se suele denominar <guilabel
|
||
|
>vista</guilabel
|
||
|
>. </para>
|
||
|
|
||
|
</sect3>
|
||
|
|
||
|
<sect3 id="performance-and-capacity">
|
||
|
<title
|
||
|
>Rendimiento y capacidad</title>
|
||
|
<para
|
||
|
>Su computador probablemente sea bastante rápido. Sin embargo, puede ralentizarse algo si utiliza hojas de cálculo muy grandes. Su baja eficiencia reside en primer lugar en la carencia de índices que aceleren el proceso de búsqueda de los datos (las bases de datos sí que ofrecen índices). Además, si va a realizar operaciones como copiar al portapapeles del sistema, incluso la copia de datos puede resultar problemática en algunas ocasiones. </para>
|
||
|
<para
|
||
|
>Las hojas de cálculo que contienen conjuntos de datos muy grandes tardan mucho tiempo en abrirse. Una hoja de cálculo carga multitud de datos en la memoria del computador al abrirse. La mayor parte de los datos que se cargan posiblemente sean innecesarios y no se utilicen en ese momento. Las bases de datos, a diferencia de las hojas de cálculo, cargan los datos almacenados en el computador sólo cuando los necesita. </para>
|
||
|
<para
|
||
|
>En la mayor parte de las ocasiones, no tendrá que preocuparse de cómo se almacenan los datos en la base de datos. Esto significa que, a diferencia de las hojas de cálculo, las bases de datos no se preocupan de: </para>
|
||
|
<itemizedlist>
|
||
|
<listitem
|
||
|
><para
|
||
|
>La secuencia de las filas, porque puede ordenar las líneas según sus necesidades. Además, puede ver los mismos datos en diversas vistas con diferente ordenación. </para
|
||
|
></listitem>
|
||
|
<listitem
|
||
|
><para
|
||
|
>Lo mismo se aplica también a las columnas (campos) de la tabla. </para
|
||
|
></listitem>
|
||
|
</itemizedlist>
|
||
|
|
||
|
<para
|
||
|
>Junto con <link linkend="data-limiting"
|
||
|
>Limitar la vista de datos</link
|
||
|
> que se describió en el párrafo anterior, estas cualidades suponen una ventaja en las bases de datos. </para>
|
||
|
|
||
|
</sect3>
|
||
|
|
||
|
<sect3 id="convenient-data-entry">
|
||
|
<title
|
||
|
>Entrada de datos</title>
|
||
|
<para
|
||
|
>Las últimas ediciones de las aplicaciones para crear hojas de cálculo le permiten diseñar formularios para introducir datos. Este tipo de formularios son los más utilizados cuando los datos no se pueden visualizar adecuadamente en la vista de tabla, ⪚, si el texto ocupa demasiadas líneas o si todas las columnas no caben en la pantalla. </para>
|
||
|
<para
|
||
|
>En este caso, la forma en la que funciona la hoja de cálculo es problemática. Los campos para la entrada de la base de datos presentan dificultades para ubicarlos en la hoja de cálculo, y suelen ser poco seguros frente a la manipulación (intencionada o accidental) del usuario. </para>
|
||
|
</sect3>
|
||
|
|
||
|
<sect3 id="reports">
|
||
|
<title
|
||
|
>Informes</title>
|
||
|
<para
|
||
|
>Las bases de datos permiten la agrupación, la limitación y la combinación de los datos de un formulario en un <emphasis
|
||
|
>informe</emphasis
|
||
|
>. Las hojas de cálculo se suelen imprimir como pequeñas tablas sin control automático detallado de las divisiones de página y de la disposición de los campos. </para>
|
||
|
</sect3>
|
||
|
|
||
|
<sect3 id="programming">
|
||
|
<title
|
||
|
>Programación</title>
|
||
|
<para
|
||
|
>Las aplicaciones para crear bases de datos suelen ofrecer lenguajes de programación. Las hojas de cálculo más recientes también tienen estas capacidades, pero reducen la capacidad de modificar los campos de la hoja de cálculo y la copia de datos sencilla, sin olvidar la relevancia de las reglas de identidad que se mencionaron en los párrafos anteriores. </para>
|
||
|
<para
|
||
|
>El procesamiento de datos en la hoja de cálculo se suele hacer con una interfaz gráfica de usuario, que puede reducir la velocidad de procesamiento de los datos. Las bases de datos pueden trabajar en segundo plano, sin interfaces de usuario. </para>
|
||
|
</sect3>
|
||
|
|
||
|
<sect3 id="multiuse">
|
||
|
<title
|
||
|
>Usos varios</title>
|
||
|
<para
|
||
|
>Es difícil imaginar varios usos para una hoja de cálculo. Aunque es técnicamente posible en las aplicaciones más recientes, necesita mucha disciplina, atención y conocimientos por parte de los usuarios, algo que no se puede garantizar. </para>
|
||
|
<para
|
||
|
>Una forma clásica de compartir los datos almacenados en una hoja de cálculo con otras personas es enviar un archivo completo (normalmente, por correo electrónico) o proporcionar un archivo de hoja de cálculo en una red de computadores. Esta forma de trabajar en poco eficaz para grupos de muchas personas: los datos que pueden ser necesarios en un momento los puede tener bloqueados otra persona. </para>
|
||
|
<para
|
||
|
>Por otro lado, las bases de datos se han diseñado pensando que puede haber varios usuarios accediendo a los datos. Incluso en la versión más simple, es posible bloquear una fila de un tabla en concreto, lo que hace posible compartir los datos de la tabla. </para>
|
||
|
</sect3>
|
||
|
|
||
|
<sect3 id="security">
|
||
|
<title
|
||
|
>Seguridad</title>
|
||
|
<para
|
||
|
>Asegurar una hoja de cálculo o alguna de sus secciones con una contraseña es una mera actividad simbólica. Después de distribuir un archivo de hoja de cálculo por una red de computadores, la gente puede copiar el archivo e intentar averiguar la contraseña. A veces no es tan difícil, porque la contraseña está almacenada en el mismo archivo que la hoja de cálculo. </para>
|
||
|
<para
|
||
|
>Las características para editar los bloqueos o para bloquear la copia de una hoja de cálculo (o parte de ella) es igual de fácil de eludir. </para>
|
||
|
<para
|
||
|
>Las bases de datos (salvo que estén almacenadas en un archivo en lugar de en un servidor) no suelen estar disponibles en un único archivo. Se suele acceder a ellas usando una red de computadores, normalmente proporcionando un nombre de usuario y una contraseña. Obtiene acceso sólo a esas áreas (tablas, formularios o incluso filas y columnas seleccionadas) que le han sido asignadas para definir los adecuados derechos de acceso. </para>
|
||
|
<para
|
||
|
>Los derechos de acceso pueden afectar a la capacidad para editar datos o para acceder a los datos. Si hay datos a los que no puede acceder, y no se los han enviado al computador, no tiene la posibilidad de hacer una copia de los datos de una forma tan fácil como en los archivos de hoja de cálculo. </para>
|
||
|
|
||
|
</sect3>
|
||
|
</sect2>
|
||
|
</sect1>
|
||
|
|
||
|
<sect1 id="database-design">
|
||
|
<title
|
||
|
>Diseño de la base de datos</title>
|
||
|
<para
|
||
|
>El diseño de bases de datos necesita una planificación adecuada. Por ejemplo, el rediseño de la tabla <guilabel
|
||
|
>Contactos</guilabel
|
||
|
> propuesto en la sección 1.2 puede generar problemas cuando la tabla está rellena de datos. Por ejemplo, cambiar el nombre de un campo es una tarea sencilla, pero dividir el campo <guilabel
|
||
|
>Dirección</guilabel
|
||
|
> en dos campos distintos requiere un trabajo minucioso y tedioso. </para>
|
||
|
<para
|
||
|
>Para evitar este tipo de situaciones, <emphasis
|
||
|
>piense bien el proyecto de base de datos</emphasis
|
||
|
> antes de crearlo en el computador, y antes de que otras personas empiecen a usarlo. Por tanto, invertir algo de tiempo al principio probablemente le ahorre mucho tiempo en el futuro. </para>
|
||
|
</sect1>
|
||
|
|
||
|
<sect1 id="who-needs-a-database">
|
||
|
<title
|
||
|
>¿Quién necesita una base de datos?</title>
|
||
|
<itemizedlist>
|
||
|
<title
|
||
|
>Las hojas de cálculo son adecuadas si:</title>
|
||
|
<listitem
|
||
|
><para
|
||
|
>Tiene unas necesidades limitadas y nunca va a tener que gestionar grandes volúmenes de datos (¿puede pronosticarlo ahora?) </para
|
||
|
></listitem>
|
||
|
<listitem
|
||
|
><para
|
||
|
>No puede adquirir la metodología de construcción de bases de datos. Sin embargo, puede subcontratar esta tarea o usar herramientas más sencillas. </para
|
||
|
></listitem>
|
||
|
<listitem
|
||
|
><para
|
||
|
>Usa hojas de cálculo complejas y no dispone del tiempo o del dinero necesario para pasar a bases de datos. Piense entonces (o consulte con algún experto) si esta situación no le conduce a un callejón sin salida. No cuenta con herramientas mágicas que hagan la transición de sus hojas de cálculo (no importa lo bien que estén hechas) en una base de datos. </para
|
||
|
></listitem>
|
||
|
</itemizedlist>
|
||
|
|
||
|
<itemizedlist>
|
||
|
<title
|
||
|
>Puede considerar el uso de bases de datos si:</title>
|
||
|
<listitem
|
||
|
><para
|
||
|
>Su colección de datos se expande cada semana.</para
|
||
|
></listitem>
|
||
|
<listitem
|
||
|
><para
|
||
|
>A menudo crea hojas de cálculo nuevas, copia los datos de las antiguas y siente que su trabajo se vuelve cada vez más tedioso. En ese caso, el esfuerzo de pasar a las bases de datos está sobradamente pagado. </para
|
||
|
></listitem>
|
||
|
<listitem
|
||
|
><para
|
||
|
>Suele crear informes y estadillos para los que no encajan la vista de tabla de una hoja de cálculo. Entonces, puede considerar pasar a una base de datos con vistas y formularios. </para
|
||
|
></listitem>
|
||
|
</itemizedlist>
|
||
|
</sect1>
|
||
|
|
||
|
<sect1 id="database-software">
|
||
|
<title
|
||
|
>Programas para crear bases de datos</title>
|
||
|
<para
|
||
|
>Acaba de aprender las características generales de las bases de datos sin entrar en mucho detalle de las aplicaciones específicas para diseñarlas. </para>
|
||
|
<para
|
||
|
>Las primeras bases de datos se construyeron para computadores mainframe enormes en los años 60, ⪚, IBM System/360. En ese tiempo, no había PCs, y esas bases de datos necesitaban personal altamente cualificado. Aunque el hardware de los computadores antiguos era poco fiable, era mucho más lento y tenía menos capacidad de almacenamiento, una característica de las bases de datos antiguas sigue resultando muy atractiva: muchos usuarios podían acceder a los datos mediante una red. </para>
|
||
|
<para
|
||
|
>En los años 70, los científicos formularon la teoría de las bases de datos relacionales (con términos como: <firstterm
|
||
|
>tabla</firstterm
|
||
|
>, <firstterm
|
||
|
>registro</firstterm
|
||
|
>, <firstterm
|
||
|
>columna (campo)</firstterm
|
||
|
> y <firstterm
|
||
|
>cardinalidad</firstterm
|
||
|
>, entre muchos otros). Basándose en esta teoría, se crearon las bases de datos IBM DB2 y Oracle, que se han seguido desarrollando hasta nuestros días. A finales de los 70 se construyeron los primeros PCs. Sus usuarios podían (gradualmente) utilizar muchos tipos de aplicaciones, entre las que se incluyen las de construcción de bases de datos. </para>
|
||
|
<para
|
||
|
>En lo referente a bases de datos enormes para empresas, la situación no ha cambiado: necesitan computadores potentes o complejos llamados <firstterm
|
||
|
>clusters</firstterm
|
||
|
>. Sin embargo, este tema supera los objetivos de este manual. </para>
|
||
|
<para
|
||
|
>El el área de bases de datos «accesibles» con interfaz gráfica de usuario para PCs, puede elegir entre las siguientes: </para>
|
||
|
|
||
|
<itemizedlist>
|
||
|
<listitem
|
||
|
><para
|
||
|
><ulink url="http://www.dbase.com/"
|
||
|
>DBase</ulink
|
||
|
>: una herramienta para operar con bases de datos para DOS, muy popular en los años 80. Los archivos en formato DBase aún se emplean en algunos casos específicos, debido a su simpleza. </para
|
||
|
></listitem>
|
||
|
<listitem
|
||
|
><para
|
||
|
><ulink url="http://msdn.microsoft.com/vfoxpro/productinfo/overview/"
|
||
|
>FoxPro</ulink
|
||
|
>: una aplicación similar a DBase (primeros años de los 90). Microsoft la adquirió y la dotó de un interfaz gráfico de usuario y se utilizó para crear bases de datos en PCs. Este producto aún sigue en el mercado, aunque parece un poco obsoleto. </para
|
||
|
></listitem>
|
||
|
<listitem
|
||
|
><para
|
||
|
><ulink url="http://office.microsoft.com/access/"
|
||
|
>Microsoft Access</ulink
|
||
|
>: Una aplicación para bases de datos (diseño y manipulación de datos mediante una interfaz gráfica) con muchas simplificaciones, que las hacían adecuadas para los principiantes, diseñada a finales de los años 80, basada en una arquitectura de 16 bits. En la actualidad, se sigue ofreciendo este producto y su uso está muy extendido, especialmente en empresas pequeñas, en las que no son requisitos ni la eficiencia ni un sistema multiusuario. </para
|
||
|
></listitem>
|
||
|
<listitem
|
||
|
><para
|
||
|
><ulink url="http://www.filemaker.com/"
|
||
|
>FileMaker</ulink
|
||
|
>: Aplicación popular y muy similar a MS Access por su simplicidad, que funciona en plataformas Windows y Macintosh, publicada en 1985. </para
|
||
|
></listitem>
|
||
|
<listitem
|
||
|
><para
|
||
|
><ulink url="http://www.kexi.pl/"
|
||
|
>&kexi;</ulink
|
||
|
>: Una aplicación multiplataforma (Unix/Linux, Windows, Mac OS X) diseñada en 2003, desarrollada según los principios del software libre, parte del proyecto global <ulink url="http://www.kde.org/"
|
||
|
>K Desktop Environment</ulink
|
||
|
>, &ie; un entorno gráfico para sistemas Unix/Linux. Uno de los participantes más destacados en el desarrollo de &kexi; es la empresa OpenOffice Polonia. </para
|
||
|
></listitem>
|
||
|
</itemizedlist>
|
||
|
|
||
|
</sect1>
|
||
|
|
||
|
</appendix>
|