sql >> Base de Datos >  >> RDS >> Mysql

Cascada INNODB al eliminar y actualizar

Parece que solo quieres un poco de orientación. Así que intentaré ser 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;";

Solo necesitas números de identificación cuando la identidad es difícil de precisar. Cuando se trata de personas, la identidad es difícil de precisar. Hay muchas personas llamadas "John Smith".

Pero estás lidiando con dos cosas que ya han sido identificadas. (E identificado con números de identificación, de todas las cosas.)

Las eliminaciones en cascada tienen sentido. Es relativamente raro que se realicen actualizaciones en cascada en los números de identificación; se supone que nunca cambian. (La razón principal por la que los DBA de Oracle insisten en que las claves primarias siempre deben ser números de identificación, y que nunca el cambio se debe a que Oracle no puede actualizaciones en cascada). Si, más tarde, algunos números de identificación necesitan para cambiar por cualquier motivo, puede modificar la tabla para incluir 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;";

Tenga en cuenta la restricción única adicional en group_title. No desea permitir nada como esto (a continuación) en su base de datos.

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

Querrá llevar ese tipo de cambios a todas sus tablas. (Excepto, quizás, su tabla de clientes).