Está en la página 1de 17

CONSTRUIR UNA BASE DE DATOS

"TALLER MECÁNICO"
18:47 |
Se desea construir una base de datos para la gestión de un taller mecánico que deberá contener la información
referente a los clientes, los vehículos que repara, los mecánicos que trabajan en su taller y los repuestos que se
han utilizado para realizar una determinada reparación.

El funcionamiento del taller es el siguiente:

1. Se registra tanto el cliente como el vehículo que trae al taller para su reparación. Este registro recoge
el DNI, Nombre y Apellidos, Dirección y Teléfono de contacto del cliente. Del vehículo se recogen la
matrícula, el modelo y el color. También se registra la fecha de entrada del vehículo en el taller y su
hora.
2. Una vez registrado, se le asigna un mecánico (libre) que se encargará de evaluar los daños.
3. Posteriormente, este mecánico puede rodearse de otros mecánicos que le ayudarán en la reparación.
4. Los mecánicos que participan en la reparación irán anotando en una hoja de parte todos aquellos
repuestos que les han sido necesarios para llevar a cabo la reparación y el precio de la mano de obra.
5. Una vez terminada la reparación, la hoja de parte se pasa a la persona que mantiene el sistema de
información, la cual introducirá los datos que generarán la correspondiente factura para el cliente. La
factura por tanto, debe contener todos los datos del cliente, los datos del mecánico al que ha sido
asignado y el desglose de qué repuestos se han utilizado con su precio por unidad, el precio de la mano
deobra y el total de la factura. A este total se le aplica el 16% de IVA y además deberá el precio total
de la reparación aparecerá en dólaresy pesos.

CREATE DATABASE TALLER;


USE TALLER
CREATE TABLE IF NOT EXISTs `CLIENTE`(
`RFC` varchar(10) not null PRIMARY KEY,
`Nombre` varchar (60) not null,
`Direccion` varchar (60) not null,
`tel` varchar(10)
)ENGINE = InnoDB;
CREATE TABLE IF NOT EXISTS `MECANICO`(
`Idmec` varchar(10) not null PRIMARY KEY,
`Nombre` varchar (60) not null,
`Direccion` varchar (60) not null,
`tel` varchar(10),
`Costoxhora` DECIMAL(2) not null
)ENGINE = InnoDB;
CREATE TABLE IF NOT EXISTS `VEHICULO`(
`Matricula` varchar (10) not null PRIMARY KEY,
`Modelo` varchar (60) not null,
`Color` varchar (60),
`Fecha_ent` datetime not null,
`Hora_ent` datetime not null,
`RFC` varchar (10) not null,
`Mec` varchar(10) not null,
FOREIGN KEY (`RFC`) REFERENCES `CLIENTE` (`RFC`),
FOREIGN KEY (`Mec`) REFERENCES `MECANICO` (`Idmec`)
)ENGINE = InnoDB;

CREATE TABLE IF NOT EXISTS `REPUESTO`(


`Idrep` varchar(10) not null PRIMARY KEY,
`Descripción` varchar (60) not null,
`CostoUnit` int not null,
`PrecioUnit` int not null
)ENGINE = InnoDB;

CREATE TABLE IF NOT EXISTS `HOJAP`(


`Idhoja` varchar (10) not null PRIMARY KEY,
`concepto` varchar (100) not null,
`Cantidad` int not null,
`Reparacion` varchar(10) not null,
`Idmec` varchar(10) not null,
FOREIGN KEY (`Idmec`) REFERENCES `MECANICO` (`Idmec`),
FOREIGN KEY (`Reparacion`) REFERENCES `REPUESTO` (`Idrep`)
)ENGINE = InnoDB;

CREATE TABLE IF NOT EXISTS `FACTURA`(


`Nofact` varchar(10) not null PRIMARY KEY,
`Fecha` datetime not null,
`Imp_pesos` decimal(2) not null,
`Imp_dol` decimal(2) not null,
`RFC` varchar(10) not null,
`Idhoja` varchar(10) not null,
FOREIGN KEY (`RFC`) REFERENCES CLIENTE (`RFC`),
FOREIGN KEY (`Idhoja`) REFERENCES HOJAP (`Idhoja`)
)ENGINE = InnoDB;
INSERT INTO `CLIENTE` VALUES ('RFLM019890','Moon Light','ECATEPEC','57492608');
INSERT INTO `MECANICO` VALUES
('TTT00012','CARLOS LOPEZ','ATIZAPAN','554545454','50.50'),
('AHHASDHSDS','ANTONIO SANCHEZ','ECATEPEC','26462010','62.50');
SELECT * FROM CLIENTE;

INSERT INTO `CLIENTE` VALUES


('ABCD445512','SRITA_CHERRY','ARAGON','51525857'),
('RDC1101986','RULO DOM','CHICOLOAPAN','58520720');




Publicado por [SRITA.CHERRY]

8 comentarios:

dj-roxa dijo...

Hola Excelente Doc, tienes de casualidad todo el procedimiento de Normalizacion


que puedas compartirlo y el diagrama de E-R

18 de noviembre de 2013, 13:47

Rudolf Javier Sp dijo...


Hermano muchas gracias sigue asi bien explicado

27 de octubre de 2015, 22:01

Alexandra Valdez dijo...

buenaaaaaa!

2 de mayo de 2017, 15:31

Unknown dijo...

PUta madre!!!!!!!

22 de octubre de 2018, 6:53

Ed dijo...

en que programa se lo hace

7 de noviembre de 2018, 13:33

adelberto baldeon dijo...

Genial...

13 de noviembre de 2018, 15:11

Naye Ortiz dijo...

Excelente

27 de febrero de 2019, 13:07

Unknown dijo...

gracias podrías porfa subir la segunda parte cuando se le realiza la interfaz gráfica ,
aplicando los crud ,nuevamente gracias
Crear en Base de Datos MySQL una Tabla
Estado_Vehiculo
Formular una pregunta

Estoy haciendo un programa para la administración de servicios de un taller de mecánica


automotriz, en el hay tablas como: Usuarios, Clientes, Personal, Servicios, Citas, Vehiculos
y ESTADOdeVehiculo y una tabla ternaria que podria llamarse EstadoServicio_RepVehi
(no prestemos atencion en los nombres es solo de ejemplo, lo importante es hacerse la idea)

La pregunta aqui es en ESTADOdeVehiculo esta tabla almacena los datos del estado de
cada uno de los vehiculos al llegar al taller como si tiene gasolina, tiene todos sus cauchos,
le falta un retrovisor, le sirve el aire acondicionado, tiene todas las luces, etc etc etc... En
este caso que es lo correcto o mas factible? hacer la tabla con cada uno de esos campos o
hacer un campo algo asi como TEXT para que se traiga todo en un formato de texto??

En la ventana de diseño en java tengo la ventana con una tabla y varios checkbox para
afirmar si tiene o no cada uno de los campos.. pero no se como almacenarlos correctamente
en la base de datos... si individualmente como varchar o boolean o como text todo junto en
un especie de reporte :S es algo que a la final no creo que usen las personas que administren
un taller pero creo que seria buena idea colocar esas opciones :S

Espero se me entienda la pregunta y disculpen si es algo confusa..

Aqui va una imagen de como llevo la base de datos :v tengo una duda con el uso del
FOREIGN KEY Uds lo ven bien? colocare tambien el codigo n.n

Codigo SQL:

-- MySQL Workbench Forward Engineering Lo hice con ayuda de


Workbench pero cambie la manera de las foraneas ya que como las coloca
workbench no conozco muy bien el uso de los CONSTRAINS y ese poco de
puntitos...

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;


SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';

-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------

-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
CREATE DATABASE IF NOT EXISTS `tallermecanico_hd` DEFAULT CHARACTER SET
utf8 ;
USE `tallermecanico_hd` ;

