SQL - Evitar duplicados de un registro asociado y no de una tabla

   
Vista:

Evitar duplicados de un registro asociado y no de una tabla

Publicado por Alejandro (3 intervenciones) el 06/10/2015 16:52:07
Hola.
A ver quien me puede echar una mano con este asunto.
Resulta que tengo 2 tablas una de Socios y otra de cuotas, ambas están relacionadas de tal manera que cada socio tiene vinculada la tabla de cuotas.(fecha de abono, año y canon)
He buscado y rebuscado y no encuentro una solución para evitar duplicados de año por socio. Lo mas que consigo es por toda la tabla y esa forma no me sirve porque cada socio si repite año, es decir) socio 1, año 2015, socio 2 año 2015. y lo que no puede haber es socio 1 año 2015 otra vez.
Espero haberme explicado.
Muchas gracias de antemano.
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

Evitar duplicados de un registro asociado y no de una tabla

Publicado por leonardo_josue (878 intervenciones) el 06/10/2015 22:22:38
Hola Alejandro:

Creo que lo que quieres hacer lo puedes manejar con el concepto de llaves únicas, pero depende del manejador de BD's que estés utilizando. la mayoría de los DBMS's te permiten definir condiciones de unicidad entre uno o más campo, esto quiere decir que sólo puede haber una aparición de la combinación de estos campos. Checa este ejemplo en MySQL:

1
2
3
4
5
6
mysql> CREATE TABLE tabla (id INT(11) NOT NULL AUTO_INCREMENT,
    ->                     socio VARCHAR(20),
    ->                     anio INT(11) UNSIGNED,
    ->                     PRIMARY KEY (id),
    ->                     UNIQUE (socio, anio));
Query OK, 0 rows affected (0.28 sec)

Definimos una tabla con tres campos, una llave primaria ID y una llave única compuesta por (socio y anio), podemos insertar datos así:

1
2
3
4
5
6
mysql> INSERT INTO tabla VALUES
    -> (1, 'socio 1', 2014),
    -> (2, 'socio 1', 2015),
    -> (3, 'socio 2', 2015);
    -> (4, 'socio 1', 2016),
    -> (5, 'socio 2', 2014);

es decir, por un lado puedes tener varias veces a cada socio, pero siempre asociado a un anio distinto. Observa qué es lo que pasa si quieres volver a insertar un socio 1 con anio 2015:

1
2
3
mysql> INSERT INTO tabla VALUES
    -> (6, 'socio 1', 2015);
ERROR 1062 (23000): Duplicate entry 'socio 1-2015' for key 'socio'

es decir, no importa que esté colocando una llave primaria nueva, la combinación para los campos socio y anio YA EXISTE, por lo tanto marca que el registro está duplico y no se permite la inserción.

Dale un vistazo para ver si te sirve.

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

Evitar duplicados de un registro asociado y no de una tabla

Publicado por Alejandro (3 intervenciones) el 06/10/2015 22:51:20
Hola Leo.
Muchísimas gracias por tu ayuda. Lamentablemente me he equivocado de foro, la consulta que hago es referente a acces no se si podrás ayudarme o reformulo la pregunta en el foro correspondiente.
Perdona por las molestias.
Saludos
Alejandro
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

Evitar duplicados de un registro asociado y no de una tabla

Publicado por leonardo_josue (878 intervenciones) el 06/10/2015 22:59:19
Hola de nuevo Alejandro:

El concepto es el mismo, sólo cambia la manera en cómo defines las llaves únicas. Checa esta liga:

http://www.geeksengine.com/article/composite-unique-index-access.html

haz la prueba y nos comentas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar

Evitar duplicados de un registro asociado y no de una tabla

Publicado por Alejandro (3 intervenciones) el 06/10/2015 23:49:32
Hola Leo.
Perfecto!!! he leído el enlace que me enviaste y he hecho varias pruebas y me ha funcionado muy bien.
Mil gracias.

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