Domanda

Quindi ho questa tabella con una chiave composita, in fondo 'userID' - 'data' deve essere univoco (vedere la mia altra domanda tabella SQL -? fila semi-unico )

Comunque, mi chiedevo se era possibile per rendere questo entra in vigore solo quando userID non è pari a zero? Con questo voglio dire, 'userID' - 'data' deve essere univoco per userids diversi da zero

?

O sono abbaiare contro l'albero sbagliato?

Grazie
Mala

È stato utile?

Soluzione

vincoli SQL si applicano ad ogni riga della tabella. Non si può fare di loro condizione in base a determinati valori di dati.

Tuttavia, se si potesse utilizzare NULL invece di zero, è possibile aggirare il vincolo unico. Un vincolo univoco consente a più voci che si sono NULL. La ragione è che l'unicità significa nessuna due possono esistere valori uguali. Uguaglianza significa value1 = value2 deve essere vero. Ma in SQL, NULL = NULL è sconosciuto , non è vero.

CREATE TABLE MyTable (id SERIAL PRIMARY KEY, userid INT, data VARCHAR(64));

INSERT INTO MyTable (userid, data) VALUES (   1, 'foo');
INSERT INTO MyTable (userid, data) VALUES (   1, 'bar');
INSERT INTO MyTable (userid, data) VALUES (NULL, 'baz');

Fin qui tutto bene, ora si potrebbe pensare le seguenti dichiarazioni violerebbe il vincolo univoco, ma non è così:

INSERT INTO MyTable (userid, data) VALUES (   1, 'baz');
INSERT INTO MyTable (userid, data) VALUES (NULL, 'foo');
INSERT INTO MyTable (userid, data) VALUES (NULL, 'baz');
INSERT INTO MyTable (userid, data) VALUES (NULL, 'baz');
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top