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

0voto

steven comentado

que cosa es un trigger?

0voto

ShamiiCooper comentado

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 Puntos3330

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!

1voto

magarzon comentado

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.

0voto

pedrourday comentado

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!

1voto

ShamiiCooper comentado

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 !

0voto

Leonardo-Tadei comentado

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...

0voto

ShamiiCooper comentado

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 ! (=

0voto

Leonardo-Tadei comentado

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.

Otras Preguntas y Respuestas


...

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

Conecta