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

Chave estrangeira para várias tabelas e colunas?


Você não precisa incluir o nome do item em ambas as tabelas. Isso é chamado de solução desnormalizada. Você deve tê-lo apenas na tabela de itens e se referir apenas ao id, então se você precisar do nome também poderá juntá-lo com base na chave primária (id). opinião.
CREATE TABLE user(
  id INT(11) NOT NULL AUTO_INCREMENT,
  username VARCHAR(50) NOT NULL,
  password VARCHAR(20) NOT NULL,
  PRIMARY KEY (id)
);

CREATE TABLE items(
  i_id INT(11) NOT NULL AUTO_INCREMENT,
  name TINYTEXT NOT NULL,
  price DECIMAL(8,2) NOT NULL,
  PRIMARY KEY (i_id)
);

CREATE TABLE user_purchase(
  i_id INT(11) NOT NULL,
  name TINYTEXT NOT NULL,
  id INT(11) NOT NULL,
  FOREIGN KEY (i_id) REFERENCES items(i_id),
  FOREIGN KEY (id) REFERENCES user(id)
);

Às vezes, quando o desempenho é crítico, você precisa usar tabelas desnormalizadas. Pode ser muito mais rápido.

A normalização é importante para evitar diferentes anomalias. Se você tiver tabelas em uma forma normal de alto nível, suas tabelas não serão redundantes e não terão essas anomalias. Por exemplo, se você tiver algo armazenado em vários locais, precisará cuidar para manter todos os dados redundantes atualizados. Isso lhe dá a chance de fazer isso incorretamente e acabar tendo diferentes anomalias.

Na sua situação, ter uma chave estrangeira ajuda a manter a integridade dos dados, mas sem uma chave estrangeira para o nome, você poderá ter itens com nomes nas compras que não estão presentes na tabela de itens.

Isso é uma espécie de anomalia.

Existem muitos tipos disso, é melhor evitá-los o máximo que puder.

Leia mais aqui sobre anomalias

Em alguns casos você deve desnormalizar. Portanto, armazene alguns dados de forma redundante devido a problemas de desempenho. Dessa forma, você pode salvar algumas operações de junção que podem consumir muito tempo.

Os detalhes da normalização são cobertos por tópicos de diferentes formas normais:NF0, NF1, NF2, NF3 e BCNF

Formulários normais em detalhes

Para mais detalhes sobre os fundamentos matemáticos da decomposição sem perdas para formas normais superiores, consulte "Dependências funcionais". Isso vai ajudá-lo a entender por que você pode manter os ids "redundantes". Praticamente são redundâncias necessárias, pois você precisa delas para poder reconstruir posteriormente o conjunto de dados original. Esta será a definição para as diferentes formas normais. Que nível desta redundância é permitido?

Dependências funcionais