Está en la página 1de 34

Bases de datos (BD)

Una BD es un archivo donde se “anotan” o “registran” otros archivos, como


tablas e índices.

También contiene información adicional sobre los campos de las tablas.

Guardan otra información, que iremos viendo de a poco.

Cuando se “registra” una tabla en una BD, la tabla deja de ser libre y se
convierte en tabla base. Este cambio de tipo permite agregar información
adicional a la tabla, que se guarda en la BD. Por ejemplo, reglas y mensajes
de validación de campos y de registros, títulos de campos, formatos de
campos y valores predeterminados de campos.

Una BD es, en realidad, una tabla con extensión DBC. Tiene campos
predefinidos por VFP.
Para agregar una tabla a una BD, la tabla debe ser libre.

Una tabla no puede pertenecer a más de una BD.

Si una tabla pertenece a BD1 y queremos que pertenezca a BD2:

Primero tenemos que quitarla de BD1 para convertirla en libre.

Después debemos agregarla a BD2.

Cuidado. Cuando quitamos una tabla de una BD, puede perder mucha
información adicional que está en la BD. Esta información puede
referirse a la misma tabla o ser una información referida a la relación de
esa tabla con otra tabla.
Tablas
Una tabla es un archivo cuyo nombre inventa el usuario y cuya extensión
es DBF.
Una tabla está formada por registros.
Cada registro está formado por campos.

Tabla
Registro Registro Registro
Campo Campo Campo Campo Campo Campo Campo Campo Campo
Registros

Todos los registros tienen igual longitud.

Registro Registro Registro Registro y así …

Cada registro tiene un lugar en la secuencia que sirve para identificarlo. Este
identificador se llama número de registro.

Registro 1 Registro 2 Registro 3 Registro 4 y así …


Campos
Cada registro está formado por campos. Cada campo se destina para
contener un dato. Todos los registros tienen el mismo diseño de
campos.

Registro n

Artículo Nombre Precio

Cada campo tiene atributos: nombre, tipo de datos, ancho y decimales.

Nombre Tipo Ancho Decimales


Artículo Carácter 3 -
Nombre Carácter 30 -
Precio Numérico 8 2
La definición de los atributos se hace una sola vez en el Diseñador de
tablas. Esta definición se llama estructura de la tabla, o también
estructura del registro, porque cada registro se ajusta a ella.

Para crear una tabla:

Primero se define la estructura.

Luego se agregan registros con datos concretos.

Para que la tabla exista, debe tener por lo menos la definición estructural.
Si todavía no se le han agregado registros, se dice que está vacía.
Las tablas permiten tres tipos de operaciones con registros:

Alta. Es incorporar un nuevo registro.

Baja. Es eliminar un registro existente. La baja se hace en dos pasos:

Primero se marca el registro a eliminar, lo cual permite


desmarcarlo si cambiamos de opinión.

Luego se lo elimina definitivamente de la tabla.

Cambio. Es modificar el dato de un campo de un registro existente.

Un recurso para dar altas, bajas y cambios es la ventana Examinar. La


ventana Examinar se puede ver de dos formas: en modo Examinar y en
modo Editar.
Modo Examinar. Los campos aparecen uno junto a otro. Cada renglón
es un registro.
Modo Editar. Los campos aparecen uno bajo el otro. Cada banda es un
registro.
Los modos Examinar y Editar son formas de ver los registros.

La forma en que se graban los registros en el disco es uno tras el otro.

Registro 1 Registro 2 Etc.

O, mostrando sus campos:

D01 Banqueta clásica 305.00 D02 Banqueta laqueada 134.00 Etc.


Tipos de tablas
Hay dos tipos de tablas: (a) libres y (b) de base de datos (o tabla base).

Tablas libres. Son la forma más antigua. Toda la definición estructural se


hace en la misma tabla. En el Diseñador de tablas, éstas se ven así:
Tablas de bases de datos (o tablas base). Son más eficientes.
Parte de la definición estructural se guarda en la tabla y parte en
la base de datos. En el Diseñador de tablas, éstas se ven así:
Diseñador de tablas
El diseñador de tablas tiene 3 fichas.

Ficha Campos. Sirve para definir los campos y sus atributos. Cada campo
ocupa un renglón. En las tablas de bases de datos, cada campo tiene más
opciones en la parte inferior de la ficha.

Ficha Índices. Sirve para definir índices por distintos campos. Un índice ordena
virtualmente los registros, sin cambiarlos de lugar en el archivo, es decir, sin
cambiar los números de registro. Cada índice ocupa un renglón. Las tablas libres
usan tres tipos de índice: normal, candidato y único. Las tablas de bases de
datos agregan el tipo principal.

