Duda tablas MyISAM como se hace diagrama entida relacion

Iniciado por sionoo, 15 Mayo 2010, 21:17 PM

0 Miembros y 1 Visitante están viendo este tema.

sionoo

Hola, para un proyecto que tengo que hacer segun la inforamcion que tengo tendre que hacer uso de tres tablas, las tres tipo MyISAM. (Solo se haran consultas e impresion de resultados). En la base de datos no es necesario la FK.

mi duda es si utilizare tablas MyISAM como hago el diagrama entida relacion, si mis tablas no estan relacionadas, las relaciones las hago en las consultas tipo:

...where id_tabla1=id_tabla2; (o con joins).

Algun ejemplo sencillo que me puedan pasar por favor. gracias

Hadess_inf

Pues no habra una relacion definida ... supongo que tu las podras poner con una linea o algo por el estilo, pues MyISAM no tiene IntegridadReferencial.

Saludos.

^Tifa^

Si hay relacion entre estructuras guardadas en Myisam, lo que no se cumple de forma natural es el modelo ACID de las transacciones. Ya que el motor MyISAM obvio estos atributos y funcionalidades para poder mejorar sobremanera las lecturas de registros en tablas y asi el desenvolvimiento final fuese mejor... aunque esto implicara sacrificar el modelo ACID.

Ahora que naturalmente MyISAM no posea esta funcionalidad de proteger la integridad de los datos que se usan para relaciones, se puede hacer un rejuego con la creacion de TRIGGERS para al menos, facilitar que se cumplan ciertos atributos a la hora de actualizar, borrar, eliminar o insertar en una de las tablas 'hijos' pero aunque llegues a controlar estos atributos y funcionen gracias a los TRIGGERS esto no implica que MyISAM protegera la integridad de los datos como tal ante alguna falla repentina o fragmentacion y cosas asi... eso es otro tema, que no se puede manejar con este motor.

SObre como relacionar tablas, puedes usar 1 o 2 o mas campos que te sirvan de indices. Por ejemplo suponte que tiene datos de estudiantes distribuidos en 3 tablas mas o menos asi:

Tabla Usuarios:
ID
nombre
apellidos
direccion

Tabla Telefonos:
ID
telefono
mobil

Tabla Calificacion:
ID
matematica
lenguaje
historia


Estas 3 tablas se relacionan por el campo ID el cual debe corresponder siempre en las 3 tablas. Puedes ir llenando las tablas acorde vayas insertando datos o puedes crear TRIGGERS que manejen que cuando se reciba datos se inserten en las 3 tablas (esto ya es opcional), y finalmente si quieres saber por ejemplo los telefonos del alumno cuyo ID = 30 harias:

SELECT telefono, nombres, apellidos FROM Telefonos  INNER JOIN Using(ID) WHERE ID = 30

Mas o menos por ahi va la cosa...

sionoo

#3
Gracias por responder tan rapido, pero mas bien mi duda es simplemente si la estructura de las tablas es esta

tabla1 estado:
id_estado (PK)
nombre
ubicacion
etc

tabla2 departamento:
id_departamento (PK)
id_estado
direccion
etc

Lo que pasa es que la estructura de las tablas ya esta solo debo continuarlo y como veen el id_estado se encuentra tanto como en la tabla estados (PK) y en la tabla departamento,  pero como las tablas seran MyISAM entonces obiamente el id_estado dentro de la tabla departamentos no se toma como clave foranea (FK)

Hay es donde esta mi duda, si no la tomo como FK (al ser MyISAM) como represento las relaciones en el daigrama entidad relacion o tan solo por ser MyISAM las tablas no se representa en un diagrama.

Mi diagrama lo tengo asi, pero no estoy seguro si lo debo incluir o no por la restriccion de que las tablas myisam no se relacionan entre si o ¿estoy en un error desde hay?.

Bueno les adjunto mi diagrama (ma bien el boseto hecho en paint).


^Tifa^

Vamos a ver, vuelvo y explico que aparentemente no se me entendio...

El modelo entidad-relacion no tiene explicitamente que ir unido de las funcionalidades que proporciona un motor transaccional como es InnoDB, y tampoco tiene que cumplirse que la data se protega contra violaciones de transacciones. Tienes que aprender a separar un concepto del otro, entidad-relacion no es lo mismo que transaccion... ten eso pendiente muy muy pendiente (tu profesor debio explicarte esto).

Ahora, una FK (llave foranea) es un atributo (constraint) que existe en los motores que soportan el modelo ACID (motores transaccionales) estos atributos sirven para evitar que surgan algunas condiciones que puedan afectar el orden preestablecido de los campos que se estan relacionando (una proteccion) pero vuelvo y te rectifico, esta funcionalidad NO TIENE NADA QUE VER CON EL MODELO ENTIDAD-RELACION.

Una cosa no es lo mismo que la otra. Perfectamente puedes aplicar el modelo entidad-relacion (que dicho sea de paso lo haz hecho con tu ejemplo mostrado tanto del diagrama como de las tablas) pero estas un poco confundido, porque asumes que como MyISAM no es transaccional y no protege de forma natural que alguien actualize, elimine, inserte, etc.. y que dicho cambio de forma automatica no suceda en las tablas hijos.. ya estas dando por hecho que MyISAM no soporta ningun tipo de relacion... y vuelvo y te repito la funcionalidad de controlar que estas cosas ocurren NO TIENEN QUE VER con lo que se te esta peticionando, ni violan en ningun aspecto el modelo entidad-relacion.

Entidad-relacion es unicamente, buscar la manera de relacionar una entidad con otra.. en este caso id_estado es una entidad de la tabla estado y tambien es una entidad de la tabla departamento, tu designaste que la relacion entre esas dos tablas sera ese campo, es como el ejemplo que expuse de los estudiantes si yo quiero relacionar 3 tablas con distintos registros de estudiantes... como lo hago? por un ID que podria ser su matricula, esto es un modelo para estructurar tablas, que en dicho modelo se cumplan condiciones de proteccion de datos no tiene absolutamente nada que ver con lo que estas confundiendo.

Como te dije previamente, si te preocupa sobremanera la violacion de datos en MyISAM porque dicha tabla no es transaccional (llamese violacion de datos que puedas actualizar, borrar, etc un registro de una tabla padre y esto no actualize la tabla hijo) esto puedes controlarlo con TRIGGERS... pero no puedo introducirte a TRIGGERS puesto que para entenderlo, tienes que familiarizarte un poquito mas con el tema de las relaciones.


sionoo

ok
muchas gracias Tifa en serio por la paciencia  ::)