Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Novato con las bases de datos

Estas en el tema de Novato con las bases de datos en el foro de Bases de Datos General en Foros del Web. Buenas noches, lo primero deciros que si no fuera por vosotros me volvería loco...jeje todo lo busco en los foros. Bueno os comento mi intento ...
  #1 (permalink)  
Antiguo 17/02/2010, 17:03
 
Fecha de Ingreso: febrero-2010
Mensajes: 5
Antigüedad: 14 años, 2 meses
Puntos: 0
Novato con las bases de datos

Buenas noches, lo primero deciros que si no fuera por vosotros me volvería loco...jeje todo lo busco en los foros.

Bueno os comento mi intento de proyecto, estoy creando pequeña base de datos en Access 2007 para mi empresa. Ésta se dedica al mantenimiento de aire acondicionado en las centrales de telefonica. Tengo un inventario en excell con todas las maquinas de aire con sus caracteristicas segun el edificio, ciudad y pueblo. Solo tengo esa tabla en access.

Id_edicio, Id_maquina, provincia, edificio, sala, marca_maquina, modelo_maquina, potencia.

El problema es que tengo 4000 registros y los datos estan duplicados; os pondré un ejemplo:

Id_edicio, Id_maquina, provincia, edificio, sala, marca_maquina, modelo_maquina
114 2154 almeria roquetas 1240 airdata dellsdf4445
114 2156 almeria roquetas 1240 airdata dellsdf4445
114 21245 almeria roquetas tx hitecsa kkelrekj

El problema principal es, que hay así como 500 edificios y cada uno tiene un id_edicio pero esta duplicado puesto que hay varias salas o varias maquinas en cada sala. No se si me entendeis. Access no me deja crear la clave principal por el id_edicio. Debido a esto, no puedo relacionarla con mas tablas que quiero crear; por ejemplo, asignar el edicio a un tecnico que hace la revision mensual, trimestral o la que proceda. Segun la ruta que proceda asignar unos datos de mantenimiento que hay que hacerle a las maquinas....ejemplo; limpieza de filtros, cambio de correas...en fin..

Quería ver si me pudierais dar alguna idea de hacerlo de otra forma. Ya he probado con un campo autonumerico pero así nose como relaccionar las tablas que quiero crear, puesto que así:

1 114 2154 almeria roquetas 1240 airdata dellsdf4445
2 114 2156 almeria roquetas 1240 airdata dellsdf4445
3 114 21245 almeria roquetas tx hitecsa kkelrekj

--- me separaría id_edificio.


Muchisimas gracias de antemano...espero haberme explicado bien y que me puedar ayudar un poco.

Saludos
  #2 (permalink)  
Antiguo 18/02/2010, 02:41
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Novato con las bases de datos

Ante todo te aconsejo que busques un buen libro de teoria de bases de datos.

Dicho es to vamos a tu problema... si te lees ese libro veras rapidamente que la tabla que tienes no cumple las regals de normalizacion de una base de datos relacional.

Esa tabla se debe dividir en:

Edificios
Id_edicio (PK)
edificio
idProvincia (FK)
...otros...

Provincias
idProvincia (PK)
Provincia

Salas
idSala (PK)
Id_edicio (FK)
Nombre

Marcas
idMarca (PK)
Marca
...otros...


Modelos

idModelo (PK)
idMarca (FK)
Modelo
...otros...

Maquinas
Id_maquina (PK)
idModelo (FK)
idSala (FK)
...otros...

En azul los campos que te faltan.

A base de consultas de agregacion podrias generar esta estructura a partir de la tabla que tienes.

Por ejemplo

Código MySQL:
Ver original
  1. SELECT Id_edicio,edificio,provincia INTO edificios FROM tutabla GROUP BY Id_edicio,edificio,provincia

Tienes una alternativa, que a la larga no es buena. Usar la tabla que tienes como sifuera la tabla Maquinas y claro elegir Id_maquina como PK no Id_edicio. Id_maquina no tiene repeticiones, o no debería.