Ficha Tabla. Muestra información sobre la tabla. En las tablas bases, permiten
definir reglas para controlar la validez de los registros.
Índices
Los índices permiten ordenar virtualmente los registros de una tabla.

Para construir un índice, hay que darle un nombre, un tipo y una expresión.

Los índices se guardan en un único archivo, cuyo nombre es el nombre de la


tabla y cuya extensión es CDX.

Si la tabla se llama Artículos.dbf, el archivo de índices se llamará Artículos.cdx.

Si queremos un índice por el campo Artículo, lo podemos llamar Artículo. El


campo Artículo se dice que es la expresión del índice.

Si queremos un índice por el campo Nombre, lo podemos llamar Nombre. El


campo Nombre se dice que es la expresión del índice.

En el archivo de índices Artículos.cdx, entonces, se guardarán los índices


Artículo y Nombre.
Sea que la tabla Artículos tiene los siguientes tres registros:
Artículo Nombre Precio
B35 Silla 100
C42 Cama 200
A18 Mesa 200

Si activamos el índice Artículo, en Si activamos el índice Nombre, en


la ventana Examinar veremos: la ventana Examinar veremos:
Artículo Nombre Precio Artículo Nombre Precio
A18 Mesa 200 C42 Cama 200
B35 Silla 100 A18 Mesa 200
C42 Cama 200 B35 Silla 100

Sólo puede haber un índice activo en un momento dado, o ninguno.

Si no hay un índice activo, los registros se verán en el orden de grabación,


es decir, de acuerdo al número de registro.
Tipos de índices
Los tipos de índices son normal, único, candidato y principal.

Para entenderlos, conviene saber qué son entradas de índice. Una entrada
de índice es como un renglón de un cuaderno donde se registra información
sobre un registro de la tabla. No todos los registros tienen entrada en el
índice, porque eso depende del tipo de índice.

Índice normal. Todos los registros de la tabla tienen entradas en el índice.

Creemos el índice normal Precio por el campo Precio. Luego activemos ese
índice y veamos la tabla en la ventana Examinar.

Artículo Nombre Precio


B35 Silla 100
C42 Cama 200
A18 Mesa 200
Índice único. Los registros con igual valor en la expresión de índice tienen
entrada una sola vez en el índice.

Creemos el índice único Precio por el campo Precio. Luego activemos ese
índice y veamos la tabla en la ventana Examinar.

Artículo Nombre Precio


B35 Silla 100
C42 Cama 200

El artículo con precio 200 es C42, porque fue el primero que se encontró al
crear el índice.

Un índice único sirve para saber cuántos precios distintos hay.


Índice candidato. Cada registro de la tabla tiene su entrada en el índice,
pero el índice controla que en la tabla no se repitan valores en la expresión
del índice. Si se da esta situación, se produce el error “Se ha violado la
unicidad del índice”.

El que haya tantas entradas como registros, entonces, se debe al


impedimento de duplicar valores en el campo usado como expresión del
índice.

En la tabla Artículos, podríamos crear índices candidatos por Artículo y


por Nombre, porque sus valores no se repiten. Pero no podríamos crear
un índice candidato por Precio, porque se repite el valor 200.

Una tabla puede tener los índices candidatos que se necesiten.

Índice principal. Funciona como los índices candidatos, pero una tabla
puede tener un solo índice principal.
Expresión de índice

La expresión de un índice puede ser el campo por el cual se construye el


índice.

Pero si nos limitáramos a campos, no podríamos indexar por otros


conceptos. Por ejemplo, sea la tabla Resumen con los totales mensuales
de ventas y costos.

Mes Venta Costo


1 125.000 75.000
2 48.000 31.000
Etc. Etc. Etc.

Si queremos un índice llamado Ganancia, por lo ganado en cada


mes, deberemos usar la expresión Venta – Costo.
Sea la tabla Alumnos, con los campos Matrícula, Nombre, Carrera, etc.

Matrícula Nombre Carrera


00001 García, Juan 13
00025 Lucero, Mercedes 1
00032 Sarmiento, Raúl 15
00567 Moreno, Alberto 13
09021 Figueroa, Luis 1

Para crear un índice por Carrera y Nombre, debemos usar la expresión


str(Carrera,2)+Nombre. Parece complicado, pero veremos que no lo es.
Si activamos este índice, la tabla se verá:

