|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Sep 2006
Messaggi: 475
|
Valore chiave primaria database
Ho creato un piccolo db access con il relativo programmino in vb.net. Nel normale utilizzo di un db vengono aggiunti e rimossi record. Ora il punto è questo: c'è un modo per far sì che nel momento in cui viene aggiunto un record il valore della sua chiave primaria possa assumere un valore appartenuto precedentemente ad un altro record? Nel mio caso la chiave primaria è un contatore.
Grazie
__________________
Fisso: Case Chieftec BA01BBB - Corsair TX-750W - ASUS P5N-E SLI - Intel Core Duo E8400 Cooled by Cooler Master V8 - 4Gb RAM (4x1GB) 800 Corsair XMS2 - ASUS EN8800GTS 512MB - 2xHD Hitachi 160gb in Raid 0 & 1HD Hitachi 320gb - Monitor LG L1919S - Tastiera&Mouse Logitech G11 & MX-518 - Volante Logitech Wingman Formula EX + Atomic Drive&Station |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Oct 2002
Messaggi: 305
|
Se il tuo campo è un contatore, allora non puoi farci nulla. Io avevo un problema simile, l'ho risolto usando un intero al posto del contatore e gestendo autonomamente l'assegnazione della chiave primaria.
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Sep 2006
Messaggi: 475
|
Alla fine non è un problema, ma mi chiedevo nel caso in cui venisse saturato tutto il range dei valori del contatore (che se non erro è un intero a 32 bit) come si comporterebbe il db.
Grazie comunque.
__________________
Fisso: Case Chieftec BA01BBB - Corsair TX-750W - ASUS P5N-E SLI - Intel Core Duo E8400 Cooled by Cooler Master V8 - 4Gb RAM (4x1GB) 800 Corsair XMS2 - ASUS EN8800GTS 512MB - 2xHD Hitachi 160gb in Raid 0 & 1HD Hitachi 320gb - Monitor LG L1919S - Tastiera&Mouse Logitech G11 & MX-518 - Volante Logitech Wingman Formula EX + Atomic Drive&Station |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Oct 2002
Messaggi: 305
|
Non so, dal punto di vista teorico il DB dovrebbe dare errore. Non so quale sia il comportamento effettivo dei DBMS reali, però..
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Il modo c'è...basta assegnare manualmente il contatore e inserire un numero libero nella query.
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Oct 2002
Messaggi: 305
|
Dipende dal database imho. Io ricordo di alcuni database (come minimo Ingres) che non mi lasciavano inserire il valore della chiave primaria se era un contatore. E questo è concettualmente corretto, perché mettendo un contatore la tua intenzione è: "non voglio gestire la chiave primaria, mi basta inserire dati". Non escludo, come dici te, che alcuni DBMS permettano questo "trucco", però non è concettualmente corretto.
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Perché non è concettualmente corretto ? L'unico vincolo di una chiave primaria è che sia univoca.
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Oct 2002
Messaggi: 305
|
Non è corretto in relazione al concetto di "contatore". Sono d'accordo sulla chiave primaria, ma non sul tipo di dato - cioè, se scegli un counter significa che non vuoi gestire la questione.
Questa è comunque una sottigliezza, in realtà cambia poco nel 99% dei casi ![]() |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Sì, su questo siamo d'accordo.
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Sep 2006
Messaggi: 475
|
Quindi alla fine vale la pena di impostare un campo id su tipo di dato numerico piuttosto che come contatore. Anche se il mio prog non da problemi non mi piace il fatto che eliminando e aggiungendo record rimangano dei valori per la chiave non utilizzati.
__________________
Fisso: Case Chieftec BA01BBB - Corsair TX-750W - ASUS P5N-E SLI - Intel Core Duo E8400 Cooled by Cooler Master V8 - 4Gb RAM (4x1GB) 800 Corsair XMS2 - ASUS EN8800GTS 512MB - 2xHD Hitachi 160gb in Raid 0 & 1HD Hitachi 320gb - Monitor LG L1919S - Tastiera&Mouse Logitech G11 & MX-518 - Volante Logitech Wingman Formula EX + Atomic Drive&Station |
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Puoi sempre fare una compattazione in un secondo momento.
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Sep 2006
Messaggi: 475
|
magari sviluppando un apposita utility che si occupa degli shift tra i record in modo da riempire spazi vuoti. E' una soluzione!
__________________
Fisso: Case Chieftec BA01BBB - Corsair TX-750W - ASUS P5N-E SLI - Intel Core Duo E8400 Cooled by Cooler Master V8 - 4Gb RAM (4x1GB) 800 Corsair XMS2 - ASUS EN8800GTS 512MB - 2xHD Hitachi 160gb in Raid 0 & 1HD Hitachi 320gb - Monitor LG L1919S - Tastiera&Mouse Logitech G11 & MX-518 - Volante Logitech Wingman Formula EX + Atomic Drive&Station |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:18.