View Full Version : Sql-Constraint
Hardcore
30th June 2009, 19:13
Non riesco a capire il senso di Constraint, premesso che sto utilizzando MS Sql server 2005, da quel che ho capito con constraint inserisco un vincolo di qualche tipo a cui do un nome per una tabella.
Ma perchè non posso dare due constraint con lo stesso nome a due tabele differenti? cioè constraint opera sulla tabella ma il nome deve essere unico in tutto il db?
Zaider
30th June 2009, 19:22
Non riesco a capire il senso di Constraint, premesso che sto utilizzando MS Sql server 2005, da quel che ho capito con constraint inserisco un vincolo di qualche tipo a cui do un nome per una tabella.
Ma perchè non posso dare due constraint con lo stesso nome a due tabele differenti? cioè constraint opera sulla tabella ma il nome deve essere unico in tutto il db?
esistono 2 vincoli, chiave primaria e chiave secondaria (primary e foreign key)
Quando modifichi una tabella aggiungendo un vincolo " alter table add constraint nomevincolo tipovincolo attributo" devi nominare il vincolo perchè unico, perchè a livello di struttura del db và a collegare delle tabelle, se fosse possibile nominare 2 vincoli diversi allo stesso modo avresti 2 relazioni con lo stesso nome oppure 2 tabelle con la stessa chiave primaria (pur avendo nome diverso l'attributo che funge da tale)
Hardcore
30th June 2009, 19:45
ok ma se invece di scrivere constraint nomevincolo vincolo
faccio tipo
create table studenti (
Codice_Fiscale varchar(50) PrimaryKey
nome varchar(50) Not Null
cognome varchar(50) Not Null
)
il vincolo viene gestito dal dbms a cui viene assegnato un nome per i cazzi suoi?
Zaider
30th June 2009, 19:49
Se non ricordo male in questo caso al vincolo viene assegnato un nome automatico del tipo nometabella.nomeattributo , ma non vorrei dire una cazzata.
Cmq di sicuro in fase di create table tu non lo devi mettere il nome
Axet
30th June 2009, 20:10
esistono 2 vincoli, chiave primaria e chiave secondaria (primary e foreign key)
Quando modifichi una tabella aggiungendo un vincolo " alter table add constraint nomevincolo tipovincolo attributo" devi nominare il vincolo perchè unico, perchè a livello di struttura del db và a collegare delle tabelle, se fosse possibile nominare 2 vincoli diversi allo stesso modo avresti 2 relazioni con lo stesso nome oppure 2 tabelle con la stessa chiave primaria (pur avendo nome diverso l'attributo che funge da tale)
Ci sono anche i vincoli di n-upla e di dominio eh :look:
Zaider
30th June 2009, 20:21
Ci sono anche i vincoli di n-upla e di dominio eh :look:
merda è vero... e dopodomani ho l'orale... -.-
mi sà che non ci arrivo al 90 stavolta.
Tanek
30th June 2009, 21:01
ok ma se invece di scrivere constraint nomevincolo vincolo
faccio tipo
create table studenti (
Codice_Fiscale varchar(50) PrimaryKey
nome varchar(50) Not Null
cognome varchar(50) Not Null
)
il vincolo viene gestito dal dbms a cui viene assegnato un nome per i cazzi suoi?
Si, in Oracle tipicamente avrai un nome del tipo SYS_xxxxx, infatti è buona norma dargli sempre un nome (per esempio NOMETABELLA_PK per le pk o NOMETABELLA_R01 per le foreign key o NOMETABELLA_C01 per i vincoli di check) in modo tale che puoi riferirti ad essa senza doverla "cercare".
Ladro di anime
1st July 2009, 09:13
Non gli puoi dare lo stesso nome perchè viene gestito con un nome univoco e viene gestito con un nome univoco perchè quando viene generato un errore sulla chiave, ti spara fuori il nome della chiave su cui si è generato l'errore.
Ti piacerebbe andare a capire dove sta il problema se hai dei nomi uguali?
SQL> insert into tab_tipo_mastros values (1,'aaa');
insert into tab_tipo_mastros values (1,'aaa')
*
ERRORE alla riga 1:
ORA-00001: violata restrizione di unicità (PROVA.TTM1_PK)
SQL> insert into tab_mastros values (111,'aaa','N',9);
insert into tab_mastros values (111,'aaa','N',9)
*
ERRORE alla riga 1:
ORA-02291: restrizione di integrità violata (PROVA.TM1_TTM1_FK) - chiave
madre non trovata
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.