Matrícula Nombre Carrera


09021 Figueroa, Luis 1
00025 Lucero, Mercedes 1
00001 García, Juan 13
00567 Moreno, Alberto 13
00032 Sarmiento, Raúl 15
Campos Memo

En la tabla, cada campo tiene un ancho. Ningún contenido puede superar


ese ancho.

A veces, sin embargo, se necesitan contenidos extensos que varían de


un registro a otro, como las historias clínicas de los pacientes o las
observaciones sobre la conducta de los empleados.

Una historia clínica puede tener un texto de miles de caracteres. El ancho


máximo de un campo de caracteres, adecuado para texto, es 254.

Pero queremos guardar la historia clínica de cada paciente en el registro


que le corresponde en la tabla. ¿Cómo solucionar este problema?

Para ello existen los campos memo.


Un campo memo tiene ancho 4 en la tabla.

Acá se guarda un número, como si fuera una llamada a una nota de pie de
página en un libro.

El equivalente a la nota de pie de página se desarrolla en otro archivo,


asociado a la tabla, cuyo nombre es el de la tabla y cuya extensión es FPT.
Este archivo se crea automáticamente al definir el primer campo memo en el
Diseñador de tablas.

Este archivo permite que la nota no tenga límites en cuando a extensión.

Cuando un campo memo de un registro contiene una llamada, en la tabla no


se ve este número, porque es binario y difícil de ver, sino la palabra Memo,
con M mayúscula.

Si un campo memo de un registro no contiene una llamada, se ve la palabra


memo, con m minúscula.
Para trabajar con un campo memo, se da doble clic donde dice memo o
Memo. Esto abre una ventana de edición para introducir o modificar el texto
de la nota.

Para ir guardando el contenido del campo memo se usa Archivo –


Guardar. Nunca se abrirá el diálogo Guardar como, porque ya existe el
archivo FPT donde se guardará el contenido.

Cuando se termina el trabajo de edición, se sale de la ventana de edición


con Archivo – Cerrar.

Para guardar y salir de la ventana de edición en una sola operación, se usa


Ctrl + W.

Para eliminar todo el contenido del campo memo, se selecciona el texto, se


lo elimina y se pulsa Ctrl + W. En la tabla se visualizará ese campo como
memo, con m minúscula, porque no tiene contenido.
Diseñador de bases de datos
Muestra tablas, relaciones y vistas. Tiene el siguiente aspecto:
Cursores. Las tablas y vistas se ven como cursores. Un cursor es
una ventanita que muestra los campos e índices de las tablas y los
campos de las vistas. Un cursor se puede mover y cambiar de
tamaño. Si el contenido no se ve en su totalidad, aparece una barra
de desplazamiento vertical.

Relaciones. Una relación es un vínculo entre dos tablas.

En una BD, las relaciones tienen las siguientes características:

Son permanentes. Existen mientras no se las destruya.

Sirven para definir reglas de integridad referencial.


Las relaciones permanentes se trazan arrastrando de un índice
principal o candidato de una tabla a un índice de cualquier tipo de
otra tabla. La tabla de partida se llama madre, principal o parent. La
tabla de llegada se llama hija, secundaria o child.

El índice de partida debe ser principal o candidato.

Si el índice de llegada es principal o candidato, la relación se dice de


uno a uno y se representa 1 – 1.

Si el índice de llegada es normal o único, la relación se dice de uno a


varios y se representa 1 – N.
Integridad referencial (IR)
El buen diseño de tablas distribuye la información de un cliente, proveedor,
alumno, etc., entre varias tablas.

Por ejemplo, los datos referidos al cliente como persona (código de cliente,
nombre, domicilio, teléfono, CUIT, etc.), se colocan en el registro de una
tabla. Si hay 100 clientes, habrá 100 registros.

Los datos referidos a las compras de un cliente se colocan en uno o más


registros de otra u otras tablas (código de cliente, artículo, precio,
cantidad). Para unir estos registros con el registro del cliente, se usa el
código de cliente.

Aunque esté en varias tablas, la información del cliente es un todo. Esto exige
cuidar que la información parcializada de las distintas tablas sea coherente y
no se pierda ninguna parte.

De esto se ocupa la integridad referencial, que usa reglas para controlar las
altas, bajas y cambios de registros.
IR. Reglas para cambios en la clave de la tabla madre

No se refieren al cambio de cualquier campo, sino del campo que une


ambas tablas, como el código de cliente en el ejemplo. Se dice que este
campo es la clave de la unión.

