2012-05-08 15 views
8

que crea la tabla T1T2 que conecta tablas t1 y t2 de la siguiente manera:Combinación de dos columnas restricción única

CREATE TABLE t1t2(
id integer primary key, 
t1_id integer, 
t2_id integer, 
foreign key(t1_id) references t1(id), 
foreign key(t2_id) references t2(id)); 

¿Es posible definir una restricción (restricción) que permite solamente es único valores de tupla (t1_id, t2_id)? ¿O debería comprobar esto en la aplicación?

Respuesta

14
CREATE UNIQUE INDEX idx_twocols ON t1t2(t1_id, t2_id) 

Probablemente necesite agregar NOT NULL a las declaraciones para cada una de las dos columnas.

Alternativamente, se puede optar por renunciar a la columna de clave principal (si todo lo que lo está utilizando para la singularidad es) y crear la clave principal en la combinación de t1_id y t2_id:

CREATE TABLE t1t2(
t1_id integer NOT NULL, 
t2_id integer NOT NULL, 
PRIMARY KEY (t1_id, t2_id), 
foreign key(t1_id) references t1(id), 
foreign key(t2_id) references t2(id)); 

la clave primaria es un caso especial de un índice ÚNICO. El uso de la PRIMARY KEY compuesta le ahorra una columna y un índice, pero requiere que su aplicación conozca t1_id y t2_id para recuperar una sola fila de la tabla.

+0

No es sólo para la unicidad (necesito la columna de la t1t2.id), pero me interesa en el método alternativo. ¿Podrías mostrar la mesa? Esperaré un tiempo antes de aceptar tener certeza de que esto es correcto, gracias. – xralf

+1

Ver respuesta editada. –

6

Puede agregar una restricción única a su declaración de tabla de creación. No tiene que ser la clave principal.

UNIQUE(t1_id, t2_id), 
0

Usted puede crear su índice principal único con esas opciones para mantener su clave principal y una restricción única SQL Lite New Index option

+0

Si bien este enlace puede responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. – mathielo

Cuestiones relacionadas