Quim

Última edición por quimfv; 18/02/2010 a las 02:54
  #3 (permalink)  
Antiguo 18/02/2010, 03:02
 
Fecha de Ingreso: febrero-2010
Mensajes: 5
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Novato con las bases de datos

Muchisimas gracias, me has aclarado bastante el tema, pero el problema fundamental es que la tabla tiene 4000 registros con los campos que te he comentado. Como hay redundancia de datos ¿tengo que ir registro por registro metiendo en las tablas nuevas que me has comentado, o hay alguna otra manera a parte de la de filtrar por id_maquina?



Un saludo
  #4 (permalink)  
Antiguo 18/02/2010, 04:21
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Novato con las bases de datos

No, crea las tablas que te he dicho, las PK las creas autoincrementales, y luego vas haciendo consultas de insercion similares a la que te he mandado para llenarlas.

Vamos por pasos

Edificios, crea la tabla con PK autoincremental y con el siguiente nombre idEdificios, usa esta consulta, la llenará la tabla con los edificios sin repeticiones.

Edificios

idEdificios (PK)
Id_edicio
edificio
Provincia
...otros...

Código MySQL:
Ver original
  1. INSERT INTO edificios (Id_edicio,edificio,provincia)
  2. SELECT Id_edicio,edificio,provincia
  3. FROM tutabla
  4. GROUP BY Id_edicio,edificio,provincia

Modificas tu tabla para agregarle el campo idEdificios (ahora tendras idEdificios y id_edicio) usa la siguiente consulta para llenar el campo con la nueva clave para edificios

Código MySQL:
Ver original
  1. UPDATE tutabla INNER JOIN Edificios
  2. ON tutabla.id_edicio = Edificios.id_edicio
  3. SET tutabla.idEdificios = Edificios.idEdificios;


Creas la tabla Marcas con la PK auto incremental

Código MySQL:
Ver original
  1. INSERT INTO Marcas (marca)
  2. SELECT marca
  3. FROM tutabla
  4. GROUP BY marca

esto llenara la tabla con las Marcas sin repetición y asignara un idMarca a cada una.

Luego modificas tutabla y le agragas un campo llamado idMarca con formato entero largo y usas la siguiente consulta para introducir los id


Código MySQL:
Ver original
  1. UPDATE tutabla INNER JOIN Marcas
  2. ON tutabla.marca = Marcas.marca
  3. SET tutabla.idMarca = Marcas.idMarca;

Ahora ya tenemos lo necesario para crear Modelos, la creas con la PK autoincremental y usas

Código MySQL:
Ver original
  1. INSERT INTO Modelos (idMarca,modelo)
  2. SELECT idMarca,Modelo
  3. FROM tutabla
  4. GROUP BY idmarca,modelo

esto llenara la tabla con los modelos sin repeticiones y les asignará el id...

Ahora debes repetir el proceso para introducir en tutabla el id de los modelos, para luego poder sacar la tabla Maquinas, te dejo a ver si lo consigues (recuerda recuperar idEdificios no id_edicios cuando crees la tabla Salas). Con las provincias serà algo similar....

El cambio de clave para los edificios lo he hecho para poder disfrutar de las ventajas de una clave autoincremental....

Quim

Última edición por quimfv; 18/02/2010 a las 05:55
  #5 (permalink)  
Antiguo 19/02/2010, 08:49
 
Fecha de Ingreso: febrero-2010
Mensajes: 5
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Novato con las bases de datos

Muchas gracias, por las indicaciones, ya despues de 2 dias voy confeccionando esto que poco a poco va teniendo mas color. Hacía tiempo que no recordaba parámetros de las bases de datos y estaba un poco perdido...jeje. Si tuviera alguna duda mas os consultaría.


Muchas gracias, sois lo mejor de internet..


Un saludo

Etiquetas: bases
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 04:21.