Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

INNODB em cascata ao excluir e atualizar


Você parece querer apenas um pouco de orientação. Então vou tentar 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;";

Você só precisa números de identificação quando a identidade é difícil de identificar. Quando você está lidando com pessoas, a identidade é difícil de definir. Há muitas pessoas chamadas "John Smith".

Mas você está lidando com duas coisas que já foram identificadas. (E identificado com números de identificação, de todas as coisas.)

Exclusões em cascata fazem sentido. É relativamente raro propagar atualizações em números de identificação; presume-se que nunca mudem. (A principal razão pela qual os DBAs Oracle insistem que as chaves primárias devem sempre ser números de identificação e que nunca devem mudança é porque o Oracle não pode atualizações em cascata.) Se, posteriormente, alguns números de identificação precisar para alterar por qualquer motivo, você pode alterar a tabela 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;";

Observe a restrição exclusiva adicional em group_title. Você não quer permitir nada assim (abaixo) em seu banco de dados.
group_id  group_title
--
1         First group
2         First group
3         First group
...
9384      First group

Você desejará realizar esses tipos de alterações em todas as suas tabelas. (Exceto, talvez, sua tabela de clientes.)