entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Problema con trigger

Buenas, tengo una tabla articulos y una articulosXautor, y lo que estoy intentando hacer es que cada vez que se inserte un articulo en la tabla articulos, tamb se inserte en la tabla articulosXautor su respectivo codigo de articulo y el codigo de autor. Pero no consigo hacerlo, no lo inserta y no me tira ningun error. El trigger es este:

CREATE TRIGGER addArtXautor ON [dbo].[Articulos]
AFTER INSERT
AS
INSERT INTO ArtXautor(CodArticulo_AxA, CodAutor_AxA)
SELECT CodArticulo_A, CodAutor_A
FROM Inserted
GO

Alguna ayuda?
Gracias ! :D

steven comentado Ene 18

que cosa es un trigger?

ShamiiCooper comentado Ene 19

Es una función dentro de la dbo que se desencadena cuando hay algún movimiento en alguna tabla de la base(INSERT, UPDATE, DELETE..)

1 Respuesta

4votos

pedrourday Puntos1800

Hola ShamiiCooper!

No es necesario un trigger, porque tener una tabla artículos y otra artículosXautor evidencia un claro error de normalización.
Lo lógico sería: tener una tabla artículos y otra autores. La tabla artículos tiene la clave primaria con el código de articulo y una clave extranjera con el código de autor. La tabla autores tiene la clave primaria con el código de autor. Si lo que deseas es listar los artículos por autor, en la consulta tenes que unir las tablas artículos y autores.

Saludos!

magarzon comentado Ene 18

Te he votado positivo, porque generalmente esto es correcto, pero ¿qué pasa si tengo un artículo con más de un autor (relación muchos a muchos)?

En ese caso sí que tendría sentido la tabla articulosXautor (aunque yo no utilizaría nunca un trigger en ningún caso, toda esta "magia" hecha en base de datos y no en el código al final pasa factura en los mantenimientos)

No parece el caso, pero siempre hay que tener todo previsto.

pedrourday comentado Ene 18

Hola magarzon! Existe la manera de hacerlo sin romper la normalización. En el caso de una relación muchos a muchos, tendrías ademas una tabla para la relación, es decir, una tabla autores_artículos que tiene 2 claves extranjeras, código_articulo y código_autor y la clave primaria que estará formada por las 2 claves extranjeras. Las tablas artículos y autores no tendrían claves extranjeras porque ambas están relacionadas con la tabla autores_artículos.
Pero esto hace las cosas más complicadas cuando hay que hacer consultas entre todas esas tablas debido a los JOIN de SQL.
A mi me gusta hacerlo manualmente sin usar SQL JOIN. Mi manera es haciendo varias consultas SQL simples en la que el resultado de una se utiliza en la siguiente. Pero no se si eso tiene alguna desventaja.
En definitiva, no se que conviene más.

De todos modos, gracias por votar positivo.

Saludos!

ShamiiCooper comentado Ene 18

Gracias a ambos, no sólo pude arreglar mi base de datos, sino que también corregí unos conceptos que tenía erróneos, o no muy claros.
Saludos !

Leonardo-Tadei comentado Ene 18

Yo por la pregunta, siempre había asumido que un autor puede tener varios artículos, y que un artículo puede ser escrito por varios autores, con lo que la Normalización indica que hacen falta 3 tablas: Autores, Articulos y AutorArticulo para almacenar la relación.

Es un caso de manual de una relación muchos a muchos...

ShamiiCooper comentado Ene 19

Hola, había pensado hacerlo así a la primera pero después me puse a pensar que no voy a agregar libros escritos por varios autores asique sería "complicarme" medio al pedo. Aclaro que es un proyecto para la facultad, no hace falta que sea tan real.
Saludos ! (=

Leonardo-Tadei comentado Ene 19

Si los artículos pueden ser solamente de 1 autor, entonces son solo 2 tablas: una de Autores y otra de Artículos, en la que hay un id_autor como referencia.

Entonces, cada vez que se inserta un registro con un Artículo, uno de los campos será el ID del autor, y tampoco hace falta un trigger.

Saludos cordiales!

Por favor, accede o regístrate para responder a esta pregunta.

¿Conoces alguien que puede responder?
¡Comparte esta pregunta!


Otras Preguntas y Respuestas


Actividad Reciente

...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta