Foros del Web » Programando para Internet » PHP »

Estructura de mi base de datos

Estas en el tema de Estructura de mi base de datos en el foro de PHP en Foros del Web. Buena tarde, soy nuevo en el tema de programacion y estoy buscando ayuda en cuanto a mi base de datos que es para mi proyecto ...
  #1 (permalink)  
Antiguo 06/09/2015, 11:58
 
Fecha de Ingreso: septiembre-2015
Mensajes: 3
Antigüedad: 8 años, 7 meses
Puntos: 0
Estructura de mi base de datos

Buena tarde, soy nuevo en el tema de programacion y estoy buscando ayuda en cuanto a mi base de datos que es para mi proyecto final y la idea es simular un banco que cuenta con sus administradores, sus supervisores y sus empleados ademas de sus clientes.

esta es mi base de datos, me pueden dar una opinion en cuanto a su estructura

-- phpMyAdmin SQL Dump
-- version 3.5.1
-- http://www.phpmyadmin.net
--
-- Servidor: localhost
-- Tiempo de generación: 06-09-2015 a las 18:37:24
-- Versión del servidor: 5.5.24-log
-- Versión de PHP: 5.4.3

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Base de datos: `creditos`
--

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `administrativo`
--

CREATE TABLE IF NOT EXISTS `administrativo` (
`nombre_empleado` varchar(20) NOT NULL,
`privilegio` varchar(20) NOT NULL,
`usuario` varchar(15) NOT NULL,
`contraseña` varchar(15) NOT NULL,
PRIMARY KEY (`nombre_empleado`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `capital`
--

CREATE TABLE IF NOT EXISTS `capital` (
`nombre_empleado` varchar(20) NOT NULL,
`fecha` date NOT NULL,
`inversion` smallint(10) NOT NULL,
`prestado` smallint(10) NOT NULL,
`recaudado` smallint(10) NOT NULL,
`gastos` smallint(10) NOT NULL,
`ajuste_a_favor` smallint(10) NOT NULL,
`ajuste_en_contra` smallint(10) NOT NULL,
`caja` smallint(10) NOT NULL,
PRIMARY KEY (`nombre_empleado`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `cliente`
--

CREATE TABLE IF NOT EXISTS `cliente` (
`nombre_cliente` varchar(20) NOT NULL,
`apellido_cliente` varchar(20) NOT NULL,
`direccion_cliente` varchar(50) NOT NULL,
`telefono_cliente` smallint(20) NOT NULL,
`creacion_cliente` date NOT NULL,
PRIMARY KEY (`nombre_cliente`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `cobrador`
--

CREATE TABLE IF NOT EXISTS `cobrador` (
`nombre_empleado` varchar(20) NOT NULL,
`ubicacion` varchar(20) NOT NULL,
PRIMARY KEY (`nombre_empleado`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `gastos`
--

CREATE TABLE IF NOT EXISTS `gastos` (
`nombre_empleado` varchar(20) NOT NULL,
`tipo_gasto` varchar(20) NOT NULL,
`valor_gasto` smallint(10) NOT NULL,
`descripcion` text NOT NULL,
PRIMARY KEY (`nombre_empleado`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `prestamos`
--

CREATE TABLE IF NOT EXISTS `prestamos` (
`nombre_empleado` varchar(20) NOT NULL,
`nombre_cliente` varchar(20) NOT NULL,
`fecha_inicial` date NOT NULL,
`fecha_final` date NOT NULL,
`frecuencia_de_pago` varchar(15) NOT NULL,
`valor_prestamo` smallint(10) NOT NULL,
`numero_cuotas` int(2) NOT NULL,
`porcentaje` int(2) NOT NULL,
`valor_cuota` smallint(10) NOT NULL,
`valor_total_a_pagar` smallint(6) NOT NULL,
PRIMARY KEY (`nombre_empleado`,`nombre_cliente`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `recuados`
--

CREATE TABLE IF NOT EXISTS `recuados` (
`nombre_cliente` varchar(20) NOT NULL,
`valor_total_pagado` smallint(10) NOT NULL,
`saldo_total` smallint(10) NOT NULL,
`valor_pendiente_pago` smallint(10) NOT NULL,
`numero_cuotas_pagadas` int(2) NOT NULL,
`valor_recaudo` smallint(10) NOT NULL,
`total_abonado` smallint(10) NOT NULL,
`cuotas_pendientes_pago` int(2) NOT NULL,
PRIMARY KEY (`nombre_cliente`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `supervisor`
--

CREATE TABLE IF NOT EXISTS `supervisor` (
`nombre_empleado` varchar(20) NOT NULL,
`personas_a_cargo` varchar(20) NOT NULL,
PRIMARY KEY (`nombre_empleado`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

  #2 (permalink)  
Antiguo 07/09/2015, 05:06
Avatar de jpint  
Fecha de Ingreso: junio-2012
Ubicación: Ciudad Real - España
Mensajes: 97
Antigüedad: 11 años, 10 meses
Puntos: 12
Respuesta: Estructura de mi base de datos

Yo te recomendaría que añadieses a todas las tablas un campo identificar entero(INT) y que los utilizaras como PK.
Así puedes utilizar esos indices para relacionar una tabla con otra y te va a funcionar mucho mas rápido que si lo haces con VARCHAR, que te va a ralentizar las búsquedas que el motor de base de datos hace.
  #3 (permalink)  
Antiguo 07/09/2015, 08:04
 
Fecha de Ingreso: septiembre-2015
Mensajes: 3
Antigüedad: 8 años, 7 meses
Puntos: 0
Respuesta: Estructura de mi base de datos

Muchas gracias por la sugerencia; en cuanto a el resto de estructura esta bien? Debo cambiar algo mas?
  #4 (permalink)  
Antiguo 07/09/2015, 08:25
 
Fecha de Ingreso: enero-2013
Mensajes: 176
Antigüedad: 11 años, 3 meses
Puntos: 2
Respuesta: Estructura de mi base de datos

Te diré algunas recomendaciones:

* Las claves primarias siempre deben ser INT ( Identity y autoincremental), no manejes cadenas, por que se supone que las primary key son unicas! y son indices para búsquedas.... por lo tanto no son recomendables los textos.

*En la tabla "capital" tu primary key no puede ser una llave foranea, tu llave foranea es "nombre_empleado" el cual debes cambiar a Id_Empleado ( en base al punto anterior). Y debes crear un indice para ser tu primary key por ejemplo "Id_Capital".

* También te recomendaría crear una sola tabla de usuarios del sistema, (en lugar de administrativos, cobrador) tienen casi los mismos campos podrías manejar:
- Id_usuario (llave primaria)
- Nombre_usuario
- Rol (Aqui definirias si es administrativo o cobrador) (Podrias tener otra tabla "permisos" para controlar que pueden ver en el sistema y que no pueden ver).
-ubicacion
- password
- etc...

* Otra recomendación es que los nombres los trabajes por separado:
campo 1 Nombres
campo 2 Apellido 1
campo 3 Apellido 2

Esto para tener un mayor control, ya que algunos ingresan Apellido 1 Nombre, Apellido 1 Apellido 2 Nombre, Nombre Apellido 1, etc... entonces el formato te complicara busquedas....


POR ULTIMO, PLANTEA BIEN TU BASE DE DATOS PIENSA A FUTURO, PIENSA EN LAS CONSULTAS QUE REQUIERES, EN LAS INSERCIONES, HAS UN SISTEMA MODULAR PARA QUE PUEDAS HACER MODIFICACIONES SIN AFECTAR OTRAS TABLAS...


Espero te sirvan los tips!
__________________
Define tus intereses, se curioso, investiga, comete errores, aprende, practica, mejora, enseña y vuelve a comenzar....
  #5 (permalink)  
Antiguo 07/09/2015, 08:30
 
Fecha de Ingreso: septiembre-2015
Mensajes: 3
Antigüedad: 8 años, 7 meses
Puntos: 0
Respuesta: Estructura de mi base de datos

Amigos muchas gracias por su ayuda y sus buenos comentarios, ya con sus sugerencias todo me esta quedando mas claro ademas de estar aprendiendo.

Etiquetas: estructura, fecha, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:29.