Compartir a través de


Diseño de la base de datos Tastrade

Las tareas clave en el diseño de la base de datos fueron:

  • La creación de estructuras de tabla y de relaciones entre tablas.
  • La implementación de la seguridad.
  • El mantenimiento de la integridad de los datos.

La creación de estructuras de tabla y de relaciones entre tablas

El proceso de creación de estructuras de tabla y de relaciones entre tablas de Tastrade se trata en Diseñar bases de datos. Para ver las tablas y las relaciones en la base de datos Tastrade , abra el Diseñador de bases de datos.

Debido a que la entidad central de esta aplicación es un pedido, la tabla involucrada en la mayoría de las relaciones es la tabla Orders (Pedidos). Hay otras entidades que directa o indirectamente admiten un pedido:

  • Un cliente realiza un pedido.
  • Un empleado crea o "toma" un pedido.
  • Un transportista entrega el pedido.
  • Los pedidos contienen elementos de línea que, a su vez, contienen productos.

Hay dos tablas, Suppliers (Proveedores) y Category (Categoría), que admiten la tabla Products (Productos) aunque no proporcionan información directamente para un pedido. La tabla Suppliers es el origen de la tabla de productos, mientras que la tabla Category proporciona información que puede servir para administrar los productos. En Comercial Tasmania, estas entidades son muy significativas. En otras aplicaciones, por ejemplo, una aplicación de administración de inventarios, también lo serían.

Además del diseño lógico de la base de datos, la seguridad y la integridad de los datos son muy importantes a la hora de crear la base de datos.

Implementación de la seguridad

La seguridad de la base de datos implica la restricción del acceso a datos. Los usuarios no autorizados no deberían tener acceso a ningún dato mientras que otros usuarios no deberían tener acceso total a ciertos datos. Por ejemplo, es posible que usted no quiera que el personal que recibe los pedidos pueda modificar la información acerca de empleados o los límites de crédito de clientes.

Para implementar la seguridad, se han agregado dos campos a la tabla Employee (Empleado): Group_ID y Password. Para tener acceso a la información de la base de datos, un usuario tendrá que llenar un formulario de inicio de sesión y proporcionar la contraseña adecuada. Cuando el usuario se conecta, Comercial Tasmania puede determinar el nivel de acceso de dicho usuario a partir del valor del campo Group_ID.

Debido a que hay muchas aplicaciones que cuentan con un formulario de inicio de sesión, se ha creado una clase para dicho formulario: Login en Login.vcx. Esta clase de formularios contiene cuadros de texto para que el usuario escriba un Id. de usuario y una contraseña. Las propiedades de la clase sirven para especificar la tabla y el campo para la contraseña. Para validar la contraseña escrita por el usuario, se llama a código genérico en el evento Click del botón de comando Aceptar. Se establece una propiedad del formulario (uRetVal) una vez el usuario ha escrito la contraseña correcta.

Para esta aplicación se ha creado LoginPicture, una subclase para la clase Login. LoginPicture incluye toda la funcionalidad de la clase Login, más una fotografía del usuario, una descripción escrita del usuario y una indicación para la contraseña. Ninguno de dichos objetos sería útil en un formulario de inicio de sesión fuera del contexto de Comercial Tasmania.

Un formulario de inicio de sesión proporciona un nivel de seguridad en una aplicación independiente, pero, teniendo en cuenta que cualquier usuario con una copia de Visual FoxPro puede abrir la base de datos y ver o modificar los datos fuera de la aplicación, no se puede decir que los datos estén realmente seguros. En un contexto de uso real, se utilizaría seguridad de red o cifrado de datos para aumentar la seguridad. En el contexto de esta aplicación de ejemplo, de todas formas, todos los usuarios de Visual FoxPro deberían tener acceso a los datos desde fuera o desde dentro de la aplicación. En este sentido, los nombres de usuario y las contraseñas de inicio de sesión tienen que ser visibles para cualquier persona que se conecte a la aplicación y la aplicación no codificará los datos.

Mantener la integridad de los datos

La protección de la integridad de los datos implica asegurarse de que los usuarios autorizados no agregarán, modificarán ni eliminarán datos que puedan pertenecer a una base de datos no válida o inadecuada.

La administración de la integridad de los datos a nivel de la base de datos se aplica cuando un usuario está modificando valores mediante los formularios de la aplicación o directamente en una ventana Examinar. Por lo tanto, la integridad de datos, en cuanto a la integridad referencial y al reforzamiento de las reglas comerciales, se lleva a cabo en la base de datos.

Integridad referencial

La integridad referencial se ha implementado en el nivel de base de datos mediante el Generador de integridad referencial. Para todas las tablas primarias de la base de datos, cuando se ha modificado el valor de una tecla, este cambio también se realizará en las tablas secundarias (actualización en cascada). Cuando un usuario elimina un registro en una tabla primaria, también se eliminarán los registros asociados en las tablas secundarias (eliminación en cascada). Los usuarios no pueden eliminar registros en otras tablas primarias si se trata de registros relacionados en una tabla secundaria (restricción en la eliminación). Un usuario no puede insertar registros en tablas secundarias que no coincidan con los registros de las tablas primarias (restricción en la inserción).

