Thursday, 1 July 2010

Vincoli di integrità referenziali (foreign key)

Avendo ad es. queste due Relazioni:

tb_utenti
id_profilo: 1
tb_profili
id: 1
descrizione: normale

Codice (MySQL):

tb_utenti
KEY `fk_p` (`id_profilo`),
CONSTRAINT  `fk_p` FOREIGN KEY (`id_profilo`) REFERENCES `tb_profili` (`id`)
    ON DELETE CASCADE ON UPDATE CASCADE
(ovvero: costringi fk_p, chiave referenziante di id_profilo a referenziare il campo id di tb_profili)


ESEMPIO DI IMPLEMENTAZIONE
DROP TABLE IF EXISTS `dbname`.`tb_profili`;
CREATE TABLE `dbname`.`tb_profili` (
`id` int(11) NOT NULL auto_increment,
`descrizione` varchar(40) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
INSERT INTO `dbname`.`tb_profili` (`id`,`descrizione`) VALUES
(1,'Amministratore'),
(2,'Utente'),
(3,'Ospite');

DROP TABLE IF EXISTS `dbname`.`tb_utenti`;
CREATE TABLE `dbname`.`tb_utenti` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(20) NOT NULL,
`password` varchar(50) NOT NULL,
`nome` varchar(30) default NULL,
`cognome` varchar(50) default NULL,
`email` varchar(50) default NULL,
`data` datetime NOT NULL,
`attivo` int(11) NOT NULL default '0',
`id_profilo` int(11) NOT NULL default '0',
`note` text,
PRIMARY KEY (`id`,`username`),
UNIQUE KEY `id` (`id`),
KEY `fk_profili` (`id_profilo`),
CONSTRAINT `fk_profili` FOREIGN KEY (`id_profilo`) REFERENCES `tb_profili` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=37 DEFAULT CHARSET=utf8;

(vedere manuale MySQL per il significato del valore AUTO_INCREMENT)

Post a Comment