Results 1 to 8 of 8

Thread: Sql-Constraint

  1. #1
    Ensign Hardcore's Avatar
    Join Date
    Sep 2006
    Location
    Modena
    Posts
    3.550

    Default Sql-Constraint

    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?


  2. #2
    Zaider's Avatar
    Join Date
    Jan 2004
    Location
    Nella pianura della nebbia..
    Posts
    8.709

    Default

    Quote Originally Posted by Hardcore View Post
    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)
    gratz.

  3. #3
    Ensign Hardcore's Avatar
    Join Date
    Sep 2006
    Location
    Modena
    Posts
    3.550

    Default

    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?


  4. #4
    Zaider's Avatar
    Join Date
    Jan 2004
    Location
    Nella pianura della nebbia..
    Posts
    8.709

    Default

    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
    gratz.

  5. #5
    Lieutenant Commander Axet's Avatar
    Join Date
    Sep 2003
    Location
    Ginevra
    Posts
    33.807

    Default

    Quote Originally Posted by Zaider View Post
    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

    I'm no hero. Never was. Never will be.
    -----
    Soul of the mind, key to life's ether
    Soul of the lost, withdrawn from its vessel
    May strength be granted so the world might be mended...
    So the world might be mended...

  6. #6
    Zaider's Avatar
    Join Date
    Jan 2004
    Location
    Nella pianura della nebbia..
    Posts
    8.709

    Default

    Quote Originally Posted by Axet View Post
    Ci sono anche i vincoli di n-upla e di dominio eh
    merda è vero... e dopodomani ho l'orale... -.-

    mi sà che non ci arrivo al 90 stavolta.
    gratz.

  7. #7
    Tanek's Avatar
    Join Date
    Apr 2004
    Location
    Milano, Midgard
    Posts
    11.225

    Default

    Quote Originally Posted by Hardcore View Post
    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".

    Tanek™: Game Designer & Algorithm Mastermind, Team Leader & SW Engineer and Dungeon Master!
    "Datte Foco"™ and "Ma KITTESENCULA"™ are registered trademarks of Tanek Entertainment Inc.
    ‎"One of these days, scientists will discover that second X chromosome contains nothing but nonsense and twaddle." - Sheldon Cooper
    Per non dimenticare:
    Spoiler


  8. #8
    Warrant Officer Ladro di anime's Avatar
    Join Date
    Apr 2004
    Location
    Trieste
    Posts
    2.802

    Default

    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
    Last edited by Ladro di anime; 1st July 2009 at 09:16.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
[Output: 69.19 Kb. compressed to 58.62 Kb. by saving 10.58 Kb. (15.29%)]