2010-03-23 21 views
8

Ho due tabelle -> Variabili (id, nome) e Variable_Entries (id, var_id, valore).MySQL: vincolo unico su più campi

Desidero che ogni variabile abbia un insieme univoco di voci. Se rendo la voce value unica, una variabile diversa non sarà in grado di avere lo stesso valore che non è giusto.

C'è un modo per rendere la colonna valore univoca per var_id identici?

risposta

9

Sì:

alter table Variable_Entries add unique (var_id, value); 

Ora avete un vincolo univoco in var_id e di valore insieme. In altre parole, nessuna occorrenza di var_id e valore può apparire più di una volta.

+0

grazie, e anche le persone sotto ... Non ho potuto trovare da nessuna parte – Cypher

+0

C'è un modo per far rispettare questo quando si crea la tabella? – puk

+2

potrebbe non essere vogliono sapere, ma per il bene degli altri, 'create table tbl_table ( \t id intero non nullo auto_increment, \t fname varchar (255), lname varchar (255), \t vincolo PRIMARY tbl_table KEY (id), \t unique (fname, lname) ) ' –

0

Aggiungere una chiave univoca di Variable_Entries per i campi combinati var_id/valore.

Inoltre, è necessario utilizzare sempre parole singolari per i nomi di tabelle (utente anziché utenti). Non usare mai caratteri maiuscoli nel nome della tabella, perché ciò ti causerà un INCUBO su diversi sistemi operativi.

+0

Mi chiedo perché dovremmo sempre usare nomi singolari per i nomi di tabella? –

+0

"Dovresti sempre usare parole singolari per i nomi delle tabelle" - Non sono d'accordo. Uso sempre il plurale e so di non essere solo (ActiveRecord, ad esempio, fa lo stesso). –

+0

CakePHP dipende dai plurali per i nomi delle tabelle ... È un commento divertente :) Maiuscolo, anche se ... Sono d'accordo – luigi7up

6

Sì, è possibile creare un composito unique key:

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

Grazie per la parola * composite *, mi ha fatto capire cosa fa. –

Problemi correlati