Si cambiamos la clave de un cliente en la tabla madre, corremos el riesgo de


romper la integridad de información del cliente. La ruptura se dará cuando
ese cliente haya realizado compras.

Cascada. Cuando se cambia la clave de un registro en la tabla madre, se


cambia automáticamente igual clave en los registros de la tabla hija. Por
ejemplo, si cambiamos la clave 125 por 300 de un cliente en la tabla madre,
automáticamente todas las compras del cliente 125 cambian a 300 en la
tabla hija. Si cambiamos el domicilio del cliente en la tabla madre, esta regla
no se aplica, porque el domicilio no es clave.
Restringir. Impide cambiar la clave un registro en la tabla madre si tiene
registros con igual clave en la tabla hija. Por ejemplo, si el cliente 125
tiene registros en la tabla hija, no se podrá cambiar esta clave.

Ignorar. Permite cambiar la clave de un registro en la tabla madre sin


tener en cuenta si tiene o no registros con igual clave en la tabla hija. Es,
en realidad, la carencia de regla. Esta carencia puede provocar la
disociación de la integridad de la información, con resultados caóticos.

Por ejemplo, si cambiamos la clave del cliente 125 por 300 en la tabla
madre, se disociarán los registros de compras con clave 125 en la tabla
hija, que ahora se referirán a un cliente inexistente.
IR. Reglas para bajas de registros en la tabla madre
Se refieren a marcar un registro para destruir en la tabla madre. Como
este registro tiene una clave, puede haber registros con igual clave en
la tabla hija. Esto debe ser controlado.

Cascada. Si se marca un registro para destruir en la tabla madre, se marcan


automáticamente los registros con igual clave en la tabla hija. Pero si se
desmarca el registro en la tabla madre, no se produce ningún efecto en la
tabla hija.

Por ejemplo, si se marca para destruir el registro con clave 125 en la tabla
madre, todos los registros con clave 125 en la tabla hija se marcan
automáticamente.

Si luego se eliminan físicamente los registros marcados, se perderá


definitivamente toda la información sobre el cliente 125.
Restringir. Impide marcar en la tabla madre un registro con una clave que
existe en registros de la tabla hija. La regla no se opone a marcar registros
de la tabla madre cuyas claves no existen en la tabla hija.

Por ejemplo, si el cliente 125 tiene registros de compras, no podremos


marcarlo para destruir, de modo que nunca podremos eliminar la historia
completa de tal cliente.

Para eliminar toda la historia del cliente 125, debemos usar otro
procedimiento: primero habrá que eliminar sus registros en la tabla hija y
después eliminar el registro de la tabla madre.

Ignorar. Permite marcar un registro de la tabla madre, sin tener en


cuenta si tiene o no registros con igual clave en la tabla hija. Es una
carencia de regla, que puede provocar caos.

Por ejemplo, si marco para destruir el cliente 125 en la tabla madre y


luego lo elimino definitivamente, en la tabla hija quedarán compras del
cliente 125 que ya no existe en la madre.
IR. Reglas para altas de registros en la tabla hija
Se refieren a altas de registros en la hija, que deben tener una clave. Lo
lógico es que tal clave exista en un registro de la madre, para que haya
integridad de información. Si esto no sucediera, sería un error, situación que
trata de controlar la regla Restringir.

Restringir. Impide dar de alta un registro en la hija con una clave que no
exista en la madre.

Por ejemplo, no puedo dar de alta una compra del cliente 950, si tal
cliente no está definido en la madre.

La regla controla otra situación: sin necesidad de dar una alta, no


podríamos cambiar la clave 125 a 300 de una compra, si no existe un
cliente 300 en la madre.
Ignorar. Permite dar altas de registros en la hija, sin tener en cuenta si
hay o no un registro con igual clave en la madre. Es la carencia de regla,
que puede provocar información no íntegra.

Por ejemplo, se puede dar de alta a una compra con clave 950, exista o
no un cliente con esa clave en la madre.

Tampoco se controla la segunda situación: se puede cambiar una clave en


un registro de la tabla hija sin considerar lo que pasa en la tabla madre.

Por ejemplo, podremos cambiar una compra del cliente 125 por 950,
exista o no un cliente 950 en la tabla madre.
Resumiendo, las reglas de integridad referencial son:

Tabla Movimiento Cascada Ignorar Restringir


Madre Cambios X X X
Bajas X X X
Hija Altas --- X X

Regla mnemotécnica: Madre baja cambió a hija alta.

Madre: Baja, Cambio

Hija: Alta