2011-04-08 7 views
6

Voglio avere una tabella SQL con due colonne. Uno è una chiave in un'altra tabella, l'altra contiene una stringa letterale. L'idea è che i numeri di telefono possono essere inseriti esattamente (nel qual caso viene utilizzato l'ID nella tabella della rubrica) o come carattere jolly (in cui viene utilizzata la stringa letterale).MySQL: vincolare un insieme di colonne così almeno uno non è NULL

Ciò significa che una colonna nella tabella conterrà un valore e l'altra conterrà un valore NULL.

È possibile vincolare una tabella in modo che una colonna debba avere un valore e l'altra deve essere NULL? Se entrambe le colonne sono NULL o entrambe hanno un valore, la riga non è valida.

Ho la sensazione che MySQL non sia in grado di farlo (dato che non sembra avere una cassetta degli attrezzi completa quando si tratta di vincoli), ma non potrebbe fare male a chiedere.

+0

Questo può aiutare (non * esattamente * lo stesso però): http://stackoverflow.com/questions/4523351/mysql-constraint-two- columns-so-one-of-them-always-are-null – WhyNotHugo

risposta

4

Non sono a conoscenza di un modo per imporre un simile vincolo.

Come soluzione alternativa, è possibile prendere in considerazione due colonne diverse: se si dispone di una colonna per i dati - contenente l'ID della rubrica o la stringa letterale e un'altra colonna per il tipo di dati - "esatta" o "jolly" '-, puoi impostare un vincolo NOT NULL su entrambe le colonne. Uno svantaggio ovvio è che non si può più avere un vincolo FK nella tabella delle rubriche.

+0

Ho intenzione di accettare questo, ma il design attuale che ho scelto è un po 'diverso. Ho invece aggiunto un campo tipo che può essere esatto o carattere jolly e il contenuto del campo Chiave indicherà la rubrica o una nuova tabella jolly, in base al valore del campo tipo. Il tipo e la chiave sono una chiave univoca composta, quindi la chiave può contenere lo stesso valore due volte (una volta per un tasto della rubrica e una volta per una chiave per i caratteri jolly). – GordonM