-- -----------------------------------------------------
-- Table `mydb`.`a_usuarios`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `tallermecanico_hd`.`a_usuarios` (
`nombre_u` INT NOT NULL,
`contra_u` VARCHAR(10) NOT NULL,
`permiso` VARCHAR(15) NOT NULL,
PRIMARY KEY (`nombre_u`))
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `mydb`.`b_personal`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `tallermecanico_hd`.`b_personal` (
`cedula_p` INT NOT NULL,
`nombre_p` VARCHAR(25) NOT NULL,
`apellido_p` VARCHAR(25) NULL,
`telefono_p` INT NULL,
`email_p` VARCHAR(45) NULL,
`dir_p` VARCHAR(255) NULL,
`cargo_p` VARCHAR(45) NULL,
`f_contrato` DATE NULL,
`status_p` VARCHAR(45) NULL,
PRIMARY KEY (`cedula_p`))
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `mydb`.`c_clientes`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `tallermecanico_hd`.`c_clientes` (
`cedula_c` INT NOT NULL,
`nombre_c` VARCHAR(25) NOT NULL,
`apellido_c` VARCHAR(25) NULL,
`telefono_c` INT NOT NULL,
`dir_c` VARCHAR(255) NULL,
`email_c` VARCHAR(45) NULL,
`empresa_c` VARCHAR(45) NULL,
PRIMARY KEY (`cedula_c`))
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `mydb`.`d_servicios`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `tallermecanico_hd`.`d_servicios` (
`cod_serv` INT NOT NULL,
`nomb_serv` VARCHAR(45) NOT NULL,
`descrip_serv` VARCHAR(255) NULL,
PRIMARY KEY (`cod_serv`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`e_vehiculos`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `tallermecanico_hd`.`e_vehiculos` (
`placa` INT NOT NULL,
`marca` VARCHAR(25) NULL,
`modelo` VARCHAR(25) NULL,
`anio` VARCHAR(4) NULL,
`observ` VARCHAR(255) NULL,
`serial` VARCHAR(25) NULL,
`color` VARCHAR(25) NULL,
`puertas` INT,
`motor` VARCHAR(25) NULL,
`transmision` VARCHAR(25) NULL,
`cedula_c` INT NOT NULL,
PRIMARY KEY (`placa`),
FOREIGN KEY (`cedula_c`)REFERENCES `c_clientes` (cedula_c)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `mydb`.`f_citas`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `tallermecanico_hd`.`f_citas` (
`id_cita` INT NOT NULL,
`f_solicitud` DATETIME NULL,
`f_pautada` DATETIME NULL,
`falla_idk` VARCHAR(255) NULL,
`observ_cita` VARCHAR(255) NULL,
`placa` INT NOT NULL,
PRIMARY KEY (`id_cita`),
FOREIGN KEY (`placa`) REFERENCES `e_vehiculos`(placa)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `mydb`.`g_est_vehiculo`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `tallermecanico_hd`.`g_est_vehiculo` (
`cod_estv` INT NOT NULL,
`alarma` VARCHAR(5) NULL,
`espejo_retrov` VARCHAR(5) NULL,
`luces_int` VARCHAR(5) NULL,
`cauchos` VARCHAR(5) NULL,
`cauchorep` VARCHAR(5) NULL,
`faros` VARCHAR(5) NULL,
`obv_estv` VARCHAR(1000) NULL,
`placa` INT NOT NULL,
PRIMARY KEY (`cod_estv`),
FOREIGN KEY (`placa`)REFERENCES `e_vehiculos` (placa)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `mydb`.`x_est_servicios`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `tallermecanico_hd`.`x_est_servicios` (
`f_inicio` DATETIME NOT NULL,
`f_fin` DATETIME NULL,
`resultado_s` VARCHAR(1000) NULL,
`est_result_s` VARCHAR(1000) NULL,
-- fk
`placa` INT NOT NULL,
`cod_serv` INT NOT NULL,
`cedula_p` INT NOT NULL,

PRIMARY KEY (`f_inicio`,`placa`,`cod_serv`,`cedula_p`),


FOREIGN KEY (`placa`)REFERENCES `e_vehiculos` (placa)
ON DELETE CASCADE
ON UPDATE CASCADE,

FOREIGN KEY (`cedula_p`)REFERENCES `b_personal` (cedula_p)


ON DELETE CASCADE
ON UPDATE CASCADE,

FOREIGN KEY (`cod_serv`)REFERENCES `d_servicios`(cod_serv)


ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB;

SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
java sql netbeans phpmyadmin

compartirmejorar esta pregunta

editada el 30 may. 17 a las 19:45

formulada el 18 may. 17 a las 2:25


HeckDan

141214

añade un comentario

3 respuestas
activas más antiguas votos

Mi recomendación es que si vas a necesitar hacer alguna operación estadística o necesitas


saber algo particular con los datos que propones de "gasolina", "cauchos", "retrovisores",
etc., entonces es bueno hacer un campo para cada dato. Si lo único que quieres es leer como
venía el vehículo y entregar ese dato tal y como lo escribiste, entonces un TEXT o un
VARCHAR (x-bytes) te va a funcionar.

Si planeas crear los campos hay que pensar en que dominio actúan esos datos, por ejemplo,
si creas el campo gasolina y tienes manera de cómo medir con cuanta gasolina viene el
coche, entonces es un dominio numérico.

Supongamos que puedes medir la gasolina en mililitros, entonces podrías usar un INT, y
así para 10 litros, se puede guardar 10,000. Como otro ejemplo, el campo que propones
para almacenar si el aire acondicionado estaba funcional cuando llegó el auto, como solo
vas a checar si esta útil o no, puede ser un BOOLEAN o un TINYINT.

Una última recomendación es crear por tu cuenta un texto en prosa, donde escribas los
requerimientos que tiene este taller. Ahí mismo puedes darte mucho cuenta de que
entidades (tablas) vas a necesitar y también te dará una buena idea de los atributos
(campos) de las entidades y de sus relaciones.

Un saludo y espero te sirva.

compartirmejorar esta respuesta

respondida el 18 may. 17 a las 3:18

Abraham Baez

12
 Gracias por tu sugerencia Abraham .. tienes mucha razón creo que me tocara preguntarle
mas a mis profesores e investigar un poco mas como trabajar de esa manera... aunque por
ahora estoy viendo que me tocara usar varchar y que sea un teto informativo que si se
tiene que cambiar se cambie.. y si es Si o No que aparezca la palabra Si o No rellenando el
campo de la tabla :P – HeckDan el 20 may. 17 a las 1:14

añade un comentario
0

Mi recomendación es la siguiente: ¿Qué tanto conocimiento tienes en el manejo de archivos


de texto o de campos de tipo texto? Las bases de datos relacionales fueron creadas para
mejorar la administración de los datos que antes era tediosa con los archivos de texto.

Debes pensar en cálculos estadísticos, relaciones con otras tablas, agrupaciones, resúmenes,
etc.

Los campos de tipo texto están diseñados para texto largos, por ejemplo, correos
electrónicos, opiniones de los clientes, etc.

Si tu ventana tiene casillas de verificación lo más recomendable es una tabla dedicada al


estado del vehículo con cada atributo como campo y de tipo booleano. Si por ejemplo
requieres almacenar la cantidad de gasolina que sea de tipo numérico.

Al final la tabla te facilita las cosas y los cálculos estadísticos. ¿Te imaginas lo complicado
de relacionar tu tabla estadoVehiculo en formato texto con otras tablas?

Te recomendaría archivos de texto para un análisis de datos pero en Python, no con Java.

Además, Java no tiene muchas funciones que faciliten la manipulación de campos y de


archivos de tipo texto.

compartirmejorar esta respuesta

editada el 18 may. 17 a las 4:15

respondida el 18 may. 17 a las 4:09

Jaime Hernandez

105
 Gracias Jaime! tienes razón haré caso a tu sugerencia! Pero no entendi muy bien lo de la
tabla dedicada con cada atributo como campo y de tippo booleano ... el profesor me ha
dicho que por ahora no me preocupe tanto por eso >.< que respuesta de parte del profe..
aunque me alivia un poco a la vez me deja con la duda. – HeckDan el 20 may. 17 a las 1:10

añade un comentario
0

Entiendo que la tabla Citas es la tabla donde se registrarán las visitas de los vehículos al
taller (No le encontraría sentido si lo agregas en la tabla Vechiculos).

Viéndolo de esa forma, yo consideraría poner los estados en que llegan los autos al taller en
la tabla Citas, ya que necesitamos saber el estado de los autos en cada una de las citas
(Esto estaría bien si los estados ya están definidos, y si no son muchos). (Ver primera
imagen)

Si creas una tabla aparte para el estado creo que no quedaría muy bien, porque la relación
será de uno a uno, ya que todos los vehículos no llegan en el mismo estado, excluyendo
algunos casos, a menos que los estados definidos, sean muchos (aunque para eso también
tienes la tercera opción) (Ver Segunda imagen).
Y si los estados, se definen dinámicamente sería mejor tener una tabla para definir los
estados, según se requiera, y una tabla pivote para relacionarlo con la cita.

Yo me quedaría con la primera opción, pero depende de lo que necesites.

compartirmejorar esta respuesta

editada el 18 may. 17 a las 5:25

ArtEze

2,286102661

respondida el 18 may. 17 a las 4:22

Erick Joel Acuña Cotrina

11

 Wow amigo con gráficos y todos muchas gracias por tu ayuda pero de veras no he
entendido mucho tu idea y comprendo que mi culpa por no explicar bien como va la base
de datos como puedo hacer para montar un modelo de mas o menos lo pensado? el
modelo relacional me refiero saco la imagen y la publico eso podria ayudar cierto? aunque
eso podria generar mas dudas porque seguro tiene fallas >.< – HeckDan el 20 may. 17 a las
1:16

  Sería una buena idea que compartieras el modelo de tu BD para poder saber, según tu
modelo, donde sería el mejor lugar para agregar el estado. En los ejemplos que compartí contigo
incluí algunas tablas que pensé tienen que estar en tu modelo, pero eso no quiere decir que tu
modelo tiene que estar cercano a lo que yo consideré, todos pensamos diferente y tenemos
diversas formas para resolver las cosas. Si tu modelo tienes fallas, no hay problema, todo estamos
para aprender :D – Erick Joel Acuña Cotrina el 24 may. 17 a las 23:38

También podría gustarte