Mysql
 sql >> Database >  >> RDS >> Mysql

INNODB a cascata sull'eliminazione e l'aggiornamento

Sembra che tu voglia solo una piccola guida. Quindi cercherò di essere breve.

$sql = "CREATE TABLE customerGroups (
   customer_id int(11) NOT NULL,
   group_id int(11) NOT NULL,
   PRIMARY KEY (customer_id, group_id),
   CONSTRAINT customers_customergroups_fk
     FOREIGN KEY (customer_id)
     REFERENCES customers (customer_id) 
     ON DELETE CASCADE,
   CONSTRAINT groups_customergroups_fk
     FOREIGN KEY (group_id)
     REFERENCES groups (group_id) 
     ON DELETE CASCADE
)ENGINE = INNODB;";

Hai solo necessità numeri di identificazione quando l'identità è difficile da definire. Quando hai a che fare con le persone, l'identità è difficile da definire. Ci sono molte persone che si chiamano "John Smith".

Ma hai a che fare con due cose che sono già state identificate. (E identificato con numeri ID, di tutte le cose.)

Le eliminazioni a cascata hanno senso. È relativamente raro aggiornare a cascata i numeri ID; si presume che non cambino mai. (Il motivo principale per cui i DBA Oracle insistono sul fatto che le chiavi primarie devono sempre essere numeri ID e che non devono mai il cambiamento è dovuto al fatto che Oracle non può aggiornamenti a cascata.) Se, in seguito, alcuni numeri ID necessari per modificare per qualsiasi motivo, puoi modificare la tabella per includere ON UPDATE CASCADE.

$sql = "CREATE TABLE groups
(
group_id int(11) NOT NULL AUTO_INCREMENT,
group_title varchar(50) NOT NULL UNIQUE,
group_desc varchar(140),
PRIMARY KEY (group_id)
)ENGINE = INNODB;";

Nota il vincolo univoco aggiuntivo su group_title. Non vuoi consentire nulla di simile (sotto) nel tuo database.

group_id  group_title
--
1         First group
2         First group
3         First group
...
9384      First group

Ti consigliamo di portare questo tipo di modifiche in tutte le tue tabelle. (Tranne, forse, il tuo tavolo di clienti.)