Todas y cada una de las tablas de Tastrade (excepto para Order_Line_Items) tiene un campo clave principal. Dado que Visual FoxPro requiere un valor que no sea nulo ni vacío para este campo y que impide, automáticamente, que se escriba un valor repetido en el campo, no es necesario escribir código para impedir la duplicación de claves principales. Para facilitar al usuario su tarea, un procedimiento almacenado, NewID( ), genera un nuevo valor para las claves principales de la mayoría de las tablas. El siguiente valor de clave principal adecuado para cada tabla se almacena en la tabla Setup (Instalación). NewID devuelve este valor y calcula un valor nuevo para la siguiente clave disponible. NewID( ) es el valor predeterminado (establecido en el Diseñador de tablas) de Orders.Order_id, Products.Product_id y otros cambios de claves principales en la base de datos.

Para la tabla Customer (Cliente), sin embargo, no merecería la pena dedicar mucho tiempo y esfuerzo para generar nuevos valores del Id. de cliente para el usuario. El usuario tiene que proporcionar la clave principal para un nuevo registro agregado en el formulario Cliente o Agregar cliente. La clave principal para la tabla Customer es Customer_id. El esquema de denominación para la identificación del cliente se basa en el nombre de la compañía. Por ejemplo, el Id. de cliente para la compañía B's Beverages es BSBEV.

Reglas comerciales

La base de datos Tastrade necesitaba una regla para asegurarse de que no se puede guardar un pedido sin tener, como mínimo, un elemento de línea asociado. El procedimiento almacenado ValOrder( ) administra este requisito. Además, ValOrder( ) confirma que el pedido total no está antes de Max_order_amt del cliente ni a continuación del Min_order_amt del cliente. En Comercial Tasmania, si un total de pedido supera las cantidades mínimas o máximas de un cliente, un cuadro de mensajes ofrecerá al usuario la oportunidad de saltarse la regla. En una situación de datos estricta, no podría permitir a un usuario que se saltara la regla.

ValOrder( ) llama a los procedimientos almacenados RemainingCredit( ) y CalcMinOrdAmount( ). Dado que la base de datos no almacena información acerca de los pedidos pagados o impagados por un cliente, no se puede obtener información acerca del balance actual de un cliente. El procedimiento RemainingCredit( ) presupone que todos los pedidos están pendientes.

Validación de formulario

La validación de formulario implica restringir al usuario el acceso a datos mediante el procedimiento de activar y desactivar los controles adecuados. En el formulario, se establece el almacenamiento optimista de filas en búfer para todos los formularios dependientes de datos. El formulario Entrada de pedidos tiene establecido el almacenamiento optimista de tablas en búfer para la tabla que aparece en la cuadrícula. El almacenamiento optimista de filas y tablas en búfer sirve para recuperar registros cuando los usuarios deciden que no desean guardar los cambios realizados.

Mantenimiento de bases de datos

Para permitir que un usuario vuelva a indizar las tablas y compruebe la validez de la base de datos, se ha agregado a la aplicación el formulario Volver a generar. El formulario Volver a generar utiliza los comandos REINDEX y VALIDATE DATABASE.

A modo de alternativa a la utilización del comando REINDEX, se podría extraer las expresiones del índice mediante las funciones TAG( ) y KEY( ), eliminar todas las etiquetas con DELETE TAG ALL y volver a crear todos los índices mediante el comando INDEX ON. Este método minimizaría el archivo .cdx.

Comentarios a la creación de la base de datos

Durante la programación, se cambiaron algunos de los nombres de tablas y de campos para demostrar la capacidad de nombres largos de Visual FoxPro. Como consecuencia, fue necesario crear de nuevo vistas e índices, así como modificar manualmente la propiedad ControlSource de controles dependientes en formularios e informes.

Después de iniciar la sesión, los usuarios antes tenían que seleccionar una acción de un menú o una pantalla en blanco. En una etapa posterior del proceso de programación, se agregó el campo Startup_action en la tabla User_level. La información de este campo sirve para especificar la parte de la aplicación que habría que ejecutar después de iniciar una sesión.

Hay dos tablas libres (no incluidas en la base de datos) en el proyecto Tastrade: Behindsc y Repolist. Behindsc es la tabla en la que se almacena la Información técnica, donde se describe cómo se ha implementado determinada funcionalidad en la aplicación. No contiene datos para que los utilice la aplicación. Repolist es una tabla en la que se enumeran los informes disponibles, junto con un nombre descriptivo y un tipo para cada registro. Estas tablas son para uso interno de la aplicación; no forman parte de los datos almacenados en la base de datos por el usuario. Se podría haber incluido cualquiera de ellas en la base de datos, pero no se hizo porque trabajan independientemente de los datos almacenados en la base de datos Tastrade.

Vea también

Ejemplos de soluciones | Ejemplo Comercial Tasmania | Creación de la especificación para Comercial Tasmania | Diseño y creación de las clases de Comercial Tasmania | Escribir, comprobar y depurar Comercial Tasmania | Bibliotecas de clases de Comercial Tasmania