Il Database
Quando si fanno le cose di fretta... Stavo dimenticando il DB, che ho chiamato User_Manager.

Struttura:
La struttura sarà pressapoco composta da 4 tabelle:

1. Utente, la tabella più importante, dove andremo a salvare i dati per il nuovo utente:
codice:
CREATE TABLE `User_Manager`.`Utente` (
  `username` VARCHAR(100) NOT NULL,
  `password` VARCHAR(100) NOT NULL,
  `nome` VARCHAR(100) NOT NULL,
  `cognome` VARCHAR(100) NOT NULL,
  `email` VARCHAR(255) NOT NULL,
  `indirizzo` VARCHAR(255) NOT NULL,
  `cap` INT(5) NOT NULL,
  `id_citta` INT NOT NULL,
  `codiceFiscale` VARCHAR(16) NOT NULL,
  PRIMARY KEY (`username`),
  CONSTRAINT `id_citta` FOREIGN KEY `id_citta` (`id_citta`)
    REFERENCES `Citta` (`id`)
    ON DELETE CASCADE
)
CHARACTER SET utf8;
Da notare, l'utente ha come Primary Key (PK) il campo username, così che ci assicuriamo che nessun utente abbia lo stesso username.
Un'altra cosa da notare, la Foreign Key (FK) sul campo id_citta, legata al campo id della tabella Citta, con regola di DELETE CASCADE. Questo significa che cancellare una città, comporta cancellare gli utenti di quella città (non ha senso che esistano utenti in una città che non esiste)


2. Citta, che contettà le diverse città, cittadine, paesi
codice:
CREATE TABLE `User_Manager`.`Citta` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `nome` VARCHAR(255) NOT NULL,
  `id_prov` INT NOT NULL,
  PRIMARY KEY (`id`),
  CONSTRAINT `id_prov` FOREIGN KEY `id_prov` (`id_prov`)
    REFERENCES `Provincia` (`id`)
    ON DELETE CASCADE
)
CHARACTER SET utf8;
Da notare che qui la PK è un intero, infatti è dello stesso tipo di id_citta in modo che possano legare. Anche questa tabella ha una FK, id_prov che è legata al campo id della tabella Provincia (stesso discorso degli utenti, sull'esistenza di una città senza provincia)


3. Provincia, che conterrà provincia e abbreviazione:
codice:
CREATE TABLE `User_Manager`.`Provincia` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `nome` VARCHAR(255) NOT NULL,
  `id_regione` INT NOT NULL,
  `abbr` CHAR(2) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE INDEX abbr(`abbr`),
  CONSTRAINT `id_regione` FOREIGN KEY `id_regione` (`id_regione`)
    REFERENCES `Regione` (`id`)
    ON DELETE CASCADE
)
CHARACTER SET utf8;
Da notare la PK sul campo id e la FK sul campo id_regione, che lega la tabella al campo id della tabella Regione.


4. Regione, che contiene soltanto il nome
codice:
CREATE TABLE `User_Manager`.`Regione` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `nome` VARCHAR(255) NOT NULL,
  PRIMARY KEY (`id`)
)
CHARACTER SET utf8;
Da notare, anche qui, la PK su id, e l'assenza di FK (implementiamo solo utenti italiani, quindi non ha senso continuare con le nazioni)

Di seguito, ci saranno i Files.