vincular tablas mysql o todo en una?
Hola,
Me sale humo del tarro ya.......
Tengo ya 3 libros...
Y ya manejo insertar tablas y hacer consultas escribiendo en phpadmin los comandos sql etc. (tengo libros de php tambien para más adelante)
hasta tengo instalado phpadmin en mi pc.
Lo más importante me parece es primero hacer la estructura del futuro base de datos.
Lo que no consigo entender es lo de vincular tablas, lo de primary key etc.
Según he leido es mejor no tener toda la información en una tabla, aunque sería lo más fácil claro.
En mi caso pues quiero por ejemplo una tabla con las reservas, otra con las fechas de limpieza, limpiadora y horas echadas de esas reservas. O sea tendría que tener la misma key?
Pero en la tabla de las limpiezas quiero poder tener varias filas para la misma reserva, cuando es mas de 1 semana pues hay más de una limpieza.
Como se haría eso sin ponerlo todo en la tabla principal.
Y más cosas, pero cuando sepa hacer eso el resto será más o menos igual.
Si nno algun buen link que lo explica hablando claro.........leer no es lo mío.
Gracias de antemano
juandelgado
helenp
leer no es lo mío.
Jooooooooooooooder, pues lo tienes chungo : (
De todas formas te comento la manera que tengo yo de pensar en "tablas". Normalmente las tablas lo que hacen es describir objetos "reales", donde cada campo es una de las características de ese objeto. Muchas veces, además necesitamos que esos objetos sean únicos, por lo que les añadimos un identificador o "id". Es su DNI y como él sólo hay uno, para eso sirven los campos autonuméricos.
Imagina que tienes una grupo de empresas que son tuyas (ya te has forrado con esto de la interné) y que fabrican coches.
Por un lado tienes que tener una tabla para cada tipo de coche. Los campos de esas tablas serán sus propiedades: color, precio, autonomía, airbag, abs, etc. etc
Por otro, tendrás una tabla para cada una de tus fábricas y sus características: número de empleados, localización, teléfono etc, etc.
Ahora, si quieres saber en qué fábrica se hace cada modelo de tus coches, lo mejor es que hagas una tabla que relacione fábricas con coches. En cada fila pondrás el identificador de cada fábrica y el identificador de cada coche. De esa forma, podrás añadir tantas fábricas o coches sin tener que modificar la estructura de las tablas.
¿Algo más claro ahora? Espero que sí.
Te dejo este enlace de BULMA en el que se habla de una forma muy sencilla sobre la normalización de las bases de datos. Para mi es imprescindible, espero que ayude a todo el mundo.
Un saludo!
helenp
Gracias,
Así se entiende el concepto,
ahora ponerlo en práctica.
Intentaré hacer una base de datos ídentico
a ver si me sale.
helenp
Bueno,
Ole, no lo esperaba,
pero he hecho una minibase sobre lo mío con esa normalización,
eso si, metiendo los datos de las filas directamente en las tablas, para ver si funciona,
y haciendo una consulta de limpiezas me sale perfecto, con los datos de la reserva correspondiente,
algunas de las reservas tenian más de 1 limpieza.
Lo que veo dificil es en el momento de insertar otra reserva,
hay que insertar la limpieza más la relación cada vez...???
Al tratarse de un ID no real, es solo un numero, es más ilogico.
Habria que hacer algo como insert tabla, insert otra tabla, related etc o algo así? y tendría que saber el ID de la reserva que es autonúmerico.
El ID de la limpieza tambien lo tengo como autonúmerico.
Con las pocas pruebas que he hecho con access, al escribir en las consultas se actualizaban las tablas, aquí no.
El resto como trabajaís?
En el enlace de la normalización había muchos comentarios, algunos decían muy bien otros lo descualificaban.
Otra cosa, es normal usar estos databases como bases de datos para otros usos que la web en vez de tener una intranet?
Es que mi idea hacer est era para cosas para la web, pero tambien para que otras personas pueda acceder a datos internos desde cualquier pc.
juandelgado
Enaaaaaaaaaaaas,
Ciertamente, como ahora tienes 2 tablas, cada vez que hagas una inserción en alguna de ellas y necesites relacionarla con la otra, tendrás que actualizar 2 tablas, 1 en la que haces el nuevo registro y 2 la de la relación entre tablas.
Sigo con el ejemplo de antes. Imagínate que construyes una fábrica nueva. Pues la das de alta en su correspondiente tabla. Y para definir qué modelos de coche se hacen en ella, sólo tendrás que actualizar la tabla de las relaciones, no la de los coches.
La cosa se complica un poco cuando estás creando la administración, pero tampoco mucho, no creo que te cueste.
helenp
Otra cosa, es normal usar estos databases como bases de datos para otros usos que la web en vez de tener una intranet?
Yo creo que el uso que le vayas a dar no importa. Yo personalmente siempre lo haría con una base de datos "real" y no con Access. Aunque tardes más en desarrollarlo, tedrás algo mucho más potente y versátil.
Ya nos contarás qué tal.
Bye!
helenp
<fieldset>Ciertamente, como ahora tienes 2 tablas, cada vez que hagas una inserción en alguna de ellas y necesites relacionarla con la otra, tendrás que actualizar 2 tablas, 1 en la que haces el nuevo registro y 2 la de la relación entre tablas. </fieldset>
Lo he hecho segun el modelo y son 3 tablas
no paro de darle vueltuas y tendrá que ser así, para poder meter mas de 1 limpieza en algunas.
Asi esta hecho
Tabla 1: reservas: varias columnas exceptuando las limpiezas y una key autoincrementable.
Tabla 2: Limpiezas: columna fechas limpieza y key autoincrementable.
Tabla 3: Relaciones. key autoincrementable y columnas relacionreservas con su ID y relacionlimpieza con su respective ID.
O sea en el momento de insertar una reserva tendría que mirar primero que ID tiene la ultima reserva y limpieza para poder hacer la relacion, o insertar la limpieza y la reserva y posteriormente mirar y hacer la relacion.
O eso se podría automizar mediante PHP?
Eso es lo que veo poco práctico a la hora de trabajar, y ya no te digo cuando haga lo mismo con otras cosas como los que quieren un taxi etc.
Lo que he hecho veo ahora en el link es el nivel 4, mas compleja varios con varios...
quiza me bastaría con nivel 3, aunque alli pasa lo mismo, para meter algo en la tabla 2 hay que saber el Key de tabla 1, que en mi caso no es algo real sino autonúmerico...
juandelgado
Vale, perdona, tienes razón, son 3 tablas, me refería a 2 tablas con "chicha" ñ_ñ
En la tabla de las relaciones te sobra un autoIndex, porque normalmente no vas a necesitar identificar unívocamente (creo que es la primera vez en mi vida que necesito utilizar esta palabra) las relaciones. Te suele bastar con que cumplan su labor de relacionar las otras 2 tablas.
Desde luego la gracia de esto es que te hagas una interface en PHP o cualquier lenguaje de servidor para que no tengas que meter los registros a mano en la bd, eso suele generar bastantes errores.
Si, por ejemplo, tienes que asignar limpiadoras a una habitación, ya deberías tener las habitaciones y las limpiadoras dadas de alta en sus respectivas tablas. Luego sólo tienes que dar de alta la relación.
Suerte que al final lo consigues seguro!
helenp
Gracias voy a quitar el autoindex.
<fieldset>Desde luego la gracia de esto es que te hagas una interface en PHP o cualquier lenguaje de servidor para que no tengas que meter los registros a mano en la bd</fieldset>
Ya he probado algunas cosas con php anteriormente, como insertar, select etc. Asi que habría que hacer como paginas webs hechas con formularios por ejemplo.
Pero como se podría saber en esa pagina web el key de la reserva que le corresponda para hacer la relación en el mismo instante.
Eso se podría hacer de alguna manera automática?
O habría que poner un select en la misma pagina que el formulario para poder rellenarla correctamente? Como select ultima reserva y ultima limpieza para saber sus keys?
Es que es dificil pensar el resultado final, al no haber visto nunca ni base de datos ni interfaz nunca.