Newsgroup: it.comp.software.database
Titolo: Valori nulli su campi in chiave alternative univoche

Salve a tutti!
Utilizzo SQL Server, ma vorrei realizzare un'applicazione multiDb che possa 
andare anche su Oracle e DB II.
Avrei l'esigenza di creare delle chiavi univoche non primarie i cui campi 
accettano il valore NULL. Con SQL Server ho sperimentato che la cosa è 
possibile, ma vorrei sapere se si può fare la stessa cosa anche con DB II e 
Oracle.
Qualcuno saprebbe darmi qualche utile indicazione?
Grazie
Ciao
Cricca 

 Oracle.
Interessa anche a me, dato che la tua prima affermazione mi lascia 
alquanto perplesso.
Anzi, la cosa e' fattibile anche con MySQL, Postgrest e Firebird ??
Chiedo lumi a chi usa questi DB, perche' se esiste la possibilita' di 
inserire un valore NULL in una chiave univoca IMHO sarebbe un 
grossissimo bug.
Alla prossima.
	MAX

Riporto l'esempio che ho fatto con SQL Server
NomeTabella
Campo1 (PK)
Campo2
Campo3
Campo2 e Campo3 compongono una chiave alternativa univoca
Questo set di record viene accettato:
Campo1    Campo2    Campo3
1                B                C
2                B                NULL
3                NULL        C
4                NULL        NULL
5                D                NULL
6                NULL        E
ora se cerco di inserire un record con i valori di Campo2 e Campo3 
esattamente identici a uno dei sei già presenti, viene emesso il messaggio 
di errore di chiave univoca duplicata.
Potete provare se avete SQL Server (io ho provato con 2000)
Ciao
Cricca 

Cricca ha scritto:

Azz, allora tutto il discorso cade.
Praticamente e' giusto che funzioni cosi'.
Non puoi e non devi inserire due valori uguali se queste fanno parte di 
una chiave tantopiu' univoca anche se composta.
Il concetto di univocita' e' che serve a trovare uno e uno solo degli 
innumerevoli record presenti in un DB.
Praticamente se inserissi il campo1 7 con campo2 = NULL e campo3 = NULL 
sarebbe esattamente = al record 4 ed entrambi non sarebbero univoci.
Magari utilizzando gli indici sarebbe possibile, ma non ci metto la mano 
sul fuoco in quanto non li ho mai utilizzati.
Alla prossima.
	MAX
Mannaggia anche al "more included text than new text" che mi obbliga ad 
aggiungere degli spazi.

Forse non mi sono spiegato bene!
SQL Server, per quanto riguarda le chiavi alternative univoche si comporta 
come nell'esempio riportato nel messaggio precedente (sperimentato).
Vorrei sapere Oracle e DBII si comportano nello stesso modo, o hanno 
comportamenti differenti?
Ciao
Cricca 


In Oracle, e penso anche altrove, le chiavi primarie sono uniche e NOT
NULL, quindi non basta l'unicità per fare una chiave primaria.
Vedi cmq l'esempio:
RUDY@hillrudy > create table unica (a int unique);
Table created.
RUDY@hillrudy > insert into unica values (1);
1 row created.
RUDY@hillrudy > /
insert into unica values (1)
*
ERROR at line 1:
ORA-00001: unique constraint (RUDY.SYS_C006724) violated
RUDY@hillrudy > insert into unica values (2);
1 row created.
RUDY@hillrudy > insert into unica values (NULL);
1 row created.
RUDY@hillrudy > select * from unica;
         A
----------
         1
         2
RUDY@hillrudy > set NULL NULL
RUDY@hillrudy > /
         A
----------
         1
         2
NULL
Bye
-- 
Rudy
http://rdbland.blogspot.com/
e-mail a 
email.it

Continuo a non spiegarmi!
Che le chiavi primarie siano univoche e NOT NULL č uno dei fondamenti 
dell'algebra relazionale.
Perň cosě come si possono definire le chiavi primarie, si possono definire 
anche delle chiavi alternative (di solito vengono create per effettuare 
delle ricerche). Queste chiavi alternative possono essere definite univoche 
(quindi gli si puň assegnare una tipica caratteristica che ha una chiave 
primaria), ma senza con questo trasformarle in chiavi primarie.
Ora io vorrei sapere se in Oracle e in DB II queste chiavi alternative, 
definite come univoche, accettano valori nulli.
Scusate la poca chiarezza e la conseguente insistenza.
Grazie
Cricca 

 definite come univoche, accettano valori nulli.
Non ti va bene l'esempio che ti ho fatto?


 chiave primaria), ma senza con questo trasformarle in chiavi primarie.
Questo passaggio mi sembra ambiguo, e forse da questo nasce il
fraintendimento: le chiavi alternative DEVONO essere definite
univoche e not null, perché non è un attributo solo della chiave
primaria, ma di tutte le chiavi.