2010-03-23 18 views
8

Tengo dos tablas -> Variables (id, nombre) y Variable_Entries (id, var_id, value).MySQL: restricción única en campos múltiples

Quiero que cada variable tenga un conjunto único de entradas. Si hago que la entrada de valor sea única, una variable diferente no podrá tener el mismo valor, que no es el correcto.

¿Hay alguna manera de hacer que la columna de valor sea única para var_id's idénticos?

Respuesta

9

Sí:

alter table Variable_Entries add unique (var_id, value); 

Ahora usted tiene una restricción única en todo var_id y el valor en conjunto. En otras palabras, ninguna aparición de var_id y value puede aparecer más de una vez.

+0

gracias, y la gente debajo también-- No pude encontrar esto en ninguna parte – Cypher

+0

¿Hay alguna manera de hacer cumplir esto al crear la tabla? – puk

+2

es posible que no querer saber, sino por el bien de los demás, 'crear tbl_table mesa ( \t Identificación del número entero no AUTO_INCREMENT nula, \t varchar fnombre (255), lname varchar (255), \t Restricción principal tbl_table KEY (id), \t unique (fname, lname) ) ' –

0

Agregue una clave única de Variable_Entries para los campos combinados var_id/value.

Además, siempre debe usar palabras en singular para los nombres de tabla (usuario en lugar de usuarios). Nunca use caracteres en mayúscula en el nombre de la tabla, porque eso le causará una PESADILLA sobre diferentes sistemas operativos.

+0

Me pregunto por qué debemos utilizar siempre nombres singulares para nombres de tabla? –

+0

"Siempre debe usar palabras en singular para los nombres de tablas" - No estoy de acuerdo. Siempre uso el plural, y sé que no estoy solo (ActiveRecord, por ejemplo, hace lo mismo). –

+0

CakePHP depende de los plurales para los nombres de las tablas ... Es un comentario gracioso :) En mayúsculas, aunque ... Estoy de acuerdo – luigi7up

6

Sí, se puede crear una composición unique key:

ALTER TABLE variable_entries ADD UNIQUE (var_id, value); 
+0

Gracias por la palabra * composite *, me hizo entender lo que hace. –

Cuestiones relacionadas