MySQL - Disparador con create

 
Vista:

Disparador con create

Publicado por eltiolopez (3 intervenciones) el 18/06/2009 02:35:30
Buenas.

Tengo una duda a la hora de crear un disparador, me explico. Lo que quiero hacer es que al insertar un registro en una tabla1, automáticamente se cree una tabla2 nueva que tenga de nombre el contenido de un campo de la tabla1.
Quería hacer esto por medio de un disparador, que hiciese algo como:

CREATE TRIGGER insTabla1 BEFORE INSERT ON tabla1 FOR EACH ROW
BEGIN
CREATE TABLE IF NOT EXISTS NEW.nombreTabla2;
END;

¿Alguien tiene alguna sugerencia? Agradeceria respuestas.
Un saludo,
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Disparador con create

Publicado por Gonzalo GC (339 intervenciones) el 18/06/2009 03:01:38
Si. Un comentario:
Un TRIGGER que haga algo así no tiene sentido. No te olvides que un TRIGGER se ejecuta todas las veces que se inserta, lo que implicaría, con 50 inserciones, tener 50 tablas... ¿CUál es el sentido de esto?
Además, la única forma de implementarlo es por medio no solamente de TRIGGERs, sino también de sentencias preparadas, con todo lo que ello implica.

Sería mejor que te explicaras cuál es el objetivo de esto, para ver si se puede implementar de otra forma...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Disparador con create

Publicado por eltiolopez (3 intervenciones) el 18/06/2009 10:32:01
Antes de nada gracias por tu pronta respuesta.
A ver, así a bote pronto, se me ocurre un posible enunciado, relacionado con una biblioteca, en la que hay varias COLECCIONES. Sin embargo, cada una de estas colecciones es de su padre y de su madre, por ejemplo los campos que tendría una colección de libros, no serían los mismos que una coleccion de periódicos.
Por tanto, había pensado en un diseño más o menos como el que sigue:

Tabla colecciones:
+-------------------------+
+ id_+_nombre___+
+-------------------------+
+ 0_+_libros ____ +
+ 1_+_periodicos_+
+-------------------------+

Tabla libros (3 campos):
+-----------------------------------------+
+ id_+__titulo___+__autor____+
+-----------------------------------------+
+_0_+_Quijote__+_Cervantes_+
+_1_+_Rimas__+_Becquer___+
+------------------------------------------+

Tabla periodicos (dos campos):
+-------------------------+
+ id_+_nombre___+
+-------------------------+
+_0_+_El Pais___ +
+_1_+_ABC______+
+_2_+_La Razon__+
+-------------------------+

No se si se verán claros los dibujitos, espero que sí...
Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Disparador con create

Publicado por Gonzalo GC (339 intervenciones) el 19/06/2009 04:39:48
El tema en un ejemplo como ese, es que es innecesario que un TRIGGER definido en una tabla COLECCION, se ponga a crear una tabla cada vez que encuentra un tipo distinto de colecciones, porque en definitiva lo que está fallando no es la idea sino el análisis del sistema a implementar.
Me explico: Cuando analizas un sistema, entre otras cosas, debes definir el dominio que ciertos datos tienen, es decir dentro de qué rango de valores tiene existencia. Esto permite determinar el conjunto completo de entidades de existencia real o virtual que forman el sistema. En este caso de ejemplo, sería una entidad Colección que posee entidades débiles dependientes como DIario, Libro, Revista, Folleto, etc.
Cuando has definido todas las entidades y sus atributos, recién entonces puedes ponerte a armar todas las tablas, porque en una base, las tablas no se construyen aleatoriamente. Se deben definir lo más preciso posible DESDE EL INICIO, o de lo contrario el modelo no funcionará bien JAMAS.
El hecho que una de esas tablas no se use nunca durante un periodo de tiempo, es irrelevante. Eventualmente será usada.
Incluso, el hecho de que una tabla tenga siempre un número limitado de registros, también es irrelevante. Esas tablas son usadas para simplificar el funcionamiento porque almacenan información que es constante, y que es más sencillo codificar con IDs (caso cargos de una empresa, asignaturas de una carrera, ciudades de un país). Es más fácil recordar un código que permitir que un inútil tipee mal una denominación, y el registro no aparezca nunca en la consulta porque le falta o sobra una letra.

Sintetizando: Si quieres hacer bien el trabajo, entonces diseña todas las tablas que pueden usarse. No intentes hacerlas de creación dinámica. Es la peor idea para una base de datos (en la universidad te reprobarían sólo por proponerlo).
Piensa esto: Mientras mejor sea el diseño, menos probable será que se deba modificar cuando la base esté en trabajo. No te das una idea de la catástrofe que es modificar una base en funcionamiento, cuando ya tienes miles de registros.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Disparador con create

Publicado por eltiolopez (3 intervenciones) el 19/06/2009 19:57:43
De nuevo 1000 gracias, Gonzalo.

Sé que el diseño este es una chapuza, a mi tampoco me cuadra el crear tablas "dinámicas" a partir de registros de la tabla CATALOGOS, en el ejemplo.

El problema está en que en principio, el diseñador no sabe qué catalogos creará el usuario, ya que es éste el que especifica mediante un formulario qué campos y de qué tipo tiene cada catálogo nuevo. Por tanto, esta es la solución a la que he llegado, que insisto, me parece "la menos mala". Si alguien tiene alguna sugerencia mejor, ya sabe... jeje.

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar