Diseño de una Base de Datos para una tienda de autoservicio. Definiciones Base de datos: Una base de datos (cuya abreviatura es BD) es una entidad en la cual se pueden almacenar datos de manera estructurada, con la menor redundancia posible. Diferentes programas y diferentes usuarios deben poder utilizar estos datos. Por lo tanto, el concepto de base de datos generalmente está relacionado con el de red ya que se debe poder compartir esta información. De allí el término base. "Sistema de información" es el término general utilizado para la estructura global que incluye todos los mecanismos para compartir datos que se han instalado. Base de datos relacional: Se refiere a aquella base de datos que cumple con el modelo relacional, el cual es el modelo más utilizado en la actualidad para implementar bases de datos ya planificadas y permiten establecer interconexiones (relaciones) entre los datos (que están guardados en tablas), y a través de dichas conexiones relacionar los datos de diferentes tablas, de ahí proviene su nombre (modelo relacional). Base de datos integridad referencial: es un sistema de reglas para garantizar que las relaciones entre los registros de tablas relacionadas son válidas y que no se eliminan ni modifican accidentalmente datos relacionados. Puede establecer la integridad referencial cuando se cumplen todas las condiciones siguientes: El campo coincidente de la tabla principal es una clave principal o tiene un índice único. Los campos relacionados tienen el mismo tipo y tamaño de datos. Hay dos excepciones. Un campo Autonumérico puede estar relacionado con un campo Numérico con la propiedad TamañoDelCampo (FieldSize) establecida en Entero Largo, y un campo Autonumérico con la propiedad TamañoDelCampo (FieldSize) establecida en Id. de réplica puede estar relacionado con un campo Numérico con la propiedad TamañoDelCampo (FieldSize) establecida en Id. de réplica. Ambas tablas pertenecen a la misma base de datos de Microsoft Access. Si las tablas son tablas vinculadas, deben ser tablas en el formato de Microsoft Access y debe abrir la base de datos en la que están almacenadas para Gómez Soto Francisco Daniel Diseño Asistido por computadora Diseño de una Base de Datos para una tienda de autoservicio. poder establecer la integridad referencial. La integridad referencial no puede exigirse para tablas vinculadas procedentes de bases de datos en otros formatos. Tabla: se refiere al tipo de modelado de datos, donde se guardan los datos recogidos por un programa. Su estructura general se asemeja a la vista general de un programa de Hoja de cálculo. Las tablas se componen de dos estructuras: Campo: Corresponde al nombre de la columna. Debe ser único y además de tener un tipo de dato asociado. Registro: Corresponde a cada fila que compone la tabla. Allí se componen los datos y los registros. Eventualmente pueden ser nulos en su almacenamiento. En la definición de cada campo, debe existir un nombre único, con su tipo de dato correspondiente. Esto es útil a la hora de manejar varios campos en la tabla, ya que cada nombre de campo debe ser distinto entre sí. A los campos se les puede asignar, además, propiedades especiales que afectan a los registros insertados. El campo puede ser definido como índice o autoincrementable, lo cual permite que los datos de ese campo cambien solos o sean el principal indicar a la hora de ordenar los datos contenidos. Cada tabla creada debe tener un nombre único en la cada Base de Datos, haciéndola accesible mediante su nombre o su seudónimo (Alias) (dependiendo del tipo de base de datos elegida). Campo: es el nombre de la unidad de información. Cada entrada en una base de datos puede tener múltiples campos de diversos tipos. Por ejemplo, un campo de texto llamado 'color favorito', que permite escribirlo, o un menú llamado 'población' que permita escoger de un listado de poblaciones posibles. La combinación de campos diversos nos permitirá recabar toda la información que consideremos relevante sobre los ítems que constituyen la base de datos. Gómez Soto Francisco Daniel Diseño Asistido por computadora Diseño de una Base de Datos para una tienda de autoservicio. Dato: Cada tabla se compone de campos y registros. A pesar de que a primera vista casi la podríamos confundir, existen unas diferencias fundamentales: cada columna en una tabla es un campo y cada fila de una tabla representa un único registro que reúne la información de un elemento de la tabla. Cada campo sólo puede tener un tipo de datos: o sólo texto, o sólo números, etc. Tipos de datos: Cada Sistema de Base de Datos posee tipos de campos que pueden ser similares o diferentes. Entre los más comunes podemos nombrar: Numérico: entre los diferentes tipos de campos numéricos podemos encontrar enteros “sin decimales” y reales “decimales”. Booleanos: poseen dos estados: Verdadero “Si” y Falso “No”. Memos: son campos alfanuméricos de longitud ilimitada. Presentan el inconveniente de no poder ser indexados. Fechas: almacenan fechas facilitando posteriormente su explotación. Almacenar fechas de esta forma posibilita ordenar los registros por fechas o calcular los días entre una fecha y otra. Alfanuméricos: contienen cifras y letras. Presentan una longitud limitada (255 caracteres). Autoincrementables: son campos numéricos enteros que incrementan en una unidad su valor para cada registro incorporado. Su utilidad resulta: Servir de identificador ya que resultan exclusivos de un registro. Gómez Soto Francisco Daniel Diseño Asistido por computadora Diseño de una Base de Datos para una tienda de autoservicio. Diagrama entidad-relación Gómez Soto Francisco Daniel Diseño Asistido por computadora Diseño de una Base de Datos para una tienda de autoservicio. Tabla detalles Campo Id artículo (PK) Descripción Precio Campo Id artículo (PK) Descripción Existencias Entradas Salidas Precios Tipo Entero Char Flotante Inventario Tipo Entero Char Entero Entero Entero Tamaño 10 30 10 Tamaño 10 30 10 10 10 Campo Id venta (PK) Id cliente (FK) Id artículo (FK) Cantidad Descripción Precio Fecha Total de venta Id vendedor (FK) Ventas Tipo Entero Entero Entero Entero Char Flotante Date Flotante Char Campo Id cliente (PK) Nombre Dirección Telefono RFC Cliente Tipo Entero Char Char Char Char Tamaño 10 30 30 12 10 Campo Id vendedor (PK) Nombre Usuario Password Vendedor Tipo Entero Char Char Char Tamaño 10 30 10 10 Gómez Soto Francisco Daniel Tamaño 10 10 10 10 30 10 10 10 Diseño Asistido por computadora Diseño de una Base de Datos para una tienda de autoservicio. Tabla catalogo Gómez Soto Francisco Daniel Diseño Asistido por computadora Diseño de una Base de Datos para una tienda de autoservicio. Diccionario de datos Campo id_articulo descripcion precio existencias entradas salidas id_venta id_cliente Cantidad Fecha Total_venta id_vendedor nombre direccion telefono RFC usuario Password Tamaño 10 30 10 10 10 10 10 10 10 10 10 30 30 12 10 10 10 Gómez Soto Francisco Daniel Tipo de dato Entero Carácter Flotante Entero Entero Entero Entero Entero Entero Fecha Flotante Entero Carácter Carácter Carácter Carácter Carácter Carácter Descripción Identificador para el artículo Breve descripción del artículo Precio correspondiente a un artículo Cantidad de elementos existentes Cantidad de artículos entrantes al inventario Cantidad de artículos salientes del inventario Identificador de venta Identificador para cliente Cantidad de artículos vendidos Fecha en la que se realizó la venta Total de la suma de la venta Identificador de vendedor Nombre del individuo (cliente o empleado) Dirección del cliente Número telefónico del cliente RFC del cliente Usuario que se le asigna a un vendedor Contraseña que se le asigna a un vendedor Diseño Asistido por computadora Diseño de una Base de Datos para una tienda de autoservicio. Scripts Creando Base de datos: CREATE DATABASE tienda; USE tienda; Creando tablas: --- Estructura de tabla para la tabla 'clientes' -CREATE TABLE IF NOT EXISTS clientes ( id_cliente int(10) NOT NULL, nombre char(50) COLLATE latin1_general_ci DEFAULT NULL, direccion char(50) COLLATE latin1_general_ci DEFAULT NULL, telefono char(50) COLLATE latin1_general_ci DEFAULT NULL, RFC char(50) COLLATE latin1_general_ci DEFAULT NULL, PRIMARY KEY (id_cliente) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; -- ---------------------------------------------------------- Estructura de tabla para la tabla 'inventario' -CREATE TABLE IF NOT EXISTS inventario ( id_articulo int(10) NOT NULL, descripcion char(50) COLLATE latin1_general_ci NOT NULL, editorial char(50) COLLATE latin1_general_ci NOT NULL, existencias int(10) NOT NULL, salidas int(10) NOT NULL, PRIMARY KEY (id_articulo) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; -- ---------------------------------------------------------- Estructura de tabla para la tabla 'precios' -CREATE TABLE IF NOT EXISTS precios ( id_articulo int(10) NOT NULL, descripcion char(50) COLLATE latin1_general_ci NOT NULL, precio float NOT NULL, PRIMARY KEY (id_articulo) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; -- ---------------------------------------------------------- Estructura de tabla para la tabla 'vendedores' -CREATE TABLE IF NOT EXISTS vendedores ( id_vendedor int(10) NOT NULL, nombre char(50) COLLATE latin1_general_ci DEFAULT NULL, Gómez Soto Francisco Daniel Diseño Asistido por computadora Diseño de una Base de Datos para una tienda de autoservicio. usuario char(10) COLLATE latin1_general_ci DEFAULT NULL, `password` char(10) COLLATE latin1_general_ci DEFAULT NULL, PRIMARY KEY (id_vendedor) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; -- ---------------------------------------------------------- Estructura de tabla para la tabla 'ventas' -CREATE TABLE IF NOT EXISTS ventas ( id_venta int(10) NOT NULL, id_cliente int(10) NOT NULL, id_articulo int(10) NOT NULL, cantidad int(10) DEFAULT NULL, descripcion char(50) COLLATE latin1_general_ci DEFAULT NULL, precio float DEFAULT NULL, fecha date DEFAULT NULL, total_venta float DEFAULT NULL, id_vendedor int(10) DEFAULT NULL, PRIMARY KEY (id_venta), KEY id_cliente (id_cliente), KEY id_articulo (id_articulo), KEY id_vendedor (id_vendedor), KEY precio (precio) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; CARGA DE DATOS EN TABLA CLIENTES: INSERT INTO tienda.clientes (id_cliente, nombre, direccion, telefono, RFC) VALUES ('1', 'Francisco Gómez', 'Esmeralda 3 Tizayuca Hgo.', '7712345678', 'GOPF880120'), ('2', 'Julian Casablanca', 'Emili Hernadez 10 Tizayuca Hgo.', '7712345679', 'CAPJ840312'); MODIFICACIÓN DE DATOS EN TABLA CLIENTES: UPDATE tienda.clientes SET direccion=’Juarez 15 D.F.’, telefono=’7711561234’ WHERE ID=’1’; MODIFICACIÓN DE DATOS EN TABLA CLIENTES: SELECT FROM tienda.clientes; STORE PROCEDURE USUARIOS: CREATE PROCEDURE Clientes_GetAll AS SELECT id_cliente, nombre FROM tienda.clientes; Gómez Soto Francisco Daniel Diseño Asistido por computadora